4 ms·
This looks really cool and reminds me a lot of Io. Speaking of Io, this make me curious about the performance of Atomo. Io while an amazing experiment in expres
by swannodette 16y ago
This looks really cool and reminds me a lot of Io. Speaking of Io, this make me curious about the performance of Atomo. Io while an amazing experiment in expressivity has terrible performance. Does Atomo similarly prioritize expressivity to the detriment of reasonable performance?
- vito 16y agoRight now, my priority with Atomo is consistency in the design and simplicity in the implementation. It's acting as an incubator for a ton of interesting language features at the moment (both for myself and for Slate), so I haven't made optimization a priority yet as major parts of it are constantly changing. For example, the version on Hackage has a traditional exception system, while the latest darcs changes have replaced that entirely with a condition/restart system written in Atomo. I'd call it "fast enough," but it's no speed demon. It's pretty early on; I just started planning Atomo's design this June. There's almost certainly some low-hanging fruit when it comes to optimization, and it is something I've been keeping a close eye on for a while now. It's only been getting faster, and in my testing of GHC 7 I saw pretty substantial performance boosts for free. And that's the nice thing. It's built on a fantastic platform, which you can drop into very easily whenever you want with a nice DSL. Glad you like it, though. I completely understand the caution when it comes to performance of such a high-level language.
- swannodette 16y agoSounds reasonable. So is it possible to mix Haskell in with Atomo to get to the metal so speak? Do you have any examples of this?
- vito 16y agoYes; all of Atomo's kernel is defined using this Haskell DSL. For example, here's Atomo's ports system: http://darcsden.com/alex/atomo/browse/src/Atomo/Kernel/Ports.hs http://darcsden.com/alex/atomo/browse/src/Atomo/Kernel/Ports... I've also written a few wrappers for Haskell libraries over at http://darcsden.com/alex http://darcsden.com/alex - see http, json, and command. Basically, you define your methods in Haskell, and call them from Atomo; these methods can be defined as an expression (=:::), a value (=::), or some arbitrary VM action to be executed to yield a value (=:). (Admittedly those operators have gotten a bit silly.) The definitions use QuasiQuotes for the method pattern, and can use them for expressions as well, though that's not encouraged (operator precedence and macros make it a tricky thing to do at compile time). They look a bit noisy - [$p|x foo: y|] but that'll be fixed come GHC 7, where that pesky $ is removed.
- kylecordes 16y agoIt reminds me so much of Io, that I'm a bit disappointed that Io is not mentioned in the "its design is inspired by ..." text at the top of the first page.
- silentbicycle 16y agoIt does mention Slate, among others. After skimming the intro, I was similarly surprised it didn't mention Self, but it was probably more directly influenced by Slate. (Slate and Io were both strongly influenced by Self.)
- vito 16y agoSelf and Io are both languages that have similar concepts but weren't direct inspiration; in Self's case, it was pure chance (I've never actually used Self), and in Io's case, Slate was a more direct influence. Io didn't have much mindshare, despite being another language I love (but never use).