Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^2: Perl Vs Ruby

by LanX (Canon)
on Nov 26, 2008 at 17:28 UTC ( #726161=note: print w/ replies, xml ) Need Help??


in reply to Re: Perl Vs Ruby
in thread Perl Vs Ruby

> no difference in speed( Perl is a little faster),

Interesting! The last benchmark I saw showed a factor 3 difference. Do you please have a source or link for me with newer results? 8 )

Cheers Rolf

UPDATE: added smiley


Comment on Re^2: Perl Vs Ruby
Re^3: Perl Vs Ruby
by Joost (Canon) on Nov 26, 2008 at 20:13 UTC
    A factor 3 isn't really that much of a difference, considering that with both languages you can/must switch to C/C++ for CPU-heavy work, which will fairly easily give you a factor 20 .. 100 speed increase, depending on the problem.

    update: I might as well throw my opinion on Perl vs Ruby in here.

    Ruby is slower than Perl, but neither should be used if pure raw speed is your ultimate goal.

    Ruby has some nice idioms in the core library that are open for anyone to use and extend. Ruby's iterator/collection idioms are particularly nice compared to perl's mess of for(each) / while ... keys ... / whatever interface some CPAN module implements.

    Perl has a larger range of modules in CPAN. Ruby modules are not organized in one place, so that means it's harder to find good quality extensions that do what you need.

    Ruby's built-in OO interface is a LOT better than Perl's (which probably also explains why perl's standard collections suck so much).

    Ruby has reasonably nice syntactic sugar for functional constructs. Perl has less of that, but it does offer a more consistent way of creating and passing functions.

    Neither language has serious threading support - though Perl's ithreads are fairly easy to integrate with C/C++ pthreaded code.

    Personally, if I wanted to create something large using a lot of OO that's not all that CPU critical, I'd probably go for Ruby over Perl, because Ruby looks better (especially OO code). If it also needs to be FAST, I don't know what I'd use - Common Lisp maybe, or Java, or C++, or possibly Clojure.

      Actually I don't trust benchmarks I haven't manipulated by myself! 8 )
      ... but I'm a little disappointed you can't point me to a good argument to use ruby.

      You think that factor 3 doesn't count, but a webadmin might reject to realise his template engine in C.

      Cheers Rolf

      I'm no Ruby expert, could you please explain or at least "link" to what you mean with : )

      > Perl has less of that, but it does offer a more consistent way of creating and passing functions.

        Perl has a single operator to create functions: sub, which is used to create named functions and (anonymous) function refs. It also has some syntactic sugar in that you can create a prototype that takes as it's first argument a function ref, by calling
        some_function_with_ref_prototype { |params| do_something_with params } + "bla", $foo.
        Note that the sugar looks great when you want to re-implement something matching grep or map as defined in the perl core but not for more interesting stuff like if or when constructs. It also immediately breaks down if you want to use OO, since prototypes aren't supported on methods.

        In ruby every function is a method, and functions can create some special sugar that allows you to use a code block as the last element. Once you've seen it it's apparent that this variant is much more useful, especially since the ruby core uses the same construct for a lot of stuff that's "special" in perl, like iterators:

        some_array.each { |element| # do something with element }
        For more examples, see the Enumerable module, which is used by pretty much every collection-type object in Ruby - meaning you can use each/map/grep/etc on every object that implements only a few primitive methods and includes that module (or doesn't include the module but implements the map/grep/etc methods itself).

        The "problem" is, that ruby makes it slightly harder to pass named functions as blocks/procs, because blocks there have special scoping/lookup rules (since they're not methods).

        See Proc vs Method for example (I don't think blocks are first-class objects).

Re^3: Perl Vs Ruby
by ptoulis (Scribe) on Nov 27, 2008 at 00:02 UTC
    The last benchmark I saw showed a factor 3 difference

    Do you really consider a 6,000-times-repeated call of one function, on a 500MHz machine, to be a language benchmark? Please, don't.
      > Do you really consider ...

      Nope, but I asked you for a better benchmark...

        Language benchmarks are in general irrelevant and stupid. If you insist try this link for some more.
        Ruby has a dynamic type system, you can add methods to an object on the fly.This makes it slow, but this is also why it has Rails.
        What's the point of the benchmark again?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://726161]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (3)
As of 2014-08-31 01:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls