The Io language is a very simple & elegant homoiconic language. It was introduced as one of the seven languages in the '7 Languages in 7 Weeks' book. It's basically influenced by Lisp and Self, Smalltalk.
7 Langs/7 Weeks is such a great book. I was intrigued by Io, but enthralled by Erlang, which ended up taking my career on a wildly different path, if only briefly.
If you do the exercises it might take seven weeks at a few hours each. If you don't, you could read the book in a night. I don't think I finished it (it was a work bookclub that died out halfway); now would definitely be good time to go back. There's a second book in the series I wanted to try for Elm and Elixir.
I read it over a couple of weeks of sitting out in a pub beer garden on evenings I wasn't doing anything else.
I almost certainly didn't learn everything there was to learn from the book in the process, but I definitely felt like I'd got my value for money out of it.
I read about it there too, but maybe I misremembered it.
I cam away with the distinct impression that the great thing about IO was the interpreter could be modified (ala lisp) by adding or removing functions, and as such it was an easy language to create functional "sandboxes" in by just creating a subclass and modifying the available method.
But I can find no mention of that on the projects docs..
Just discovering the language with this post. I'm must say I'm impressed by the syntax. I've read part of the documentation and understand every code example just by reading it, which is sufficiently rare to be mentioned.
I'm thinking to give it a try as a scrpiting language but find it too bad it seems no longer maintained. Code has not changed since 2 years.
To note, there is a pure Go implementation of Io[1] which is actively worked on.
Also noticed this project[1] by IO author which lets you use Python 3 within Io. The readme is rather short but there is a nice example in the sample/ folder[2].
I learned about the Io language from working through the Seven Languages in Seven Weeks book, as I suppose most people did. In the book, it was suggested that you should take a look at the example problems on the Io website. At some point, those example problems disappeared.
Some 2 years ago Io got a new way of defining setters, which allowed for implementing destructuring bind ([a,b,c] := someTriple). It took me the better part of a year, but it was very rewarding. I put a write-up on my blog, which might be of interest if you'd like to know more about Io interpreter internals:
Io has been around for a long time, indeed. I thought it was great, writing an Io interpreter in C was a lot easier than almost anything else, so for learning language internals, it is awesome, and I'd even say a great companion to LISP, to play around with how different first principles affect programming -- something that is obscured in mainstream languages, making it harder to learn how the guts work.
The more I program, the less do I value any of these overly dynamic features and elegant aesthetics.
However, I have come to greatly value robust tooling surrounding a language, to the point where I believe designing a language that makes the creation of such tooling difficult (or impossible) is a terrible trade-off.
Two of the best Io-related blog posts by _why:
* Io Has a Very Clean Mirror - https://viewsourcecode.org/why/hackety.org/2008/01/05/ioHasA...
* Lazy Bricks, Lazy Mortar - https://viewsourcecode.org/why/hackety.org/2008/01/10/lazyBr...
And some code examples:
* Making an Account object - https://github.com/IoLanguage/io/blob/master/samples/misc/Ac... * Bottles of Beer - https://github.com/IoLanguage/io/blob/master/samples/misc/Bo...