Steve Dekorte's Io Programming Language

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_reduce won'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 init

because 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.

User login