How would you compare Io to Lua, Python, Ruby, Perl and Java?

An overview:

How production stable is it?

It hasn't been terribly well tested and isn't being used in any production environments that I know of. Please help us by testing things out! I generally release fixes to any bugs found in a matter of days. The up side of Io being young language (born in April 2002) is that your help and input can have a significant effect on it's future.

Will there be any major changes in the semantics or syntax anytime soon?

I'm still open to that possibility, but require such changes to make things significantly simpler and/or much easier to use.

Is the Server version capable of supporting multithreaded web applications? That is, is it possible to write 'Io Server Pages' in a multithreaded non-cgi way in which one VM handles multiple requests simultaniously like PHP or a Servlet-Engine?

Yes, with coroutines. They are essentially the same as normal threads but you have to call "yield" to allow other threads to continue. The benefits of coroutines are:


A high load server written in a scripting language with coroutines can often dramatically out perform one written in C/C++ with threads.

Note that you may need to increase the limit on the number of open file descriptors per process to take full advantage of a high performance Io server. Here's some info on doing this on linux. Most unixes support a system call that can set this limit for the process. Here's some more info on this.

Do you have more documentation than the manual.html? How do I write 'addon' libraries?

There is also an ImplementationNotes.html in the IoVM/_docs folder. I haven't written much on bindings yet, but they're pretty easy to write. You might try copying the Directory add-on in the IoServer folder and modifying it to your own needs. It's a good example of a simple binding.

Why not use an infix message syntax like Smalltalk?

A few reasons:

Why use a CamelCase naming convention instead of underscore_separated compounds?

Personal preference.

Would it be possible to run Io on a Java VM or .Net?

Yes, but I would guess it would involve reimplementing the Io VM in Java or .Net instead of directly converting Io code to byte codes. Io does many dynamic things which I doubt are possible to do at a low level in either of those. It's also worth asking why one would want to considering that Io is already implemented in C, which is supported on far more systems than Java or .Net.

Is there a syntax highligher for Io?

Several can be found in the source distribution folder Io/projects/SyntaxHighlighters. Contributions of more highlighters or improvements to these are welcome.

Why don't you use [my favorite source control management software]?

We use git because it's simple, reliable, distributed and fast. If you know of a better scm that supports this model and these features, we'd like to hear about it.

Why the name 'Io'?

A simple name to reflect the goal of a simple language.

Wasn't there another language named 'Io'?

When I chose the name Io, I searched the net and wasn't able to find any mention of a programming language with that name. Long after the public release, someone mentioned it and I was only able to find one reference to it in a book review on Amazon. The earlier Io turned out to be an interesting language based on continuations and written by Raph Levien. Since then, Martin Sandin has written an implementation of Raph's language called Amalthea. My apologies for any confusion.

What is the proper pronunciation and capitalization of 'Io'?

Io is pronounced "eye-oh".
When written, the "I" is capitalized and the "o" is lowercase.
As a file suffix, both letters are lowercase. For example: "test.io".

How can I help?

Testing, suggestions and participation in the mailing list are a big help.
If you'd like to get even more involved, you might drop by the Io irc channel and ask if there's something that needs to be done that you'd enjoy working on.