Dlaczego Ruby?
niedziela, 14 sierpień 2005, w kategoriach: Programowanie, Ruby
Jak napisałem w “powitalnym” wpisie, uwielbiam programować w Rubym. Dlaczego? Co czyni ten praktycznie nieznany w Polsce język programowania unikalnym? Oto moje ulubione cechy:
1. Prawdziwa obiektowość. W Rubym nie ma typów prymitywnych, wszystko jest obiektem. Można więc napisać: (0.8).round albo: “cos”.upcase. Nawet nil (”nic”) jest instancją klasy. Jednocześnie nie oznacza to, jak w Javie, konieczności zadeklarowania przynajmniej jednej klasy. Jeśli więc chcemy, możemy programować w stylu proceduralnym, tyle, że w gruncie rzeczy, “za kurtyną” i tak kod ten staję się wnętrzem klasy.
2. Możliwość rozszerzania języka. Do każdej klasy, zarówno napisanej przez nas jak i tej będącej częścią biblioteki standardowej możemy dodać metody, składowe, lub nadpisać te już istniejące. Stwarza to możliwość programowania “bottom-up”, czyli dostosowania języka do wykonywanego zadania.
3. Narzędzia. Dodatkowe narzędzia Ruby’ego są niesamowite. Mamy więc Rake’a, czyli program do budowy skryptów ala Makefile, tyle że w czystym rubym, mamy ruby-gems, pozwalające na instalację za pomocą jednego polecenia dowolnej potrzebnej biblioteki czy pakietu dla Ruby’ego, mamy też “w standardzie” rozbudowany framework do pisania testów modułowych. Dostajemy też interaktywny interpreter i przeglądarka dokumentacji “ri”, przypominająca np. perldoc.
4. XML. Parser REXML, dołączony do Ruby’ego, jest zdecydowanie najlepszym narzędziem do tego celu, jakie widzałem. Oto np. fragment kodu parsującego feed RSS:
document = REXML::Document.new(somexml)
newses = Array.new
XPath.each(document, "/rss/channel/item") do |element|
news = News.new
news.title = element.text("title")
news.description = element.text("description")
newses.push(news)
end
Prostsze to już nie mogło być.
5. Rails. Ten framework MVC dla Ruby’ego robi teraz na Zachodzie ogromną karierę, a jego autor dostał nawet tegoroczną nagrodę “Open Source Best Hacker”, od wydawnictwa O’Reilly. Kto wie, może wyprze on PHP? Najlepszym dowodem na to, jak dobra jest to aplikacja, niech będzie ilość klonów jaka powstała - wersję dla Pythona, Javy itp. itd. Marnych pomysłów nikt nie kopiuje. Warto też zobaczyć krótki film, obrazujący jak szybko tworzy się aplikacje w Railsie.
6. Klauzury/bloki. Konstrukcje te pozwalają na przekazanie metodzie bloku kodu, który zostanie wywołany w kontekście tej metody. Wygląda to tak:
def metoda(&block)
zmienna_lokalna = 5
yield zmienna_lokalna
end
metoda { |x| puts x }
Technika ta, początkowo trudna do zrozumienia, ale później całkowicie intuicyjna, stanowi w języku Ruby podstawę do robienie wielu najróżniejszych rzeczy, przede wszystkim zaś służy do iterowania po strukturach danych np. tak: [1, 2, 3].each { |liczba| puts liczba }
7. Zwięzłość. Programy w Rubym pisane przez wprawionego programistę mogą bardzo krótkie, nie tracąc nic z czytelności. Mogą też być jeszcze krótsze, tracąc czytelność zupełnie, przypominając obfuskowany Perl - tak elastyczny jest to język.
8. “Duck typing”. Jeśli coś chodzi jak kaczka, traktuj to jak kaczkę. Jakkolwiek zabawnie to brzmi, to jest to bardzo, bardzo przydatna technika. Dzięki niej ta sama metoda może być użyta do pisania zarówno do Stringa, jak i do pliku, gniazda sieciowego czy czegokolwiek innego, aby tylko klasy odpowiadające tym “wyjściom” implementowały potrzebne metody (a możemy je przecież dopisać, lub “przystosować” te istniejące). To coś w rodzaju rzutowania w górę hierarchi dziedziczenia w C++ czy Javie, tylko że można to zastosować do wszystkiego, dzięki elastyczności i dynamicę języka. Dzięki temu tworzenie kodu w myśl zasady DRY (”Don’t Repeat Yourself” - nie powtarzaj się) nabiera nowego wymiaru.
9. Mnogość dowiązań i bibliotek. Ruby jest jedynym językiem jaki znam łączącym ogromną siłę wyrazu z dużą, przyjazną i aktywną społecznością oraz z bogactwem gotowych rozwiązań do używania rozmaitych toolkitów GUI, baz danych, protokołów… To jest coś, czego brakuje językom jak Lisp, Smalltalk czy Forth, które mogłyby konkurować pod względem możliwości językowych z Rubym.
10. Radość. Ruby to język, który dba o programistę, nie tylko o użytkownika. Dzięki temu programowanie znów jest przyjemne.
Dodaj do del.icio.us | Dodaj do wykop.pl
Komentarze (RSS):
martinez, 14 sierpień 2005, 3:08 pm
No cóż, ale za to jest Integer. Mi się podoba.
axquan, 14 sierpień 2005, 10:08 pm
Fajne, fajne, ale jedna rzecz na raz. Najpierw spróbuję Lispa, a potem zobaczę co z Ruby.
A właśnie, wspomniałeś o społeczności. Znajdzie się jakiś Polak (oprócz Ciebie ;)) zaangażowany w Ruby’ego?
sztywny, 14 sierpień 2005, 11:08 pm
O żadnym innym intensywnie Rubującym Polaku niestety nie słyszałem, a szkoda, byłoby z kim pogadać :>
martinez, 16 sierpień 2005, 6:08 pm
Ja znam, ale tak się składa, że jest to autor tej strony.
lopex, 16 sierpień 2005, 10:08 pm
no ja się czuję Polakiem rubującym :D
martinez, 17 sierpień 2005, 12:08 am
intensywnie?
lopex, 17 sierpień 2005, 2:08 am
To mój ulubiony język skryptowy, także jeśli coś się prosi o oskryptowanie to najpierw na myśl przychodzi mi Ruby. Często też jest mix z C++ przy pomocy swiga, jeśli wymagana jest wydajność lub brak jest portów.
s, 24 sierpień 2005, 8:08 pm
> 5. Rails. Ten framework MVC ………..
> ………………………………………………
> wersję dla Pythona, Javy itp ………….
Obiło mi się o uszy że jest coś takiego jak ,,Lisp on Lines”,
tzn. framework lispowy inspirowany przez RoR.
Dodam że w następnych wersjach Rubego będzie
(przed,przed ;) ostatnia rzecz bez której lispniki nie
wyobrażają sobie porogramowania (trochę przesadzam
dla efektu ;) tzn. ,,multiple values” — widziałem w TODO.
Fajnie gdyby dodali multimetody i makra. Makra niestety
nie będą (jeśli oczywiście wogóle będą) tak fajne jak w
LISPie — kwestia składni.
sztywny, 24 sierpień 2005, 8:08 pm
Na makra raczej nie ma co liczyć, Matz jest przeciwny ich wprowadzeniu, widziałem kiedyś wypowiedź na comp.lang.ruby zdaję się.
Jacek Balcerski, 30 sierpień 2005, 1:08 am
Ja piszę w Rubym zawodowo od powiedzmy roku :) Wiec sam nie jesteś. Pozdrawiam
sztywny, 30 sierpień 2005, 11:08 am
Zawodowo? W Rubym? W Polsce? Prosimy o szczegóły, bo ciekawe rzeczy Pan nam tu opowiada :>
lopex, 31 sierpień 2005, 4:08 pm
ja też zawodowo :D - głównie generatory źródeł javy i deployment deskryptorów, troche ole, oraz generacje struktur baz. W firmie w której pracuję język jest już dość spopularyzowany (była nawet propozycja szkoleń z Rubiego)
sztywny, 31 sierpień 2005, 5:08 pm
Fajnie, może Ruby i dla mnie nie bedzie zawsze tylko dość egzotycznym hobby :>
Piotr Usewicz, 19 wrzesień 2005, 11:09 pm
No ja ostatnio tak wlasnie siedze w Rubym. Zaczalem wlasny port RoR do PHP5. Nie jest to oczywiscie to co w Rubym (bo chodzi o sam jezyk) ale ogolnie poprzez RoR zmienilem zupelnie swoj punkt widzenia na sposob tworzenia aplikacji webowych. Cudo ;] Wlasnie namawiam polskiego hosta (dosc popularnego) by zainstalowal Ruby i RoR w pakiecie ;]
sztywny, 20 wrzesień 2005, 12:09 am
Którego hosta którego? Chętnie wystrugał bym sobie bloga w Rubym zamiast korzystać z Wordpressa, gdyby właśnie w Polsce ktoś hostował Ruby’ego. A tak za samą domenę to nie ma wielkiego sensu płacić chyba.
ok, 8 październik 2005, 1:10 pm
ok ale jak zacząć bo nic nie ma po polsku…
moze i dobrze… ale mały początek by pomógł…
coś w stylu “dudzio PHP kurs”
krótko, prosto, interesująco…
Szymon Drejewicz, 14 listopad 2005, 6:11 pm
Ja też przez około 2 lata pisałem zawodowo w Ruby’m. Obecnie język ten nie jest mi niezbędny, ale nadal używam go do przetwarzania danych. Jest to chyba najbardziej intuicyjny i zgrabny język na Świecie, no może poza językiem angielskim :-)
Paul Goscicki, 9 styczeń 2006, 6:01 pm
Ja też w Ruby’m ostatnio trochę piszę. Aczkolwiek narazie niestety nie mam z tego tytułu wymiernych korzyści (liczonych w $). Liczę jednak, że to się zmieni w najbliższej przyszłości. Mam w planach taki jeden serwis do napisania w RoR… ;)
Sztywny Blog, 4 luty 2006, 12:02 am
[...] ego właśnie Railsa zrealizowano w tym, a nie innym języku. [ Patrz też wpis „Dlaczego Ruby?” ] Programy w Rubym, podobnie jak w większości języków skryp [...]
l, 8 marzec 2006, 3:03 am
heh, wiadomo ze jezyki programowania ewoluuja w strone Lispa - Ruby
jest kolejnym krokiem, tylko oczywiscie brakuje kilku rzeczy,
np prawdziwych makr :)
co do punktu 6, to nawet Java ma cos takiego obsluzonego
za pomoca anonimowych klas wewnetrznych
na miejscu autora bym sie tak nie podniecal :>
sztywny, 8 marzec 2006, 7:03 am
Jakiś przykład? Bo nie bardzo widzę co anonimowe klasy wewnętrzne mają wspólnego z klauzurami…