Monday, September 15, 2014

Opal - Ruby to JavaScript compiler

So I just found out about the Opal Ruby to JavaScript compiler and I am very intrigued.

http://opalrb.org/

So for a few years now, the Ruby community has been encouraged to use CoffeeScript as a JavaScript "alternative" (http://coffeescript.org/) but for some reason, as an avid JavaScript programmer, it never appealed to me. CoffeeScript offers a small amount of syntactic sugar on top of JavaScript, but it never seemed worth the learning curve for me to take it on. I don't actually mind JS's brackets (as they let you know where things begin and end cleanly) and significant white space in a programming language has always seemed like a bad idea too (it's bad enough that a misplaced semicolon can stop a program from running properly, but try searching for an extra white space character you can't even see!).

Opal on the other hand, is actually Ruby compiled to JavaScript (not Ruby/Python-ish syntax). It looks, feels, and even smells like Ruby because it is. The JavaScript it generates might be a little more verbose than that generated by CoffeeScript, but that's because it has to do more (Ruby and JavaScript are separate languages in the proper sense, not different dialects). It does however compile out its classes using the module pattern which means it is safely scoped (http://toddmotto.com/mastering-the-module-pattern/).

It also has a "Native" bridge to interact with regular JavaScript which helps maintain clean separation (http://opalrb.org/docs/interacting_with_javascript/) as well as RSpec support for testing. It even supports method_missing.

In any case, there are many other interesting things about it, which I won't go into here.

It will be interesting to see where it leads...

PS I see Opal as being more like ASM.js (http://asmjs.org/) than CoffeeScript. It can actually use a quite limited subset of JS in order to be functional.