Pourquoi Rails a-t-il été écrit en Ruby? [fermé]

9

Je connais PHP et Ruby.

En utilisant un clone PHP Rails (pas par choix), appelé Symfony, (qui est apparemment le meilleur framework PHP), je remarque que c'est un clone de Rails. Je pense que Symfony est stupide et cela (SensioLabs est une entreprise intelligente) parce que Rails existe déjà.

En dehors des projets open source qui gagnent de l'argent, je ne comprends pas pourquoi les gens font des clones Rails en PHP, alors que Rails existe déjà. Pourquoi ne pas utiliser Rails? Sûrement DHH a codé Rails avec Ruby pour une raison.

En utilisant Symfony, je remarque que quelque chose ne va pas très bien mais je ne sais pas ce que c'est. J'ai appris Rails à travers un ebook Sitepoint merde et l'ai oublié, alors maintenant je l'apprends à travers l'ebook PragProg et j'adore cet ebook. Je ne connais pas bien Rails, mais je comprends comment cela fonctionne (grâce à Symfony). J'aimerais finir de parcourir l'intégralité de l'ebook afin de pouvoir créer des applications 2 Rails. Je me souviens que Rails était plus amusant que Symfony en utilisant l'ebook Sitepoint que je ne pouvais pas terminer, et cela n'avait rien à voir avec la jolie syntaxe de Ruby.

  1. Pourquoi Rails est-il codé en Ruby?
  2. Qu'est-ce que les clones de PHP Rails ne vous semblent pas bien?
  3. Qu'est-ce que fait Rails, que les clones Rails ne font pas?
desbester
la source
4
Le rubis est la sauce secrète des Rails.
Chiron
4
Meh, je ne vois pas quelque chose appelé Ruby on Railsêtre implémenté en PHP.
alternative
2
Si ma mémoire est bonne, j'ai entendu un podcast une fois où DHH a décrit qu'il avait choisi Ruby. Je pense que c'était cet épisode de This Developer's Life.
Adam Lear
2
@Chris G - Je trouve cela incroyablement difficile à croire. Le fossé entre les langages sous-jacents est énorme - Ruby est un langage de programmation intelligent et bien pensé, PHP est un hack empilé sur d'autres hacks avec un tas de fonctionnalités Ruby piratées à la fin du jeu. PHP est facile à héberger et fonctionne mieux, mais si ceux-ci avaient été les priorités de DHH, il n'aurait probablement pas choisi Ruby à ce moment-là. PHP n'a jamais été vraiment conçu pour être un langage de programmation et les gens qui se soucient de la théorie du langage / CS ont tendance à ne pas en être friands.
glenatron
2
@Glenatron Rien de tout cela n'empêche un utilisateur PHP intelligent d'écrire de belles applications Web expressives et modernes en utilisant des fonctionnalités clés de "Rails" comme ORM. L'idée que les fermetures n'ont été ajoutées que récemment à PHP n'empêchera personne de les utiliser!
Chris G.

Réponses:

26

1.) Pourquoi Rails est-il codé en Ruby?

Rails a été à l'origine extrait du travail de DHH sur Basecamp, qui a été écrit en Ruby. Au fil du temps, les développeurs principaux de Rails ont continué d'extraire et de développer davantage de fonctionnalités dans Rails, et il est finalement devenu un cadre à part entière.

Depuis que Ruby a grandi en puissance et en expressivité au fil des ans, il a continué d'être un bon ajustement pour le cadre, donc c'est également le langage dans lequel il est écrit. (De plus, "C # on Rails" ou "Java on Rails" ne fait pas pas cette belle allitération.)

2.) Qu'est-ce que les clones de PHP Rails ne vous semblent pas bien?

Cela ne peut pas vraiment être répondu objectivement, mais c'est probablement à cause de # 1. Le comportement et les propriétés internes de Rails tirent parti de nombreuses fonctionnalités qui existent dans Ruby et seraient difficiles à reproduire précisément ailleurs. Par exemple, PHP n'a pas de métaclasses, dont Rails dépend fortement.

Mis à part les projets open source qui gagnent de l'argent, je ne comprends pas pourquoi les gens font des clones Rails en PHP, alors que Rails existe déjà. Pourquoi ne pas utiliser Rails? Sûrement DHH a codé Rails avec Ruby pour une raison.

Parce que tout le monde n'a pas le temps, le budget ou l'envie d'apprendre une nouvelle langue juste pour apprendre un nouveau cadre.

Par analogie, s'il s'avérait que Brainfuck avait un framework web très populaire, cela signifie-t-il que vous devriez abandonner vos clients qui n'ont pas écrit leurs applications dans Brainfuck? Ce n'est pas une façon de gérer une entreprise.

Je connais PHP et Ruby.

Des déclarations comme «Je connais PHP et Ruby» suggèrent que vous ne pouvez pas encore apprécier pleinement la profondeur, la richesse et les particularités de ces deux versions.

John Feminella
la source
(Reproduit de stackoverflow.com/questions/6972992/… pour la postérité.)
John Feminella
Je crois qu'une première tentative de Basecamp a été tentée en PHP et n'a pas fonctionné à la satisfaction de DHH. Par conséquent, Rails a été codé en Ruby.
Bryan M.
3
+1 - il y a un moment où un endroit pour apprendre une nouvelle langue - un projet immédiat de toute importance n'est pas l'un des.
JeffO
PHP n'a pas de métaclasses prêtes à l'emploi, vous avez raison. Cependant, depuis PHP 5.3, il est possible d'implémenter la fonctionnalité de métaclasse.
Chris G.
6

1. Pourquoi Rails est-il codé en Ruby?

Il fut une fois la décision de le programmer en rubis. Cette décision de conception dure jusqu'à aujourd'hui.

2. Qu'est-ce que les clones de PHP Rails ne vous semblent pas bien?

C'est un sentiment que vous avez, difficile à dire sur une wesbite comme celle-ci. Vous voudrez peut-être demander à une personne qui est plus intime avec vous et qui en sait plus sur vos sentiments ou même les partage.

3. Qu'est-ce que fait Rails, que les clones Rails ne font pas?

Un clone exact de Rails fait par définition tout ce que fait Rails. Cela dépendra donc très probablement de la façon dont un clone a été effectué. Les différentes parties entraîneront un comportement différent. Par exemple, pour une traduction dans une autre langue, l'autre langue peut ne pas avoir de fonctionnalités linguistiques utilisées par Rails on Ruby, ce qui entraînera très probablement des différences de conception, puis de comportement.

hakre
la source
6

Pourquoi Rails est-il codé en Ruby?

Ruby permet beaucoup de méta-programmation, et sa syntaxe permissive vous permet de créer de belles API qui ne ressemblent pas du tout aux appels de méthode.

Par exemple, ActiveRecord, le mappeur relationnel objet de Rail, fait bien ces deux choses. Premièrement, il utilise la capacité de méta-programmation de Ruby pour créer des méthodes à la volée correspondant aux noms de champs dans la base de données.

Deuxièmement, ActiveRecord vous permet de déclarer des associations à des objets: une Personpuissance has_many :books. Ce has_many ressemble à une déclaration, mais c'est en fait un appel de méthode. (Ruby lit ceci comme has_many(:books).

Ruby a également pour objectif de faciliter la vie des programmeurs expérimentés.

Ruby rend ces choses faciles, donc les gens les font. D'autres langues rendent ces choses plus difficiles, ou des choses magiques comme celle-ci ne font explicitement pas partie de la culture. Django, le méga-framework Python, a beaucoup moins de méta-magie car ce n'est pas aussi facile en Python, et Python en tant que langage penche vers "explicite vaut mieux qu'implicite". (Je ne connais pas grand-chose à la culture PHP ou aux frameworks web de ce côté.)

Je pense que ce sont quelques-unes des raisons pour lesquelles DHH est tombé amoureux de Ruby, et il utilise ces fonctionnalités de langage avec puissance dans Rails.

RyanWilcox
la source
C'est très bien d'utiliser la console pour faire un échafaudage dans Rails, mais de telles fonctionnalités existent dans Symfony. Pouvez-vous m'indiquer où je peux trouver des preuves de la façon dont le langage de Ruby s'adresse à la méta-programmation? Les cours ne devraient-ils pas suffire?
desbest
1
Les programmeurs pragmatiques ont un livre: Metaprogramming in Ruby, qui - en plus d'être une introduction à Metaprogramming in Ruby - consacre également environ 50 pages à parler de métaprogrammation dans Rails. Je ne pense pas que les classes suffisent: par exemple, parfois la métaprogrammation se produit via la chaîne de méthodes ("lorsque vous appelez cette fonction, appelez plutôt ma version de la fonction - qui peut ou non appeler l'original"). Ceci est un modèle de métaprogrammation en Ruby (que Rails nettoie et rend plus facile à utiliser)
RyanWilcox
Je vais devoir le lire une fois que je maîtriserai Rails. Tout cela semble déroutant.
desbest
Je voudrais juste mentionner que PHP a aussi des solutions ORM. Ce n'est pas quelque chose qui est exclusif à Ruby.
Chris G.
1
Il existe une implémentation PHP d'ActiveRecord appelée phpActiveRecord. Il utilise toutes ces choses. Cependant, lorsque DHH a construit Rails, PHP était loin d'être en mesure de le faire.
Jamon Holmgren
2

Pourquoi ne pas utiliser des rails?

Je vais offrir une certaine perspective en tant qu'utilisateur des deux. Je passe mon temps libre en Ruby / Rails et j'utilise PHP exclusivement au travail. (Remarque: je ne rejette pas Ruby / Rails comme un environnement amateur, c'est juste comme ça que je choisis de l'utiliser.)

Beaucoup de gens considèrent Ruby / Rails comme le Saint Graal du développement de sites Web en raison de la popularité et du fait qu'il est «différent». À bien des égards, il n'est certainement pas suffisant de rejeter PHP comme quelque chose d'ancien.

Symfony ne ressemble pas à Rails parce que PHP ne manque pas du sucre syntaxique fourni par rails. PHP s'améliore à cet égard et l'ajout de fermetures de 5.3 a fait une différence dans le nombre d'entre nous qui écrivent du code.

Ne vous méprenez pas, j'aime Ruby et j'aime Rails. Mais lorsque vous ne voulez pas faire face à un hébergement de site Web complexe ou coûteux ou vous soucier des performances ou d'être à la pointe de la technologie, PHP est toujours extrêmement pertinent aujourd'hui et ses cadres sont également très bons.

  • Redbean offre une grande fonctionnalité ORM avec PHP. Doctrine, Idiorm / Paris et Propel aussi.
  • Symfony2 et CakePHP offrent un cadre de développement Web gonflé similaire dans l'esprit à Rails.
  • CodeIgniter offre une solution de framework complète sans le ballonnement.
  • Slim offre un cadre de type sinatra.

Votre insinuation selon laquelle les clones de rails PHP ne se sentent pas bien est erronée, je pense, car ce ne sont pas des clones et ils ne seront pas les mêmes que Rails. Apprenez à vous prélasser dans la simplicité et la familiarité d'une solution PHP.

Chris G.
la source