Nick Mudge Ignition Software Consulting & Development

I've been reading books on Ruby. I want to know the language really well. I'm that kind of programmer. I love to know the exact details of a language as much as possible.

By far the thing I like least about the Ruby language at this point is that it feels like two languages, Ruby 1.8.x and Ruby 1.9.x. Each time I read a paragraph that explains a difference between Ruby 1.8 and Ruby 1.9 I am annoyed. I want to learn one programming language, not two, but which one should I really learn? My answer seems to be both at the same time. Ugh.

It seems to be the most sense to really learn Ruby 1.9.x because that's the future of Ruby programming. But from the looking around I have done Ruby 1.8.x is easier for a beginner to learn for various reasons. Ruby 1.8.x is more stable, has more support by libraries, documentation, help and tools. There's less trouble with using Ruby 1.8.x, but it's not the future. This isn't good for beginners who want to learn and start using Ruby.

As an example of Ruby 1.9.x unfriendliness, say you are a Ruby beginner and you want to get Ruby up and running at work as fast as possible for a little task that needs to be done. Your computer is running windows so you go to look for a download of Ruby on windows. There's a really nice and fast Ruby 1.8.6 One-Click Installer which sets you up nicely on windows and which likely has everything you need, including an editor. This doesn't exist for Ruby 1.9.x.

While having "more than one way to do it" may be the way to go for you depending on if you take the Perl or Python philosophy, I'd definitely say that for beginners learning a language, having choices about what to learn, like which implementation to learn, really sucks. By default newbies don't know anything and asking them to choose when they lack experience and data is frustrating.

Perhaps it doesn't really matter much if you use or learn Ruby 1.8.x or Ruby 1.9.x or both, but as a newbie you just don't know.

I've seen people ask what programming language they should learn and use for making websites. At one time I had that question. It can be a worrisome question and seem important. In my opinion the answer is that for a new person it really doesn't matter much which language as long as it has some good support for making websites. Ruby, Python, Perl or even PHP are fine. Who cares, it doesn't matter. So in reality the question really isn't very important. And maybe choosing between learning or using Ruby 1.8.x or Ruby 1.9.x doesn't really matter either. I'd like opinions from more experienced Ruby programmers about that.

At this point I've sort of arbitrarily decided to go along and use the Ruby 1.8.x implementation of Ruby because Ruby on Rails still recommends Ruby 1.8.x for use with Rails - even though I've heard Rails runs fine on Ruby 1.9. When Rails recommends 1.9.x then I'll switch to that when I can. So in learning Ruby I'm learning Ruby 1.8.x and Ruby 1.9.x and it is annoying.

This multiple implementation annoyance also occurs in other programming languages. I noticed that some of the more popular programming languages I can think of tend to have a single, solid, standard implementation that almost everyone uses. PHP and Java are examples.

Most prominently I think of Lisp when I think of multiple implementations. Maybe it's not so much all the parentheses that have caused Lisp not to become a popular mainstream programming language. Maybe it has more to do with the lack of a single solid implementation. I also noticed that Lisp seems to be big about written language standards, while more popular programming languages more or less follow a reference implementation as the standard for the language.

I've been seeing many articles and blog posts about Clojure. I'm feeling the buzz and excitement about it. Perhaps it is doing so well because it has been created for such a standard and well known and used platform, the JVM. Instead of a Lisp implementation trying to create or grow it's own community (among already existing small Lisp communities), Clojure seems setup to tap the existing very large Java community. That's pretty cool.


Benedict Eastaugh
24 August 2009

The difference between Ruby 1.8 and Ruby 1.9 is especially confusing because it's not just changes to the language standard and standard library, but a switch to a new VM (YARV rather than the old MRI). There are also now multiple Ruby implementations: JRuby, IronRuby, Rubinius.

That being said, I presume new users would have the same problem deciding which version of Python to use: 2.6 or 3.

Generally speaking, Rails runs just fine on Ruby 1.9—the Rails team has worked pretty hard over the last couple of years to ensure that. Where you might run into problems is with other third-party libraries. is a good way to check whether a library is compatible with Ruby 1.9 or not.

Ruby 1.9 on YARV is also a lot faster and more efficient than 1.8.x, and has a bunch of improvements that may or may not be important to you: better string encoding support (multibyte characters and the like), JavaScript-style hashes for the common case where the keys are all symbols, and much more.

I wrote a little about my own experience of upgrading to 1.9.1 from 1.8.6 here:
24 August 2009

(I've told that I'm a lisp hater - but that's not true)

There is only one implementation of lisp that matters and that's Allegro Lisp.

You should see Scheme.

(this post is not a dig - I love lisp and scheme [though I loath ruby - we should stamp out all the scripting languages specified by their implementations (tcl, ruby, awk, csh, python, ash, bash ksh, perl, php ... the list goes on and bloody on)]

Homoheroic Programming
24 August 2009

The problem with Lisp is that it is a heroic language. It scares cowards away. These cowards crowd around safe and comfortable languages like Python or Java because they are literally afraid of expressing themselves.

You can design for cowardice or your can design for epic heroism, ruby chose its path, now it is time to choose yours!
25 August 2009

@Homoheroic Programming and DavidNcl

At the end of the day the only thing that counts is whether or not you finished your job. And all those scripting languages make it possible to do so.
25 August 2009

@DavidNcl: "scripting" languages /lolz/

Only one implementation of Lisp that matters?! re-/lolz/

Tobias Svensson
25 August 2009

As DavidNcl said before, Scheme is probably the programing language with the largest differences between the various implementations. And the new draft statement (published 20 August 2009) doesn't really improve the situation, it makes it even worse.
26 August 2009

Having a single implementation of a language is a relatively new phenomenon. Until the rise of open source software, a language generally had to have multiple implementations to become popular and well known. Now there are complaints if there are more than one? How the world has changed!
26 August 2009

Scheme and Lisp do come to mind when you're thinking of multiple implementations. But each implementation can be a completely different language in itself. Lisp dialects are domain-specific languages *factories*. Parenthèses are also a great thing, as its a unified syntax. By learning *a* scheme or *a* lisp, I actually learn dozens of languages at once. They all share some semantics, and then each is carefully crafted to get your job done right.

I believe that Lisp/Scheme didn't have a "huge" success à la php because, despite their apparent simplicity, they were too powerful and unexpectedly complex for wanabees.
While Haskell (which I like and use) has those fancy keywords (monads, typeclasses ! Everything seems to revolve around them. Every problem is solved thanks to them! I can add 1 and 3? Hail monads! I wrote a parser? Bless typeclasses!), you'd be surprised of the maths involved in Scheme. Scheme designers do consider denotational semantics when designing their language. PHP, ruby, Perl are just an accumulation of "hey! I'm too [whatever] to do that myself, so let's have it in the language. I have some duct tape left to fix the mess afterwards".

I do program in Scheme, Common Lisp, Erlang, OCaml and Haskell (the lasttwo,statically typed ones being the only ones that I didn't apply in a company) and I can tell you that one has a lot to learn by looking thouroughly how the other functionnal communities think. That explains why sometimes a single implementation exists, sometimes a lot do.
Name: (required)
Email: (required)
What has four legs, rhymes with bat and says, "Meow?" (One word answer.)
Spam Filter: