Python und Ruby gelten normalerweise als enge Cousins (wenn auch mit ganz unterschiedlichem historischem Gepäck) mit ähnlicher Ausdruckskraft und Kraft. Einige haben jedoch argumentiert, dass der immense Erfolg des Rails-Frameworks wirklich viel mit der Sprache zu tun hat, auf der es basiert: Ruby selbst. Warum sollte Ruby für ein solches Framework besser geeignet sein als Python?
python
ruby-on-rails
ruby
web-frameworks
Victor Yan
quelle
quelle
Antworten:
Es gibt wahrscheinlich zwei Hauptunterschiede:
Ruby hat elegante, anonyme Verschlüsse.
Rails nutzt sie effektiv. Hier ist ein Beispiel:
Anonyme Schließungen / Lambdas erleichtern die Emulation neuer Sprachfunktionen, die Blöcke benötigen würden. In Python gibt es Verschlüsse, die jedoch benannt werden müssen, um verwendet zu werden. Anstatt Verschlüsse zum Emulieren neuer Sprachfunktionen verwenden zu können, müssen Sie explizit angeben, dass Sie einen Verschluss verwenden.
Ruby hat eine sauberere und einfacher zu verwendende Metaprogrammierung.
Dies wird in Rails häufig verwendet, vor allem, weil es so einfach zu bedienen ist. Um genau zu sein, können Sie in Ruby beliebigen Code im Kontext der Klasse ausführen. Die folgenden Schnipsel sind äquivalent:
In beiden Fällen können Sie dann Folgendes tun:
welches "HALLO" druckt. Das
class_eval
Methode verwendet auch einen String, sodass es möglich ist, während der Erstellung einer Klasse Methoden im laufenden Betrieb zu erstellen, deren Semantik je nach den übergebenen Parametern unterschiedlich ist.Es ist in der Tat möglich, diese Art der Metaprogrammierung in Python (und auch in anderen Sprachen) durchzuführen, aber Ruby hat einen Vorsprung, da die Metaprogrammierung kein spezieller Programmierstil ist. Es ergibt sich aus der Tatsache, dass in Ruby alles ein Objekt ist und alle Codezeilen direkt ausgeführt werden. Infolgedessen sind
Class
es selbst Objekte, Klassenkörper haben einenself
Hinweis auf die Klasse, und Sie können Methoden für die Klasse aufrufen, während Sie eine erstellen.Dies ist in hohem Maße verantwortlich für den Grad der Deklarativität, der in Rails möglich ist, und für die Leichtigkeit, mit der wir neue deklarative Funktionen implementieren können, die wie Schlüsselwörter oder neue Blocksprachenfunktionen aussehen.
quelle
Diejenigen, die das argumentiert haben
sind (IMO) falsch. Dieser Erfolg ist wahrscheinlich mehr auf kluges und nachhaltiges Marketing zurückzuführen als auf technische Fähigkeiten. Django macht in vielen Bereichen (z. B. dem eingebauten Kick-Ass-Administrator) wohl einen besseren Job, ohne dass Ruby-Funktionen erforderlich sind. Ich disse Ruby überhaupt nicht, stehe nur für Python ein!
quelle
Die Python-Community glaubt, dass es die höchste Form von Eleganz ist, Dinge so einfach und unkompliziert wie möglich zu machen. Die Ruby-Community glaubt, dass es die höchste Form von Eleganz ist, Dinge auf clevere Weise zu tun, die coolen Code ermöglichen.
Bei Rails dreht sich alles um die Einhaltung bestimmter Konventionen. Viele andere Dinge passieren auf magische Weise für Sie. Das passt sehr gut zu der rubinroten Sichtweise auf die Welt, folgt aber nicht wirklich der Python-Art.
quelle
Ist diese Debatte eine neue Debatte "vim versus emacs"?
Ich bin ein Python / Django-Programmierer und habe bisher noch nie ein Problem in dieser Sprache / diesem Framework gefunden, das mich dazu veranlassen würde, zu Ruby / Rails zu wechseln.
Ich kann mir vorstellen, dass es dasselbe wäre, wenn ich Erfahrung mit Ruby / Rails hätte.
Beide haben eine ähnliche Philosophie und erledigen ihre Arbeit schnell und elegant. Die bessere Wahl ist das, was Sie bereits wissen.
quelle
Persönlich finde ich, dass Ruby Python in vielerlei Hinsicht überlegen ist, was ich als "konsequente Ausdruckskraft" bezeichnen würde. In Ruby ist join beispielsweise eine Methode für das Array-Objekt, die eine Zeichenfolge ausgibt, sodass Sie Folgendes erhalten:
In Python ist join eine Methode für das String-Objekt, die jedoch einen Fehler auslöst, wenn Sie etwas anderes als einen String als zu verbindendes Objekt übergeben. Das gleiche Konstrukt ist also ungefähr so:
Es gibt viele dieser kleinen Unterschiede, die sich im Laufe der Zeit summieren.
Ich kann mir auch keinen besseren Weg vorstellen, um unsichtbare Logikfehler einzuführen, als Leerzeichen signifikant zu machen.
quelle
Die wirkliche Antwort ist weder Python noch Ruby sind bessere / schlechtere Kandidaten für ein Webframework. Wenn Sie Objektivität wünschen, müssen Sie Code in beide schreiben und herausfinden, welcher Ihrer persönlichen Vorlieben am besten entspricht, einschließlich der Community.
Die meisten Menschen, die für die eine oder andere argumentieren, haben die andere Sprache entweder nie ernsthaft benutzt oder stimmen für ihre persönlichen Vorlieben.
Ich würde vermuten, dass sich die meisten Leute darauf festlegen, mit wem sie zuerst in Kontakt kommen, weil es ihnen etwas Neues beibringt (MVC, Tests, Generatoren usw.) oder etwas Besseres tut (Plugins, Vorlagen usw.). Ich habe mit PHP entwickelt und bin mit RubyOnRails in Kontakt gekommen. Wenn ich vor der Suche nach Rails von MVC gewusst hätte, würde ich PHP höchstwahrscheinlich nie zurücklassen. Aber als ich anfing, Ruby zu verwenden, hat mir die Syntax, die Funktionen usw. gefallen.
Wenn ich zuerst Python und eines seiner MVC-Frameworks gefunden hätte, würde ich diese Sprache höchstwahrscheinlich stattdessen loben!
quelle
Python hat eine ganze Reihe von Rails-ähnlichen Frameworks. Es gibt so viele, dass ein Witz geht, dass während des typischen Gesprächs auf PyCon mindestens ein Webframework das Licht der Welt erblicken wird.
Das Argument, dass Rubys Meta-Programmierung es besser geeignet machen würde, ist IMO falsch. Für solche Frameworks benötigen Sie keine Metaprogrammierung.
Ich denke, wir können daraus schließen, dass Ruby in dieser Hinsicht nicht besser (und wahrscheinlich auch nicht schlechter) als Python ist.
quelle
Weil Rails entwickelt wurde, um die Funktionen von Rubys zu nutzen.
Eine ähnlich gormlose Frage wäre: "Warum ist Python für Django besser geeignet als Ruby?".
quelle
Ich nehme an, wir sollten nicht die Sprachmerkmale an sich diskutieren , sondern die Akzente, die die jeweiligen Gemeinschaften auf den Sprachmerkmalen setzen. In Python ist das erneute Öffnen einer Klasse beispielsweise durchaus möglich, jedoch nicht üblich. In Ruby gehört es jedoch zur täglichen Praxis, eine Klasse wieder zu eröffnen. Dies ermöglicht eine schnelle und unkomplizierte Anpassung des Frameworks an die aktuellen Anforderungen und macht Ruby für Rails-ähnliche Frameworks günstiger als jede andere dynamische Sprache. Daher meine Antwort: gemeinsame Verwendung von Wiedereröffnungsklassen.
quelle
Einige haben gesagt, dass die Art der Metaprogrammierung, die erforderlich ist, um ActiveRecord (eine Schlüsselkomponente von Schienen) zu ermöglichen, in Ruby einfacher und natürlicher ist als in Python - ich kenne Python noch nicht;), daher kann ich diese Aussage nicht persönlich bestätigen.
Ich habe kurz Rails verwendet, und die Verwendung von Catchalls / Interceptors und dynamischer Auswertung / Code-Injection ermöglicht es Ihnen, auf einer viel höheren Abstraktionsebene zu arbeiten als einige der anderen Frameworks (vor ihrer Zeit). Ich habe wenig bis gar keine Erfahrung mit Pythons Framework - aber ich habe gehört, dass es gleichermaßen fähig ist - und dass die Python-Community großartige Arbeit leistet, um pythonische Bemühungen zu unterstützen und zu fördern.
quelle
Ich denke, dass die Syntax sauberer ist und Ruby zumindest für mich viel "angenehmer" ist - so subjektiv das auch ist!
quelle
Zwei Antworten:
ein. Weil Schienen für Rubin geschrieben wurden.
b. Aus dem gleichen Grund ist C besser für Linux geeignet als Ruby
quelle
All dies ist VOLLSTÄNDIG "IMHO"
In Ruby gibt es EIN Webanwendungsframework, daher ist es das einzige Framework, das für diese Sprache beworben wird.
Python hatte seit seiner Gründung mehrere, um nur einige zu nennen: Zope, Twisted, Django, TurboGears (es ist selbst eine Mischung aus anderen Framework-Komponenten), Pylons (eine Art Klon des Rails-Frameworks) und so weiter. Keiner von ihnen wird in der gesamten Python-Community als "THE one to use" unterstützt, sodass die gesamte "Groundswell" auf mehrere Projekte verteilt ist.
Rails hat allein oder zumindest in der überwiegenden Mehrheit aufgrund von Rails die Community-Größe.
Sowohl Python als auch Ruby sind perfekt in der Lage, die Arbeit als Webanwendungsframework zu erledigen. Verwenden Sie die, die SIE (und Ihr potenzielles Entwicklungsteam) mögen und auf die Sie sich ausrichten können.
quelle