From: Bob Calco Date: 2002-08-07T12:56:29+09:00 Subject: RE: Compiling Ruby to Native Code? %% > Game over, if Java or Ruby provides native compilation; it won't make %% > sense to code with anything else. %% %% I humbly disagree. While Java and Ruby are very good general-purpose %% languages, I think that there's still a place for more specialized %% languages to solve particular problems, even if it's just for %% prototyping. I've found that languages like OCaml and Haskell are %% excellent for prototyping problems involving complex data structures, %% and give you new and better insights into how the problems might be %% solved. Result: you have cleaner, more elegant code that's easier to %% understand and maintain, once you go from your prototype to the actual %% design in the target language. If for nothing else but increasing %% mental flexibility, other languages are useful. %% %% -- %% Rafael R. Sevilla +63(2)8123151 %% Software Developer, Imperium Technology Inc. +63(917)4458925 %% I agree with Rafael. Java and Ruby are primarily OO languages, paradigmatically speaking. While OO has clear and obvious benefits over other paradigms for particular sets of problems, it is often the hammer that makes every problem a nail in computer science these days. As OO languages go, I think Ruby's dynamic ObjectSpace adds an interesting set of capabilities to the programmers abstraction-construction toolchest (so to speak), particularly in terms of metaprogramming. I definitely like it more than Java, for that reason. However, I am a supporter of exploring other paradigms. Ocaml and Haskell, mentioned above, are indeed interesting and quite powerful in their domains. Another, somewhat more obscure, language that I have a certain affection for is Mozart-Oz, which supports not one, not two, but no less than FIVE computational paradigms, all in the same very efficient kernel language. Like Java, Oz compiles to cross-platform bytecode. But unlike Java, it's network concurrency is entirely transparent to the programmer, and Oz "fuctors" (or components) are free to use any paradigm internally that gets the job done. Is your problem a constraints problem? Use the declarative aspects of the kernel language, a la prolog. Is the problem more simply modelled after human real-world abstractions? Then use OO, complete with all the trappings thereof (inheritance, encapsulation, polymorphism, etc.). Is your problem computationally expensive? Then use the functional subset of the kernel language, a la Haskell. Its really an amazing feat in computer science to have combined the paradigms as cleanly as completely as they (the Mozart consortium folks) have. If it interests you at all, check them out at www.mozart-oz.org. Now for day-to-day practical problems I find that Ruby more than suffices for just about everything, and I'm in love with its extensibility. I'm working on some exciting packages for the Ruby community, and I want to see this community -- and the language -- grow. In fact, I'd say I'm personally committed to that goal. But there is something to be said for the multiparadigm approach, whether you achieve that by blending components written in different languages (and .NET doesn't really count here, since all .NET langauges share the same fundamental OO semantics, via the CLR), or you use one language that supports all of them. For some problem domains, strictly OO methodology is not the optimal approach. So - that's all I have to say about that. Back to Ruby coding... :) Sincerely, Bob Calco