Amol Vaidya <[EMAIL PROTECTED]> wrote: > Hi. I am interested in learning a new programming language, and have been > debating whether to learn Ruby or Python. How do these compare and contrast > with one another, and what advantages does one language provide over the > other? I would like to consider as many opinions as I can on this matter > before I start studying either language in depth. Any help/comments are > greatly appreciated. Thanks in advance for your help.
Within the panorama of existing languages, Python and Ruby are just about as similar as two languages independently developed are likely to get (and then some -- there is clearly some minor mutual influence, e.g. Ruby probably picked 'def' for function definition partly-because that's what Python uses, and later Python may have picked 'yield' for generators partly-because that's what Ruby uses to have a method interact with a block it gets passed). They address the same niches and share most of the same strengths (and minor weaknesses). Pragmatically, Python is more mature -- with all sort of consequences, e.g., Python will be faster for many tasks (more time has been spent on optimizing it), more third-party libraries and tools are available, etc, but the Python community may be less easy to "get into" than the newer, smaller Ruby one, for example. Here's a tiny script showing some similarities and differences: def f() i = 0 while i < 1000000 j = 923567 + i i += 1 end end f() comment out the 'end' statements, and at colons at the end of the def and while statements, and this is also valid Python. On my iBook...: Helen:~ alex$ time ruby -w tim.rb real 0m5.367s user 0m5.129s sys 0m0.041s while: Helen:~ alex$ time python tim.py real 0m1.078s user 0m0.953s sys 0m0.063s Note that this is NOT the normal way to loop in either language, so do NOT read too much into the reported times -- a 5:1 ratio is NOT normally observed on real tasks, though it IS reasonably normal for Python to be somewhat faster. BTW, this is Python 2.4.1 and Ruby 1.8.2. I'm pretty sure that the Ruby community at some point will go through much the same exercise the Python one did in the several years spent on the transitions 2.2 -> 2.3 -> 2.4 -- reduce the amount of change in the language and library and focus most development effort on optimization instead. I know of no intrinsic reason why Ruby and Python should not deliver just about equal performance for similar tasks, though the current implementations may not be equivalent (yet) from this POV. Python in recent years moved to enhance its object model (making it in some ways closer to Ruby) and iteration abilities (ditto), while Ruby moved to shed more and more of its Perl legacy (though in both cases legacy issues may have slowed down progress a little bit, yet for both languages the direction is clear). This makes the two languages more similar and to some extent interchangeable. Ruby has acquired a framework ("Ruby on Rails") that makes it very desirable to implement database-backed web sites; while Python's running hot after it (e.g. with Django), for this specific task Rails is better today (e.g., you can get good _books_ about Rails, but not yet about Django). "Ruby Gems" is a good package management system that is fully operational today; again, Python's catching up, but it's not there yet. For other things, Python's existing base of third-party extensions and tools is above Ruby's. For example, Numeric (and numarray and scipy, etc) make Python excellent for heavy-duty number crunching, and I do not know of Ruby equivalents in this area; Twisted is a great framework for asynchronous network programming, and, again, it's a Python advantage; and so on, and so forth. However, there is a downside: for some tasks (e.g., web-site frameworks) Python has _too many_ good 3rd party extensions available, making it hard to choose among them! We can proceed to compare the languages themselves. Many differences are minor and cosmetic. Typically, Python is more specific, giving you fewer cosmetic choices: e.g., you must use parentheses in defining and calling functions, while, in Ruby, parentheses are optional (though often recommended) for these same tasks. Ruby's approach of having everything be an object on the same plane, infinitely modifiable until and unless explicitly frozen, is more regular, while Python's approach of giving slightly special status to built-in types and making them not modifiable dynamically is slightly less regular but may be more pragmatic. OTOH, Python's approach to "callable objects" (essentially making them all fully interchangeable) is the more regular of the two. Ruby's approach to iteration (passing the code block into a method) is essentially equivalent to Python's (iterators and generators), with several minor advantages and disadvantages on either side. One could go on for quite a long time, but to some extent these are all minor quibbles, nothing really earth-shaking in the mix. Writing Ruby extensions in C is slightly easier (thanks to mark-and-sweep garbage collecton, mostly), but Python offers many alternatives (e.g., pyrex)... Personally, I'm happy to stick with Python, but I keep studying Ruby when new books &c about it come out (I'm biased, having written Python books, but the Ruby books from the "pragmatic programmers" are also quite good ones, no two ways about it). I think that if you try both and consider accurately all the uses you may want to put them to, you'll most probably be happy with either... or both! Alex -- http://mail.python.org/mailman/listinfo/python-list