My understanding is that Jruby is slower than regular ruby. I take
this to mean the Ruby part is. (am I wrong in this assumption?)
Here is my question: Currently 95% of the execution time of my
program is slow due to loading large quantities stock data, and then
processing it (moving averages, etc). The actual part I want to be
in ruby is fairly quick.
So as I understand it your problem is IO bound.
I expect to spend 20% of my PROGRAMMING time (in the future) working
with the "back end" (loading data and processing) and 80% figuring out
how to deal with the results. (hopefully ruby or another very high
level language) The math (arrays) and the io is the slow part.
Would I get the advantage of the speed of Java I did the slow code in
Java or is it better to do it in C? It looks like sharing data
between Java and Jruby is trivial compared to C. Is this fast or
does it take a while to translate?
If most of the overhead is IO then I don't think it makes much
difference, Ruby and Java should be similar, the actual IO is all
being done by C code and the OS anyway.
I know the easy aswer is "do it in C" but I think it would be easier
to code in Java,
I have not actually tried this because I don't know Java, but it seems
like if I put a week into it it should not be too tough for what I
want to do. (load data, basic math, etc)
Basically I want help figuring out if I should spend weeks in C doing
the back end or if I would be satisfied with the (benchmark) results
of Java using Jruby and spend the time to learn Java. (which should be
simpler because it is much higher level)
Thanks in advance. I hope I was asking the right questions.
Tom
It sounds like you are at the point where you are learning Ruby, and
thinking ahead of time that you will also need to be learning either
Java or C. If this is the case, I'd recommend that defer the second
question, and focus on learning Ruby well first.
My advice is write it in Ruby, benchmark it, THEN if it's needed work
on optimization. If you start out with pure ruby code you can also
benchmark it using the standard ruby implementation (a.k.a. MRI),
JRuby, maybe Rubinius, or IronRuby as your platform and the maturity
of the alternative implementations allow.
The optimization would go along the lines of:
1) See if refactoring the ruby code can help.
2) When 1 has been exhausted then look at non-ruby extensions,
you've got several options
here.
a) On MRI you can use ruby-inline to easily incorporate
reasonable amounts of C code, or
you can write C extensions.
b) On Jruby you can extend with Java
As far as extending with Java vs. C. If the bottleneck really is IO, I
wouldn't expect a Java extension would really provide much leverage
over ruby code, since for IO ruby and java should be roughly equal.
If you're having to optimize at the basic IO level, the code is all
going to look pretty C like whatever language you use.
But that's just my 2 cents.
···
On 9/17/07, progcat@comcast.net <progcat@comcast.net> wrote:
--
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/