Io's intriguing design

I didn’t manage to touch on this in What Has Ruby Done For You Lately, but Io is a really impressive language. Mostly in the minimal number of concepts one needs to grasp in order to deeply understand the language.

To pick on Java (sorry), a list of concepts you need in order to grasp Java:

* Primitive types
* Objects
* Classes
* Interfaces
* Inheritance
* Iteration
* Conditionals
* Operators
* Type casting
* Generics
* Method calls

I’m sure I’m missing some. Further, that’s just what you need to write a program with _one class_. To build a realistic system you need to know about class paths, packages and all sorts of arcane details.

In comparison, to build a simplistic Io program, you need to understand:

* Lazy evaluation
* Objects as prototypes
* Short circuit evaluation
* Messages
* Closures

That list ended up about twice as long as I thought it would, actually. Really, all the average practicing programmer needs to learn is prototypes and lazy evaluation.

Io’s guiding design principle is simplicity and power through conceptual unification.

That quote, from the Io Programming Guide, pulls it all together and summarizes why the language nerd in me is quite interested in Io.

What Has Ruby Done For You Lately?

When I go to speak about Ruby at non-Ruby groups, my go-to schtick is only mildly subversive. Sure, I tell them that Ruby is a fantastic language that will make them a better programmer. But, I don’t expect them to switch to Ruby right away. Instead, I lead them down the path of borrowing ideas from Ruby and using them in their day-to-day coding, no matter what language they use.


This week at OSCON 2008, I applied the same tact, but I did it on Ruby programmers. See, there are tons of great ideas in languages like Haskell, Io and Erlang. Some translate really well to Ruby and some don’t. But they’ll all twist your brain around in interesting ways.

That’s the idea. Here are the goods: just the slides, the code and the slides. Enjoy!