Beyond Ruby: Mirah, Reia, Rite
igvita.com
igvita.com
For the curious, I mixed JRuby + Duby to create (realtime) audio processing (VST) plugins.
https://github.com/thbar/opaz-plugdk/blob/master/plugins/Dub...
https://github.com/thbar/opaz-plugdk/blob/master/plugins/Dub...
In this example JRuby provides the "declarativeness" and ease of use of Ruby, while Duby makes the "heavy computation".
Duby in this case is just as fast as Java used on floats (it's actually translated into Java).
Of course, to get to write VST plugins with this, you already have a C++ <=> Java wrapper (jVSTWrapper), then a Java <=> JRuby wrapper I wrote.
https://github.com/thbar/opaz-plugdk/blob/master/src/JRubyVS...
Ruby for me was a web language that I took to scripting and then tried some server side work in, but I'm starting to see its limitations and overheads.
Rite while being an embeddable language and having a specific use case will most likely be this light weight barebones ruby that can be run in place of our existing web software, scaling up nicely. However thats just speculation.
This would excite me more if Ruby's syntax were better. I want metaprogramming on top of everything and its brother, not Ruby syntax. Even though I love Ruby.
It's my impression that the Ruby syntax was chosen simply because it was the closest thing at hand.
You could use Mirah with Clojure or Scala to get access to the necessary libs, but then you lose the lightweight advantage and could fragment the community.
My definition would have to include "supports pure functions idiomatically", which means it must be practical to write the bulk of your programs without side-effects. This is really only possible if you have persistent data structures that can efficiently share structure internally; otherwise avoiding side-effects involves lots of wasteful copying. (See http://technomancy.us/132 for an explanation of persistent data structures.)
Of course, if you asked a Haskell programmer, they would be mortified that you would leave monadic computation out of your definition, so no single definition is going to please everyone.
Depending on what you mean by metaprogramming, my goals for Magpie may fit what you're looking for. Its syntax is a bit like Ruby, and it features the dynamicism and open classes you get from Ruby. But, beyond that, I'm planning to add full Lisp-style quasi-quoting metaprogramming, as well as an in-language-extensible parser.
For some reason, this really came off as fan talk, and it really annoyed me.