
The Io Language - limist
http://www.iolanguage.com/
======
draegtun
Two of the best posts written about Io were by _why:

* Io Has A Very Clean Mirror - [http://web.archive.org/web/20080212010904/http://hackety.org...](http://web.archive.org/web/20080212010904/http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html)

* Lazy Bricks, Lazy Mortar - [http://web.archive.org/web/20080430135919/http://hackety.org...](http://web.archive.org/web/20080430135919/http://hackety.org/2008/01/10/lazyBricksLazyMortar.html)

Unfortunately they're only available via WayBackMachine.

Other useful links:

* Io notes - <http://iota.flowsnake.org/>

* Io sub-reddit - <http://www.reddit.com/r/iolanguage/>

~~~
silentbicycle
So the most significant posts about Io are only in the wayback machine?
Really?

~~~
draegtun
Well "significant" is your words not mine :)

Unfortunately _why disappeared off the net and with it went (most of) his
sites including this predominately Ruby blog site (Hackety.org).

Who knows perhaps it might get resurrected one day. But at least its not lost
thanks to WayBackMachine.

BTW... All of _why's code was saved here: <http://github.com/whymirror> And
among this you can find a small web framework he wrote in Io:
<http://github.com/whymirror/yown>

~~~
Jeremysr
He also created a language of his own which was inspired by Io:
<http://github.com/fogus/potion> (and here's the pamphlet:
<http://runciter.net/potion> )

~~~
draegtun
Yes I was following this quite avidly before _why's disappearance.

Also I liked CoffeeScript version of the pamphlet:
[http://github.com/jashkenas/coffee-
script/blob/master/exampl...](http://github.com/jashkenas/coffee-
script/blob/master/examples/potion.coffee)

I did (for my own leisure) write Perl5 version of this pamphlet. As some point
will also do Io & Perl6 versions methinks.

------
phaedrus
I've written a very powerful C++ binding library for Io. It allows you to
mirror object-based C++ APIs inside Io and will do most conversions for you
automatically. (For instance you don't have to worry about calling methods by
pointer or by reference; it will "do the right thing" automatically.) I've
used it to bind the Bullet physics engine and the Irrlicht 3d graphics engine,
for game making.

<http://github.com/dennisferron/LikeMagic>

------
richcollins
One very simple thing that Io gets right is the unification of instance
variables and methods as slots. It lets you override behavior with little
friction:

    
    
      Person := Object clone do(
        name ::= nil
      
        greeting := method(
          "Hello I'm " .. name
        )
      )
      
      bob := Person clone setName("Bob") greeting
      # => I'm Bob
      
      bill := Person clone
      bill greeting := "Yo"
      bill greeting
      # => Yo

~~~
mapleoin
What am I missing?

    
    
      >>> class Person(object):
      ...     def __init__(self, name=None):
      ...         self.name = name
      ...     def greeting(self):
      ...         return "I'm %s" % self.name
      >>> bob = Person("Bob")
      >>> bob.greeting()
      0: "I'm Bob"
      >>> bill = Person()
      >>> bill.greeting = "Yo"
      >>> bill.greeting
      1: 'Yo'

~~~
zephyrfalcon
Notice that you use bob.greeting() but bill.greeting (without the
parentheses), while Io uses the same syntax in both cases. Whether this is
good or bad is mostly a matter of preference, I think...

Of course, this implies that Io would need a separate construct to get the
value of a slot (e.g. bob getSlot("greeting")), while in Python you'd just use
bob.greeting no matter whether greeting is callable or not.

------
Avshalom
_why's Io Has A Very Clean Mirror:
[http://web.archive.org/web/20080222044550/hackety.org/2008/0...](http://web.archive.org/web/20080222044550/hackety.org/2008/01/05/ioHasAVeryCleanMirror.html)

------
dododo
it would be great if every language on their home page, as well as listing how
to do common things such as this:

<http://www.iolanguage.com/scm/io/docs/IoTutorial.html>

would also give a demonstration of what makes this language unusual (beyond
syntax).

for io it seems like this might be some smalltalk-inspired message passing
stuff:

[http://www.iolanguage.com/scm/io/docs/IoGuide.html#Objects-F...](http://www.iolanguage.com/scm/io/docs/IoGuide.html#Objects-
Forward)

combined with concurrency:

[http://www.iolanguage.com/scm/io/docs/IoGuide.html#Concurren...](http://www.iolanguage.com/scm/io/docs/IoGuide.html#Concurrency-
Actors)

but it's hard to tell at a glance.

fwiw, the haskell page does a great job of this: following the "why use
haskell?" gives the classic quicksort example.

~~~
pwpwp
I don't know. Of course it's nice if a language has an informative homepage
(which Io does), but I think languages shouldn't (and probably can't) be
judged at a glance.

Instead of "quick stuff", I'd rather have a (possibly peer-reviewed) paper
about the language.

~~~
scott_s
Even papers have abstracts, which I'm going to read first to determine if I'm
going to take the time to read the whole thing.

------
devin
If only there was actually an Io community... If you notice, practically
everyone in here mentions they've "dabbled" with Io, but practically no one is
using this for production code.

Io still doesn't even have releases which I find pretty disconcerting.

~~~
phaedrus
That can be a problem. When I wanted to "freeze" a version of Io to use as a
base for making the game engine scripting off of, there wasn't a point release
I could refer to as "the last stable version". So I just took the then-most-
recent github snapshot and forked it (forked in the github sense) and I will
update that as I vett new versions of Io against my own code. It has proven to
be stable enough not to be a problem, but I think when someone wants to get
started in it, the lack of an official pre-built binary to download and
install may throw people off. This has been discussed on the mailing list and
I wouldn't be surprised if Steve is already working on getting some binaries
like that up somewhere.

~~~
devin
Yeah I actually asked Steve about this and heard the "We're busy people; we
have families" response. There's nothing wrong with this by itself, but when
you couple it with the size of the community it makes me wonder if Io will
forever be "a fun idea", but nothing more.

I sincerely hope they get point releases up. Can you imagine someone with a
casual interest in the language being in love with the fact that they have to
keep their own version up to date and review core code for inclusion in their
"version"? What about libraries across those frozen versions? It's a recipe
for disaster and it pains me to no end that it hasn't been done yet.

------
SAHChandler
I absolutely love Io, and my favorite "feature" of the implementation is the
ability to modify scripts in real time and have the changes take place
immediately, for better or worse ;)

~~~
Zev
Agreed. But, I like it when I get to take it a step further; change a method's
implementation while said method is in the middle of being called :)

------
limist
I first encountered this language while looking at the ToC of "Seven Languages
in Seven Weeks":

[http://pragprog.com/titles/btlang/seven-languages-in-
seven-w...](http://pragprog.com/titles/btlang/seven-languages-in-seven-weeks)

...and it was the only language I hadn't seen anything of before. Interesting
mix of paradigms, and very clean syntax, at least from the little I've seen of
it. If any HNers have used it for a non-trivial project, would love to hear of
your experiences please.

~~~
dasboot
I only played around with it a long time ago. Very interesting language
indeed. You may also like Ioke (<http://ioke.org/>) - a jvm based language
that is directly inspired by Io.

~~~
bguthrie
Ioke is lovely. Not particularly practical, but I had a ton of fun learning
and contributing to it. More friendly and approachable and (if I understand
Ola correctly) explicitly macro-friendly than Io. I think of it as the
ultimate DSL language.

Also, fully translatable. Check out Hindi:
[http://github.com/olabini/ioke/blob/master/examples/multilan...](http://github.com/olabini/ioke/blob/master/examples/multilang/hindi/account.ik)

~~~
richcollins
In what ways is it more macro-friendly?

