Witam. Ostatnio bardzo zainteresowałem się aplikacjami pisanymi w Ruby lub w Pythonie, jednak nie mogę znaleźć nigdzie jakiegoś fajnego porównania tych 2 języków np: jakie plusy ma jeden nad drugim oraz wady. Na pewno na korzyść Ruby oraz ROR jest to, iż np na helion.pl jest więcej książek, z których można skorzystać. Ale oba te języki są językami skryptowymi…więc to je tak naprawdę różni?Możecie się bardziej wypowiedzieć na ten temat?
Ruby ma rewelacyjne metaprogramowanie i fajną składnię do pr. funkcyjnego (oraz ogólnie sporo inspiracji z lispa), plus zorientowanie na przyjemność programisty.
Python ma trochę mniej ficzerów, znaczące białe znaki (im dłużej używam Hamla, tym bardziej się przekonuję), dużą stabilność i ogólnie duży, dojrzały ekosystem (biblioteki, wsparcie, implementacje itd.).
Jak się nie możesz zdecydować, to nie szukaj podpowiedzi u forumowych mądral tylko po prostu pobaw się oboma językami i zobacz praca z którym Ci bardziej “leży”.
Ewentualnie sprawdź wiodące frameworki webowe w obu językach (Django i Pylons vs. Rails i Merb) i zobacz w którym z nich przyjemniej Ci się pisze.
A jak jest z prędkością?Oglądałem benchmarki ruby vs python i zdecydowanie ruby przegrywał. Tyle, że są to informacje z 2005-2007. A jak jest teraz?
Teraz jest już dużo lepiej. Zobacz sobie: http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=all&box=1
Ruby1.9, które jeszcze nie jest używane na dużą skalę (ten proces następuje wolno, podobnie jak z python3k), ale jest już praktycznie taki sam szybki jak python2.6 (tutaj tylko zwrócę uwagę, żeby nie traktować benchmarków dosłownie, bo np. jeden z programów w pythonie używa natywnej biblioteki, która nie jest w stdlib i program jest kilka razy szybszy od rubiego…) i sporo szybszy od pythona3k!(niektórzy mówią, że python3k nie był jeszcze optymalizowany, ale mimo wszystko to dziwne, że jest taka różnica między 2.6 i 3k, przecież nie wymienili nagle całego interpretera…). Nawet ruby1.8 nie jest aż tak wolny za jakiego się go uważa.
Inaczej mówiąc: powolność rubiego można uznać już za mit.
Można, o ile nie trafimy na pythonowego fanatyka. Kiedyś spotkałem się z opinią, że gdyby Ruby nie był wolny, to NASA też używałaby go do swoich zastosowań (sic!).
nairda, Ci fanatycy milkną jak im się pokaże benchmarki ruby1.9 vs python3k. Oczywiście tu się pojawia tłumaczenie, że python3k nie był optymalizowany itp itd… Tylko pytanie po co wydawali stabilną wersję py3k skoro w ogóle nie skupili się na wydajności? Za bardzo nie chce mi się wierzyć, żeby pozwolili sobie na tak wielki spadek wydajności.
A kiego obchodzi mnie NASA? Oni tam mają bardzo specyficzną (wymuszoną warunkami) metodykę tworzenia software’u i wszystkie języki “poniżej” Ady są dla nich zbyt miękkie i mało restrykcyjne. Zupełnie inny świat niż pisanych “codziennie” aplikacji, a już zwłaszcza webowych.
I jak Radarek napisał, Ruby od 1.9 wreszcie ma VM, dzięki czemu nie odstaje od pythona w benchmarkach.
Ruby ‘kupił’ mnie niemal natychmiast. Wcześniej dwa razy podchodziłem do Pythona i w obu wypadkach się zniechęcałem.
Główną zaletą Pythona jest dla mnie ‘significant whitespace’ - kod jest czysty wizualnie a ma to dla mnie duże znaczenie. Największe wady, z którymi nie mogłem się pogodzić to:
- there is one way to do it - jest zawsze tylko jeden konkretny sposób na osiągnięcie celu (w Ruby sporo metod ma przyjemne dla oka/zastosowania aliasy)
- explicit self - no po cholerę ja mam to self ciągle pisać? Jak ja mogę się domyślić o co chodzi to parser też powinien
- brak pełnej obiektowości - przy pracy na obiektach używasz normalnej składni obiekt.metoda. Jednak istniało sporo metod, które działały na typach wbudowanych (stringi) gdzie trzeba użyć metoda_globalna(obiekt)
- CHOLERNIE skomplikowane pomysły przy importach modułów - specjalne zasady dla plików i katalogów
- bardzo dużo specjalnych metod, dało by się to obejść konwencją
Z kolei w Ruby zwłaszcza w połączeniu z Rails pobił dla mnie Pythona na głowę:
- bardzo spójny kod
- przyjemne dla oka API. Działa na zasadzie: co chcę osiągnąć? -> jak to jest po angielsku? -> o! już jest taka metoda!
- pełna obiektowość, również dla typów prostych
- powszechna w bibliotekach ‘convention over configuration’
- implicit vs. explicit
Najważniejsza jest dla mnie prostota Ruby oraz wysoka jakość bibliotek i błyskotliwość ich programistów. Większość z nowo powstających frameworków jest kierowana do inteligentnego programisty. Nie ma w Ruby sytuacji jak w Javie, gdzie kod trzeba pisać tak jakby miała go później rozwijać średnio inteligentna małpa.
A jak wygląda sytuacja z tworzeniem aplikacji GUI?Próbowałem wcześniej uczyć się C,C++, Pascal, ale niestety szukam uniwersalnego języku do tworzenia różnorodnych aplikacji jak np proste skrypty, większe programy konsolowe, GUI, web, sieci. Czy Ruby dobrze sobie radzi z takimi pozycjami?Czy może lepiej wykorzystać Ruby tylko i wyłącznie do ROR’a, jako tworzenie serwisów www?
Ruby jest świetny do:
- aplikacji www (rails, merb, nitro, sinatra itd.)
- samodzielnych skryptów do automatyzacji pewnych zadań, “klejenia” kilku różnych aplikacji itd.
- (a właściwie 2b) skryptów oddziałujących z siecią, które mają parsować (xml/html/json itd.) i/lub udostępniać dalej jakieś przetworzone dane
Do klasycznych aplikacji “okienkowych” nadaje się niezbyt, bo – podobnie jak Python – wymaga zainstalowania całego interpretera z biblioteką standardową (w obu językach kilkadziesiąt MB) do odpalenia najprostszej aplikacji.
Chociaż… sprawdź Adobe Air
Tomash, ale Adobre Air też wymaga instalowania jakiegoś środowiska, prawda? Z GUI to zależy od wymagań. Jeśli chodzi o jakieś programy dla siebie - nie ma problemu. Poza tym tak na prawdę problem jest z windowsem. Bo nikt z używających linuksa nie powinien się krzywić jak musi doinstalować kilka paczek żeby odpalić jakiś program. Aplikacje rubiego możesz spakować do pojedynczego .exeka, który będzie zawierać cały interpreter rubiego - jest to dosyć spory narzut, ale zawsze to lepsze niż nic.
Och, bynajmniej. Ruby jest językiem ogólnego zastosowania, choć nie do wszystkiego nadaje się tak samo dobrze. GUI z pewnością jest domeną języków statycznych, które mają lepsze wsparcie IDE (klik, klik i masz GUI). Aczkolwiek np. GUI możesz sobie też wyklikać np w glade (gtk) i w rubym już dopisać resztę kodu.
Air to o wiele mniejszy narzut, poza tym już jest (pomimo wyjątkowo młodego wieku) popularniejszy na desktopach z windowsem niż ruby. Podobnie java – ma ją bardzo duży procent desktopów.
Więc jeśli chcesz rozprowadzać swoją aplikację i nie odpychać userów 50-megabajtowym plikiem instalacyjnym, musisz iść w coś kompilowanego korzystającego z bibliotek systemowych, najlepiej pozwalających pisać aplikacje dla wszystkich systemów na raz (C, C++, D). Poleciłbym C++ z Qt, gdybym nie nienawidził C++ tak mocno Więc polecić pozostaje Javę. Java jest przy okazji o tyle sympatyczna, że… możesz do swojej aplikacji dorzucić .jar z JRubym albo Groovym, coby móc pisać aplikacje okienkowe w jakimś nowoczesnym języku,
Może to będzie trochę dziwna prośba, ale czy da radę napisać taki czytnik konsolowy w Ruby?
Tutaj kod Pythona:
[code]#! /usr/bin/env python
import feedparser
import time
import os, sys
nieskonczona petla
while 1:
# pobierz RSS
feed = feedparser.parse(“http://jogger.pl/rss/”)
# wyczysc ekran
sys.stdout.write(os.popen(‘clear’).read())
# dla kazdego wpisu
for note in feed[‘entries’]:
# wypisz tytul
print “- %s” % note[‘title’]
print “\nhttp://jogger.pl/”
# odczekaj 60 sekund
time.sleep(60)[/code]
Czy mogłby ktoś przepisać to na Ruby?
Dlaczego miałoby się nie dać? Na przykład tak:
[code=“ruby”]#! /usr/bin/env ruby
require ‘rss’
while true do
feed = RSS::Parser.parse(“http://jogger.pl/rss”)
print clear
feed.items.each{|note| puts “- #{note.title}” }
puts “\nhttp://jogger.pl/”
sleep 60
end[/code]
No właśnie o taki przykład mi chodziło:)