Io, where I think I want to be today

Filed under: io 

So I think I've settled on a replacement for Python: Io. I find several things highly appealing about it:

  1. expression-based
  2. almost no syntax
  3. actor-based concurrency
  4. prototype-based object model
  5. lazy evaluation

When I say Io has almost no syntax, I mean it. Here's the complete BNF that defines Io's grammar:

exp        ::= { message | terminator }
message    ::= symbol [arguments]
arguments  ::= "(" [exp [ { "," exp } ]] ")"
symbol     ::= identifier | number | string
terminator ::= "\n" | ";"

Contrast this with (for example) the BNF defining Python's grammar or Ruby's (Perl apparently cannot even be described in a BNF). Having a complicated grammar isn't necessarily a bad thing, but I find smaller grammars and less syntax highly appealing (especially when they actually result in a more expressive language).

Io's guiding design principle is simplicity and power through conceptual unification:

blocks with assignable scope => functions, methods, closures
prototypes => objects, classes, namespaces, locals
messages => operators, calls, assignment, variable accesses

Io still lacks in many areas outside the language itself. The documentation leaves a lot to be desired, libraries are few, the community is small and as such it's a long way away from being a productive language. But, these are things that can be addressed and fixed by people outside the core devs, which I find promising.



3 comments Leave a comment