Steve Dekorte's Io Programming Language
By Canol Gökel - Posted on June 18th, 2008
Tagged:
I met Io programming language a few weeks ago. It is very simplistic, minimalist and has a consistent syntax. It is a fully object oriented language inspired by Smalltalk. A significant difference from Smalltalk is that it is prototype based, so there are no classes.
To name a few advantages and disadvantages:
Advantages:
- Very consistent syntax
- Very minimalistic rules
- Has a lot of useful methods that makes your life easier
- Very polished source code
- Very informative and polished errors
- Chic documentation
Disadvantages:
- I like the writing style:
"Hello" at: 1 put: "a"
instead of
"Hello" atPut(1, "a")
Because it is more human like.
- Indexing begins from 0 not from 1.
- I don't like when a language does not want you to declare your variables before usage. I think declaring obligatory provides some kind of documentation to the user of a program.
- Some methods does not behave what you would like it to. For example, when you write
"Hello" at(1)
You get the byte representation and not the letter itself.
- Resulting elseif structures look a bit ugly.
- No GUI library bindings yet
Of course these are all subjective.
I think the worst disadvantage is that it does not have GUI binding yet. But once it has, then it will be a killer programming language.

> I like the [Smalltalk] writing style
If you like Io enough, you could use the Parser package in GST to translate Smalltalk to Io.
> I don't like when a language does not want you to declare your
> variables before usage. I think declaring obligatory provides some
> kind of documentation to the user of a program.
More important than that is that you are declaring a scope. For example, this Python
tree_reducewon't do what you want:def tree_walk(proc, tree): for node in tree: if isinstance(node, (list,tuple)): tree_walk(proc, node) else: proc(node) def tree_reduce(proc, tree, init=None): def visit(node): init = proc(init, node) tree_walk(visit, tree) return initbecause an unwanted scope is magicked into existence.
> You get the byte representation and not the letter itself.
If it doesn't have a character type distinct from the integer type, then this is the right thing to do, not answer a string of one character.
Everything has a true or false value. This will lead to obscure bugs. I think this is one area where Smalltalk got it very right... if you want anObject asBoolean, you write the method explicitly.