Dlaczego napisano Railsy w Ruby? [Zamknięte]

9

Znam PHP i Ruby.

Używając klona PHP Rails (nie z wyboru), zwanego Symfony, (który jest najwyraźniej najlepszym frameworkiem PHP), zauważam, że jest to klon Railsów. Myślę, że Symfony jest głupi i że (SensioLabs to sprytna sprawa), ponieważ Rails już istnieje.

Poza projektami typu open source, które zarabiają pieniądze, nie rozumiem, dlaczego ludzie robią klony Railsów w PHP, kiedy Rails już istnieje. Dlaczego nie skorzystać z Railsów? Na pewno DHH koduje Ruby z jakiegoś powodu.

Używając Symfony, zauważam, że coś nie jest w porządku, ale nie wiem, co to jest. Nauczyłem się Railsów poprzez bzdurny e-book Sitepoint i zapomniałem go, więc teraz uczę się go za pośrednictwem ebooka PragProg i uwielbiam ten ebook. Nie do końca znam Railsy, ​​ale rozumiem, jak to działa (dzięki Symfony). Chciałbym skończyć przeglądanie całego ebooka, aby móc tworzyć 2 aplikacje Railsowe. Pamiętam, że Railsy były bardziej zabawne niż Symfony, korzystając z ebooka Sitepoint, którego nie mogłem skończyć, a to nie miało nic wspólnego z ładną składnią Ruby.

  1. Dlaczego Szyny są kodowane w Ruby?
  2. Co takiego jest w klonach PHP Rails, które nie wydają się właściwe?
  3. Co robi Rails, czego nie robią klony Rails?
desbest
źródło
4
Ruby to sekretny sos Railsów.
Chiron,
4
Meh, nie widzę czegoś, co nazywa Ruby on Railssię implementacją w PHP.
alternatywny
2
Jeśli pamięć służy, słyszałem kiedyś podcast, w którym DHH opisał, że wybrał Ruby. Myślę, że to był ten odcinek Life Developer's Life.
Adam Lear
2
@Chris G - Trudno mi uwierzyć. Przepaść między podstawowymi językami jest ogromna - Ruby jest sprytnym i wszechstronnie przemyślanym językiem programowania, PHP to hack nakładany na inne hacki z wieloma funkcjami Ruby zhackowanymi pod koniec gry. PHP jest łatwy do hostowania i działa lepiej, ale gdyby były to priorytety DHH, prawdopodobnie nie wybrałby Ruby z powrotem. PHP tak naprawdę nigdy nie zostało zaprojektowane jako język programowania, a ludzie, którym zależy na teorii języka / CS, zwykle nie lubią tego.
glenatron,
2
@Glenatron Żadna z tych rzeczy nie powstrzymuje żadnego inteligentnego użytkownika PHP od pisania pięknych, ekspresyjnych, nowoczesnych aplikacji internetowych wykorzystujących kluczowe funkcje „Rails”, takie jak ORM. Pomysł, że zamknięcia zostały dodane niedawno do PHP, nie powstrzyma nikogo przed ich użyciem!
Chris G.

Odpowiedzi:

26

1.) Dlaczego Szyny są kodowane w Ruby?

Szyny zostały pierwotnie wyodrębnione z pracy DHH na Basecamp, która została napisana w Ruby. Z czasem programiści Railsów nadal wyodrębniali i rozwijali więcej funkcji w Railsach, co ostatecznie stało się pełnowartościowym frameworkiem.

Ponieważ Ruby zyskała na sile i ekspresji przez lata, nadal dobrze pasowała do frameworka, więc nadal jest językiem, w którym jest napisany. (Plus, „C # on Rails” lub „Java on Rails” nie nie mają tego miłego aliteracji.)

2.) Co to jest z klonami PHP Rails, które nie wydają się właściwe?

Naprawdę nie można na to odpowiedzieć obiektywnie, ale prawdopodobnie wynika to z # 1. Zachowanie i elementy wewnętrzne Railsów wykorzystują wiele funkcji, które istnieją w Rubim i trudno byłoby powielić je gdzie indziej. Na przykład PHP nie ma metaklasy, od których w dużym stopniu zależy Rails.

Poza projektami typu open source, które zarabiają pieniądze, nie rozumiem, dlaczego ludzie robią klony Railsów w PHP, kiedy Rails już istnieje. Dlaczego nie skorzystać z Railsów? Na pewno DHH koduje Ruby z jakiegoś powodu.

Ponieważ nie każdy ma czas, budżet lub ochotę na naukę nowego języka tylko po to, aby mógł nauczyć się nowego frameworka.

Analogicznie, jeśli okaże się, że Brainfuck ma bardzo popularny framework internetowy, czy to oznacza, że ​​powinieneś porzucić swoich klientów, którzy nie napisali swoich aplikacji w Brainfuck? To nie jest sposób na prowadzenie firmy.

Znam PHP i Ruby.

Stwierdzenia takie jak „Wiem zarówno PHP, jak i Ruby” sugerują, że możesz jeszcze nie w pełni docenić głębię, bogactwo i osobliwości każdego z nich.

John Feminella
źródło
(Reprodukcja ze stackoverflow.com/questions/6972992/... dla potomności.)
John Feminella
Wierzę, że pierwsza próba Basecamp została podjęta w PHP i nie działała w sposób zadowalający DHH. Dlatego Railsy zostały zakodowane w Ruby.
Bryan M.,
3
+1 - jest miejsce na naukę nowego języka - natychmiastowy projekt o dowolnym znaczeniu nie jest jednym z nich.
JeffO
PHP nie ma metaklas po wyjęciu z pudełka, masz rację. Jednak od PHP 5.3 można zaimplementować funkcjonalność metaklasy.
Chris G.
6

1. Dlaczego Szyny są kodowane w Ruby?

Kiedyś podjęto decyzję o zaprogramowaniu go w rubinie. Ta decyzja projektowa trwa do dziś.

2. Co takiego jest w klonach PHP Rails, które nie wydają się właściwe?

To uczucie, które trudno powiedzieć na stronie takiej jak ta. Możesz poprosić osobę, która jest z Tobą bardziej intymna i wie więcej o swoich uczuciach, a nawet dzieli się nimi.

3. Co robi Rails, czego nie robią klony Rails?

Dokładny klon Railsów z definicji robi wszystko, co Railsy. To najprawdopodobniej będzie zależeć od tego, jak dokładnie klon został wykonany. Różne części spowodują różne zachowanie. Na przykład w przypadku tłumaczenia na inny język inny język może nie mieć funkcji językowych, z których korzysta Rails on Ruby, co najprawdopodobniej spowoduje różnice w projekcie, a następnie w zachowaniu.

hakre
źródło
6

Dlaczego Szyny są kodowane w Ruby?

Ruby pozwala na wiele metaprogramowania, a jego dopuszczalna składnia pozwala tworzyć ładne interfejsy API, które wcale nie przypominają wywołań metod.

Na przykład ActiveRecord, obiektowy obiekt relacyjny mapujący Rail, dobrze sobie z tym radzi. Po pierwsze, używa meta-programowania Ruby do tworzenia w locie metod odpowiadających nazwom pól w bazie danych.

Po drugie, ActiveRecord pozwala zadeklarować powiązania z obiektami: Personpotęga has_many :books. To has_many wygląda jak deklaracja, ale tak naprawdę jest to wywołanie metody. (Ruby czyta to jako has_many(:books).

Ruby ma również na celu ułatwienie życia doświadczonym programistom.

Ruby ułatwia to, więc ludzie to robią. Inne języki utrudniają te działania, a takie magiczne rzeczy wyraźnie nie są częścią kultury. Django, mega-framework Pythona, ma znacznie mniej meta magii, ponieważ w Pythonie nie jest tak łatwo, a język Python skłania się ku „jawne jest lepsze niż niejawne”. (Nie wiem dużo o kulturze PHP ani frameworkach internetowych po tej stronie).

Myślę, że to niektóre z powodów, dla których DHH zakochał się w Ruby, a on używa tych funkcji językowych z mocą w Railsach.

RyanWilcox
źródło
Bardzo dobrze jest używać konsoli do tworzenia rusztowań w Railsach, ale takie funkcje istnieją w Symfony. Czy możesz wskazać mi, gdzie mogę znaleźć dowody na to, że język Ruby obsługuje metaprogramowanie? Czy zajęcia nie powinny wystarczyć?
desbest
1
Pragmatyczni programiści mają książkę: Metaprogramowanie w Ruby, która - oprócz tego, że stanowi wprowadzenie do Metaprogramowania w Ruby - wydaje również około 50 stron na temat metaprogramowania w Railsach. Nie sądzę, aby wystarczyły klasy: na przykład czasami metaprogramowanie odbywa się za pośrednictwem łańcucha metod („gdy wywołujesz tę funkcję, zamiast tego wywołujesz moją wersję funkcji - która może, ale nie musi, wywoływać oryginał”). Jest to wzorzec metaprogramowania w Rubim (który oczyszcza szyny i ułatwia korzystanie)
RyanWilcox
Będę musiał to przeczytać po opanowaniu Railsów. Brzmi myląco.
desbest
Chciałbym tylko wspomnieć, że PHP ma również rozwiązania ORM. To nie jest coś, co należy wyłącznie do Ruby.
Chris G.
1
Istnieje implementacja ActiveRecord w PHP o nazwie phpActiveRecord. Wykorzystuje wszystkie te rzeczy. Jednak w czasach, gdy DHH budował Railsy, ​​PHP nie było w stanie tego zrobić.
Jamon Holmgren
2

Dlaczego nie skorzystać z szyn?

Będę oferować pewne perspektywy jako użytkownik obu. Zajmuję się programowaniem w Ruby / Rails i używam PHP wyłącznie w pracy. (Uwaga: nie odrzucam Ruby / Rails jako środowiska hobbystycznego, tak właśnie postanowiłem z niego korzystać).

Wiele osób traktuje Ruby / Rails jako świętego Graala tworzenia stron internetowych ze względu na popularność i „odmienność”. Pod wieloma względami z pewnością nie wystarczy, aby odrzucić PHP jako coś starożytnego.

Symfony nie czuje się jak Rails, ponieważ PHP nie ma cukru syntaktycznego, który zapewnia Rails. PHP poprawia się pod tym względem, a dodanie zamknięć w wersji 5.3 miało wpływ na to, ilu z nas pisze kod.

Nie zrozum mnie źle, uwielbiam Ruby i uwielbiam Railsy. Ale kiedy nie chcesz zajmować się złożonym lub drogim hostingiem stron internetowych lub martwić się wydajnością lub być „przełomowym”, PHP jest nadal niezwykle aktualne, a jego ramy są również bardzo dobre.

  • Redbean oferuje doskonałą funkcjonalność ORM z PHP. Podobnie jak Doctrine, Idiorm / Paris i Propel.
  • Symfony2 i CakePHP oferują rozdętą platformę programistyczną podobną do ducha Railsów.
  • CodeIgniter oferuje pełne rozwiązanie frameworka bez wzdęć.
  • Slim oferuje ramy podobne do sinatry.

Twoje insynuacje, że klony PHP-ów nie „czują się dobrze” są mylące, ponieważ uważam, że nie są klonami i nie będą takie same jak Railsy. Naucz się wygrzewać w prostocie i znajomości rozwiązania PHP.

Chris G.
źródło