http://faq.rubygarden.org/entry/show/14?controller_prefix=faq%2F
2.1: Jak Ruby przedstawia się w porównaniu do Pythona?
Obydwa Python i Ruby są obiektowo zorientowanymi językami, które udostępniają gładkie przejście z proceduralnych do OO stylów programowania. Smalltalk, odwrotnie, jest tylko obiektowy - nie możesz nic zrobić dopóki nie zrozumiesz obiektów, dziedziczenia i dużej hierarchi klas Smalltaka. Przez udostępnienie proceduralnych kół treningowych, Python i Ruby “naprawiają” jedną z cech, która mogła być blokadą do powszechnego użycia Smalltaka. Te dwa języki różnią się przez osiąganie tego celu z przeciwnych stron.
Python jest językiem hybrydowym. Posiada funkcje do programowania proceduralnego i obiekty do programowania OO. Python łączy te dwa światy przez umożliwienie funkcjom i metodom przekształcenia się używając jawnego parametru “self” przy każdej definicji metody. Kiedy funkcja jest wstawiona do obiektu, pierwszy argument automagicznie staje się referencją do odbiorcy.
Ruby jest czystym językiem OO, które może udawać proceduralny. Nie posiada funkcji, tylko wywołania metod. W Rubowej metodzie odbiorca, zwany również self, jest ukrytym argumentem jak “this” w C++. is a pure OO language that can masquerade as a procedural one. It has no functions, only method calls. In a Ruby method the receiver, also called self, is a hidden argument like ``this’’ in C++. Instrukcja “def” poza definicją klasy, która jest funkcją w Pythonie, jest właściwie wywołaniem metody w Rubim. Te namiastki funkcji stają się prywatnymi metodami obiektu klasy, wierzchołkiem hierarchi klas Rubiego. Programowanie proceduralne jest schludnie zrobione z innej strony - wszystko jest obiektem. Jeśli użytkownik nie pojmuje jeszcze obiektów, może udawać, że “def” jest definicją funkcji i mimo wszystko wykonać wymagane zadanie.
Czystość OO w Rubim dostarcza wiele użyteczności, których brak w Pythonie lub są dopiero opracowywane: ujednolicona hierarchia typów/klas, metaklasy, możliwość tworzenia podklas ze wszystkiego, ujednolicone wywołanie metod (brak śmieci w stylu len() jest funkcją ale items() są metodą). Ruby, jak Smalltalk, wspiera tylko pojedyncze dziedziczenie, ale ma bardzo potężny koncept miksowania: definicja klasy może zawierać moduł, który włącza z tego modułu do klasy metody, stałe, itp.
Ruby, znowu jak Smalltalk, udostępnia domknięcia i bloki kodu i używa ich w celu osiągnięcia tego samego dobrego efektu. klasy kolecje i iteratory w Rubim są wybitne, dużo bardziej potężne i eleganckie niż prowizoryczne rozwiązania które Python promuje (lambdy i złożenia list).
Składnia Rubiego i filozofia konstrukcji są pod dużym wpływem Perla. Posiada dużo różnorodności składniowej. Instrukcje kontrolne (if, unless, while, until, itp.) mogą pojawić się na końcu instrukcji. Niektóre słowa kluczowe są opcjonalne (na przykład “then” w instrukcji “if”). Nawiasy mogą być czasami pominięte w wywołaniach metod. Wiele, wiele rzeczy jest bezpośrednio przeniesionych z Perla. Wbudowane wyrażenia regularne, $_ i podobne, <do_przetlumaczenia>here_documents</do_przetlumaczenia>, różnica między napisami w apostrofach/cudzysłowach, przedrostki $ i @ dla odróżnienia różnych rodzai nazw i tak dalej.
Jeśli lubisz Perla, polubisz Rubiego i będziesz czuł się jak w domu z jego składnią. Jeśli lubisz Smalltalka, polubisz Rubiego i będziesz czuł się jak w domu z jego semantyką. Jeśli lubisz Pythona, możesz lub nie być odrzucony z powodu dużej różnicy wynikającej z filozofii konstrukcji Pythona i Rubiego/Perla.
Ruby jest dużo bardziej złożony niż Python, ale jego cechy, w większej części, dobrze ze sobą współpracują. Ruby jest dobrze zaprojektowany i pełen przyjemnych idei, które mogą mogą być <do_przetlumaczenia>mined for P3K</do_przetlumaczenia>. Nie jestem pewien jednak jak wielu programistów Pythona będzie zainteresowanych nim - u mnie nie wygrał (jeszcze). Ale jest wart przestudiowania i może być poważnym zagrożeniem dla Perla.