Ola Bini is a Swedish developer working for ThoughtWorks. His daily job includes working on JRuby, starting up a Swedish ThoughtWorks office and mucking around with Java and Ruby. In his spare time he spends most time on his language Ioke, working on one of several other open source projects or reading science fiction. Ola has presented at numerous conferences, such as JavaOne, Javapolis, JAOO, RailsConf, TheServerSide Java Symposium and more. He is the author of APress book Practical JRuby on Rails Ola is a DZone MVB and is not an employee of DZone and has posted 45 posts at DZone. You can read more from them at their website. View Full User Profile

Why Not Io?

  • submit to reddit

I have been asked a few times in different circumstances why I feel the need to create my own language instead of just working with Io. That is a very valid question, so I’m going to try to answer it here.

First of all, I like Io a lot. Ioke is close enough to Io that it will be obvious who the parent is. In my mind at least, the differences are in many ways cosmetic and in those that are not it’s because I have some fairly specific things in mind.

So what are the main differences? Well, first of all it runs on the JVM. I want it that way because of all the obvious reasons. The Java platform is just such a good place to be. All the libraries are there, a good way of writing extensions in a language that is not C/C++, a substrate that gives me threads, GC and Unicode for free. So these reasons make a big difference both for people using Ioke, and for me. I want to be able to use Ioke to interact with other languages, polyglot programming and all. And since I expect Ioke to be much more expressive than most other languages, I think it will be a very good choice to put on top of a stable layer in the JVM. Being implemented in C makes these benefits go away.

Of course I could just have ported Io to the JVM and be done with it. That’s how it all started. But then I realized that if I decided to not do a straight port, I could change some things. You have seen some discussions about the decisions I’m revisiting here. The whole naming issue, handling of numbers, etc. Other things are more core. I want to allow as much syntactic flexibility as possible. I really can’t stand the three different assignment operators. I know they make the implementation easier to handle, but having one assignment operator with pluggable semantics gives a more expressive language.

Another thing I’m adding in is literal syntax for arrays and hashes, and literal syntax for referencing and setting elements in these. Literals make such a difference in a language and I can’t really handle being without it. These additions substantially complicate the language, but I think it’s worth it for the expressive power.

A large difference in Ioke will be the way AST modification will be handled. Io gives loads of power to the user with regard to this, but I think there is more that can be done. I’m adding macros to Ioke. These will be quite powerful. As an example, the DefaultMethod facility (that gives arguments, optional arguments, REAL keyword arguments and rest argument) can actually be implemented in Ioke itself, using macros. At the moment this code is in Java, but that’s only because of the bootstrapping needed. The word macro might be a bad choice here though, since it executes at the same time as a method. The main difference is that a macro generally has call-by-name/call-by-need semantics, and that it will modify it’s current or surrounding AST nodes in some way. Yes, you heard me right, the macro facility will allow you to modify AST siblings. In fact, a macro could change your whole script from that point on… Of course Io can do this, with some trickery. But Ioke will have facilities to do it. Why? Doesn’t that sound dangerous… Yeah. It does, but on the other hand it will make it really easy to implement very flexible DSLs.

A final note - coming from Ruby I’ve always found Io’s libraries a bit hard to work with. Not sure why - it’s probably just personal taste, but the philosophy behind the Io libraries seem to not provide the things I like in a core library. So I will probably base Ioke’s core library more on Ruby than on Io.

There you have it. These are the main reasons I decided to not use Io. And once I started to diverge from Io, I decided to take a step back and start thinking through the language from scratch. Ioke will be the result, when it’s finished. (Haha. Finished. Like a language is ever finished… =)

From http://olabini.com/blog/

Published at DZone with permission of Ola Bini, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)



Serge Bureau replied on Tue, 2008/10/07 - 8:21am

Iam sorry but, who cares ?

Otengi Miloskov replied on Tue, 2008/10/07 - 12:00pm

Io, thats the new Hype of de jour.

First they said it was Ruby and now is Io. hmm.. and even a more slow language than Ruby, What about Scala or Groovy or JRuby?, It is not enough?, I listen Ruby is top notch for DSL.

I'll give you a piece of advise go back to Ruby and JRuby and try to contribute more and bring Ruby to the top, still a long way for Ruby to catch.

For example Python I see it very advanced in all areas, Ruby have to compete with Perl, PHP and Python first and then with Java but you are thinking in a slow and unknown language??.

As Java developer and to some extent Python/Jython and Groovy I don't need another language maybe JRuby I will use it sometimes but no more.So I dont need Io or another hype sorry bro.

Collin Fagan replied on Tue, 2008/10/07 - 4:09pm

We need a Language Zone for dzone.

Jeroen Wenting replied on Wed, 2008/10/08 - 12:17am

and a "New Me2 Projects Zone" for all those people trying to make a name for themselves by doing things that have been done a thousand times before or are trying to get "new features" into Java just because some other language has them.

 Though if we do that it might get awfully quiet in the Java Zone.

phil swenson replied on Wed, 2008/10/08 - 9:16am

wow, what a bunch of close-minded people.   is this what the java world has come to?   people who fear new things?

Otengi Miloskov replied on Thu, 2008/10/09 - 2:14am in response to: phil swenson

Fear?, nobody fear, Just tired of every day come and go a Fad or a Hype.

As I said already I use Python and Groovy and Starting to learn about Scala ,Why the hell I need another hype, buzzword, Fad and a slow as hell language, Ruby is better language than Io.

Better get a life bro.

Jeroen Wenting replied on Thu, 2008/10/09 - 4:04am in response to: Otengi Miloskov


Fear?, nobody fear, Just tired of every day come and go a Fad or a Hype.

Better get a life bro.


well said. We who've been around the block a few times have seen it all countless times before. If we were so closeminded we'd not have adopted Java when it was the upstart, we'd not have embraced wel applications, distributed computing, etc. etc..

But we're cautious and don't jump onto every single new hype because we know the vast majority of them are not going anywhere and many of them would be harmful if they did get widespread adoption.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.