Warum wurde Rails in Ruby geschrieben? [geschlossen]


9

Ich kenne PHP und Ruby.

Bei Verwendung eines PHP-Rails-Klons (nicht aus der Auswahl) namens Symfony (der anscheinend das beste PHP-Framework ist) stelle ich fest, dass es sich um einen Rails-Klon handelt. Ich denke, Symfony ist dumm und das (SensioLabs ist ein kluges Geschäft), weil Rails bereits existiert.

Abgesehen davon, dass Open-Source-Projekte Geld verdienen, verstehe ich nicht, warum Leute Rails-Klone in PHP erstellen, wenn Rails bereits existiert. Warum nicht Rails verwenden? Sicherlich hat DHH Rails aus einem bestimmten Grund mit Ruby codiert.

Mit Symfony stelle ich fest, dass sich etwas nicht richtig anfühlt, aber ich weiß nicht, was es ist. Ich habe Rails durch ein beschissenes Sitepoint-E-Book gelernt und es vergessen. Jetzt lerne ich es über das PragProg-E-Book und ich liebe dieses E-Book. Ich kenne Rails nicht vollständig, aber ich verstehe, wie es funktioniert (dank Symfony). Ich würde gerne das ganze eBook durcharbeiten, damit ich 2 Rails-Apps erstellen kann. Ich erinnere mich, dass Rails mit dem Sitepoint-eBook, das ich nicht fertigstellen konnte, mehr Spaß machte als Symfony und das nichts mit Rubys hübscher Syntax zu tun hatte.

  1. Warum ist Rails in Ruby codiert?
  2. Was ist mit PHP Rails-Klonen, die sich nicht richtig anfühlen?
  3. Was macht Rails, was machen Rails-Klone nicht?

4
Ruby ist die geheime Sauce von Rails.
Chiron

4
Meh, ich kann nicht sehen, dass etwas namens Ruby on RailsPHP implementiert wird.
Alternative

2
Wenn die Erinnerung dient, hörte ich einmal einen Podcast, in dem DHH beschrieb, dass er Ruby ausgewählt hatte. Ich denke, es war diese Episode von This Developer's Life.
Adam Lear

2
@ Chris G - Ich finde das unglaublich schwer zu glauben. Die Kluft zwischen den zugrunde liegenden Sprachen ist gewaltig - Ruby ist eine clevere und umfassend durchdachte Programmiersprache. PHP ist ein Hack, der auf andere Hacks gestapelt ist und eine Reihe von Ruby-Funktionen enthält, die spät im Spiel gehackt wurden. PHP ist einfach zu hosten und bietet eine bessere Leistung, aber wenn dies die Prioritäten von DHH gewesen wären, hätte er Ruby wahrscheinlich nicht damals gewählt. PHP wurde nie wirklich als Programmiersprache entwickelt, und Leute, die sich für Sprachtheorie / CS interessieren, neigen dazu, sich nicht dafür zu interessieren.
Glenatron

2
@Glenatron Nichts davon hindert einen intelligenten PHP-Benutzer daran, schöne, ausdrucksstarke, moderne Webanwendungen zu schreiben, die wichtige "Rails" -Funktionen wie ORM verwenden. Die Idee, dass Schließungen erst kürzlich zu PHP hinzugefügt wurden, wird niemanden davon abhalten, sie zu verwenden!
Chris G.

Antworten:


26

1.) Warum ist Rails in Ruby codiert?

Rails wurde ursprünglich aus DHHs Arbeit an Basecamp extrahiert , die in Ruby geschrieben wurde. Im Laufe der Zeit extrahierten und entwickelten die Rails-Kernentwickler weitere Funktionen in Rails und es wurde schließlich ein vollwertiges Framework.

Da Ruby im Laufe der Jahre an Kraft und Ausdruckskraft zugenommen hat, passt es weiterhin gut zum Framework, sodass es auch weiterhin die Sprache ist, in der es geschrieben wurde. (Plus, "C # on Rails" oder "Java on Rails" nicht habe nicht diese schöne Alliteration.)

2.) Was ist mit PHP Rails-Klonen, die sich nicht richtig anfühlen?

Dies kann nicht wirklich objektiv beantwortet werden, aber es liegt wahrscheinlich an # 1. Das Verhalten und die Interna von Rails nutzen viele Funktionen, die in Ruby vorhanden sind, und sind an anderer Stelle nur schwer genau zu replizieren. Zum Beispiel hat PHP keine Metaklassen, von denen Rails stark abhängt.

Abgesehen davon, dass Open-Source-Projekte Geld verdienen, verstehe ich nicht, warum Leute Rails-Klone in PHP erstellen, wenn Rails bereits existiert. Warum nicht Rails verwenden? Sicherlich hat DHH Rails aus einem bestimmten Grund mit Ruby codiert.

Weil nicht jeder die Zeit, das Budget oder die Neigung hat, eine neue Sprache zu lernen, nur um einen neuen Rahmen zu lernen.

Wenn sich in Analogie herausstellt, dass Brainfuck über ein sehr beliebtes Webframework verfügt, sollten Sie dann Ihre Kunden verlassen, die ihre Anwendungen nicht in Brainfuck geschrieben haben? Das ist keine Möglichkeit, ein Geschäft zu führen.

Ich kenne PHP und Ruby.

Aussagen wie "Ich kenne sowohl PHP als auch Ruby" deuten darauf hin, dass Sie die Tiefe, den Reichtum und die Eigenheiten von beiden möglicherweise noch nicht vollständig einschätzen.


(Wiedergabe von stackoverflow.com/questions/6972992/… für die Nachwelt.)
John Feminella

Ich glaube, ein erster Versuch bei Basecamp wurde in PHP versucht und funktionierte nicht zur Zufriedenheit von DHH. Daher wurde Rails in Ruby codiert.
Bryan M.

3
+1 - es gibt eine Zeit, in der man eine neue Sprache lernen kann - ein unmittelbares Projekt von Bedeutung ist keines der.
JeffO

PHP hat keine sofort einsatzbereiten Metaklassen, Sie haben Recht. Seit PHP 5.3 ist es jedoch möglich, Metaklassenfunktionen zu implementieren.
Chris G.

6

1. Warum ist Rails in Ruby codiert?

Es gab einmal die Entscheidung, es in Rubin zu programmieren. Diese Entwurfsentscheidung dauert bis heute an.

2. Was ist mit PHP Rails-Klonen, die sich nicht richtig anfühlen?

Es ist ein Gefühl, das man auf einem Wesbite wie diesem schwer zu sagen hat. Vielleicht möchten Sie eine Person fragen, die Ihnen näher steht und mehr über Ihre Gefühle weiß oder sie sogar teilt.

3. Was macht Rails, was machen Rails-Klone nicht?

Ein exakter Klon von Rails macht per Definition alles, was Rails macht. Dies hängt also höchstwahrscheinlich davon ab, wie genau ein Klon erstellt wurde. Die verschiedenen Teile führen zu unterschiedlichem Verhalten. Bei einer Übersetzung in eine andere Sprache verfügt die andere Sprache möglicherweise nicht über Sprachfunktionen, die Rails on Ruby verwendet. Dies führt höchstwahrscheinlich zu Unterschieden im Design und dann im Verhalten.


6

Warum ist Rails in Ruby codiert?

Ruby erlaubt viel Meta-Programmierung und seine zulässige Syntax ermöglicht es Ihnen, nette APIs zu erstellen, die überhaupt nicht wie Methodenaufrufe aussehen.

Zum Beispiel macht ActiveRecord, Rail's Object Relational Mapper, beide Dinge gut. Erstens verwendet es Rubys Metaprogrammierungsfunktion, um Methoden im laufenden Betrieb zu erstellen, die Feldnamen in der Datenbank entsprechen.

Zweitens können Sie mit ActiveRecord Zuordnungen zu Objekten deklarieren: eine PersonMacht has_many :books. Das has_many sieht aus wie eine Deklaration, ist aber eigentlich ein Methodenaufruf. (Ruby liest dies als has_many(:books).

Ruby hat auch das Ziel, erfahrenen Programmierern das Leben zu erleichtern.

Ruby macht diese Sache einfach, also machen die Leute sie. Andere Sprachen machen dies schwieriger oder magische Dinge wie diese sind ausdrücklich nicht Teil der Kultur. Django, das Python-Mega-Framework, hat viel weniger Metamagie, weil es in Python nicht so einfach ist und Python als Sprache zu "explizit ist besser als implizit" tendiert. (Ich weiß nicht viel über die PHP-Kultur oder die Web-Frameworks auf dieser Seite.)

Ich denke, dies sind einige der Gründe, warum DHH sich in Ruby verliebt hat, und er verwendet diese Sprachfunktionen mit Power in Rails.


Es ist alles sehr gut, die Konsole zu verwenden, um Gerüste in Rails zu bauen, aber solche Funktionen gibt es in Symfony. Können Sie mir zeigen, wo ich Beweise dafür finden kann, wie Rubys Sprache für die Meta-Programmierung geeignet ist? Sollte der Unterricht nicht ausreichen?
Desbest

1
Die Pragmatischen Programmierer haben ein Buch: Metaprogrammierung in Ruby, das nicht nur eine Einführung in die Metaprogrammierung in Ruby darstellt, sondern auch etwa 50 Seiten über Metaprogrammierung in Rails verbringt. Ich denke nicht, dass einfach Klassen genug sind: Zum Beispiel geschieht die Metaprogrammierung manchmal über die Methodenkette ("Wenn Sie diese Funktion aufrufen, rufen Sie stattdessen meine Version der Funktion auf - die möglicherweise das Original aufruft oder nicht"). Dies ist ein Metaprogrammierungsmuster in Ruby (das Rails bereinigt und einfacher zu verwenden macht)
RyanWilcox

Ich muss das lesen, wenn ich Rails gemeistert habe. Das klingt alles verwirrend.
Desbest

Ich möchte nur erwähnen, dass PHP auch ORM-Lösungen hat. Es ist nicht etwas, das nur Ruby vorbehalten ist.
Chris G.

1
Es gibt eine PHP-Implementierung von ActiveRecord namens phpActiveRecord. Es nutzt all diese Dinge. Als DHH Rails baute, war PHP jedoch weit davon entfernt, dies zu tun.
Jamon Holmgren

2

Warum nicht Schienen benutzen?

Ich werde als Benutzer von beiden eine Perspektive bieten. Ich habe ein Hobbyprogramm in Ruby / Rails und benutze PHP ausschließlich bei der Arbeit. (Hinweis: Ich lehne Ruby / Rails nicht als Hobbyumgebung ab. So wähle ich es einfach aus.)

Viele Leute betrachten Ruby / Rails als den heiligen Gral der Website-Entwicklung, weil es so beliebt ist und weil es "anders" ist. In vielerlei Hinsicht reicht es sicherlich nicht aus, PHP als etwas Altes abzutun.

Symfony fühlt sich nicht wie Rails an, da PHP ein Teil des syntaktischen Zuckers fehlt, den Rails bietet. PHP verbessert sich in dieser Hinsicht und das Hinzufügen von Schließungen durch 5.3 hat einen Unterschied darin gemacht, wie viele von uns Code schreiben.

Versteh mich nicht falsch, ich liebe Ruby und ich liebe Rails. Wenn Sie sich jedoch nicht mit komplexem oder teurem Website-Hosting befassen oder sich Gedanken über die Leistung machen oder auf dem neuesten Stand sein möchten, ist PHP auch heute noch äußerst relevant und die Frameworks sind ebenfalls sehr gut.

  • Redbean bietet großartige ORM-Funktionen mit PHP. So auch Doctrine, Idiorm / Paris und Propel.
  • Symfony2 und CakePHP bieten ein aufgeblähtes Webentwicklungsframework, das Rails ähnelt.
  • CodeIgniter bietet eine vollständige Framework-Lösung ohne Aufblähen.
  • Slim bietet einen sinatraähnlichen Rahmen.

Ihre Andeutung, dass sich PHP-Rails-Klone nicht richtig anfühlen, ist meiner Meinung nach falsch, weil sie keine Klone sind und nicht mit Rails identisch sein werden. Lernen Sie, die Einfachheit und Vertrautheit einer PHP-Lösung zu genießen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.