Python et Ruby sont généralement considérés comme des cousins proches (bien qu'avec un bagage historique assez différent) avec une expressivité et une puissance similaires. Mais certains ont fait valoir que l'immense succès du framework Rails a vraiment beaucoup à voir avec le langage sur lequel il est construit: Ruby lui-même. Alors pourquoi Ruby serait-il plus adapté à un tel framework que Python?
python
ruby-on-rails
ruby
web-frameworks
Victor Yan
la source
la source
Réponses:
Il existe probablement deux différences majeures:
Ruby a des fermetures élégantes et anonymes.
Les rails les utilisent à bon escient. Voici un exemple:
Les fermetures / lambdas anonymes facilitent l'émulation de nouvelles fonctionnalités de langage qui prendraient des blocs. En Python, les fermetures existent, mais elles doivent être nommées pour être utilisées. Ainsi, au lieu de pouvoir utiliser des fermetures pour émuler de nouvelles fonctionnalités de langage, vous êtes obligé d'être explicite sur le fait que vous utilisez une fermeture.
Ruby a une métaprogrammation plus propre et plus facile à utiliser.
Ceci est largement utilisé dans Rails, principalement en raison de sa facilité d'utilisation. Pour être précis, dans Ruby, vous pouvez exécuter du code arbitraire dans le contexte de la classe. Les extraits de code suivants sont équivalents:
Dans les deux cas, vous pouvez alors faire:
qui imprimera "HELLO". La
class_eval
méthode prend également une chaîne, il est donc possible de créer des méthodes à la volée, lors de la création d'une classe, qui ont une sémantique différente en fonction des paramètres transmis.Il est, en fait, possible de faire ce genre de métaprogrammation en Python (et dans d'autres langages aussi), mais Ruby a une longueur d'avance car la métaprogrammation n'est pas un style de programmation particulier. Cela découle du fait que dans Ruby, tout est un objet et toutes les lignes de code sont directement exécutées. En conséquence,
Class
es sont eux-mêmes des objets, les corps de classe ont unself
pointant sur la classe et vous pouvez appeler des méthodes sur la classe lorsque vous en créez une.Ceci est en grande partie responsable du degré de déclarativité possible dans Rails et de la facilité avec laquelle nous sommes en mesure d'implémenter de nouvelles fonctionnalités déclaratives qui ressemblent à des mots-clés ou à de nouvelles fonctionnalités de langage de blocs.
la source
Ceux qui ont soutenu que
(OMI) se trompe. Ce succès doit probablement plus à un marketing intelligent et soutenu qu'à des prouesses techniques. Django fait sans doute un meilleur travail dans de nombreux domaines (par exemple, l'administrateur kick-ass intégré) sans avoir besoin de fonctionnalités de Ruby. Je ne dis pas du tout Ruby, je défends juste Python!
la source
La communauté python pense que faire les choses de la manière la plus simple et la plus directe possible est la plus haute forme d'élégance. La communauté ruby croit que faire les choses de manière intelligente qui permet un code cool est la plus haute forme d'élégance.
Rails est tout au sujet de si vous suivez certaines conventions, beaucoup d'autres choses se produisent comme par magie pour vous. Cela correspond très bien à la manière rubis de regarder le monde, mais ne suit pas vraiment la manière python.
la source
Ce débat est-il un nouveau débat «vim contre emacs»?
Je suis un programmeur Python / Django et jusqu'à présent je n'ai jamais trouvé de problème dans ce langage / framework qui me conduirait à passer à Ruby / Rails.
J'imagine que ce serait la même chose si j'avais de l'expérience avec Ruby / Rails.
Les deux ont une philosophie similaire et font le travail de manière rapide et élégante. Le meilleur choix est ce que vous savez déjà.
la source
Personnellement, je trouve que le rubis est supérieur au python à bien des égards, ce que j'appellerais une «expressivité cohérente». Par exemple, dans ruby, join est une méthode sur l'objet tableau qui génère une chaîne, vous obtenez donc quelque chose comme ceci:
En python, join est une méthode sur l'objet string mais qui renvoie une erreur si vous lui passez autre chose qu'une chaîne comme objet à joindre, donc la même construction est quelque chose comme:
Il y a beaucoup de ces petites différences qui s'accumulent avec le temps.
De plus, je ne peux pas penser à une meilleure façon d'introduire des erreurs de logique invisibles que de rendre les espaces blancs significatifs.
la source
La vraie réponse n'est ni Python ni Ruby ne sont de meilleurs / pires candidats pour un framework Web. Si vous voulez de l'objectivité, vous devez écrire du code dans les deux et voir lequel correspond le mieux à vos préférences personnelles, y compris la communauté.
La plupart des gens qui plaident pour l'une ou l'autre n'ont jamais utilisé sérieusement l'autre langue ou «votent» pour leur préférence personnelle.
Je suppose que la plupart des gens choisissent de savoir avec qui ils entrent en contact en premier parce que cela leur apprend quelque chose de nouveau (MVC, tests, générateurs, etc.) ou fait quelque chose de mieux (plugins, modèles, etc.). J'avais l'habitude de développer avec PHP et suis entré en contact avec RubyOnRails. Si j'avais connu MVC avant de trouver Rails, je n'aurais probablement jamais laissé PHP derrière. Mais une fois que j'ai commencé à utiliser Ruby, j'ai apprécié la syntaxe, les fonctionnalités, etc.
Si j'avais trouvé Python et l'un de ses frameworks MVC en premier, je louerais probablement plutôt ce langage!
la source
Python a toute une série de frameworks de type Rails. Il y en a tellement qu'une blague dit que pendant la discussion typique à PyCon, au moins un framework Web verra le jour.
L'argument selon lequel la métaprogrammation Rubys la rendrait mieux adaptée est erroné par l'OMI. Vous n'avez pas besoin de métaprogrammation pour des frameworks comme celui-ci.
Je pense donc que nous pouvons conclure que Ruby n'est pas meilleur (et probablement ni pire) que Python à cet égard.
la source
Parce que Rails est développé pour tirer parti de l'ensemble des fonctionnalités de Rubys.
Une question similaire serait "Pourquoi Python est-il plus adapté à Django que Ruby?".
la source
Je suppose que nous ne devrions pas discuter des caractéristiques linguistiques en soi, mais plutôt des accents que les communautés respectives apportent aux caractéristiques linguistiques. Par exemple, en Python, la réouverture d'une classe est parfaitement possible mais ce n'est pas courant; en Ruby, cependant, la réouverture d'une classe fait partie de la pratique quotidienne. cela permet une personnalisation rapide et directe du framework aux exigences actuelles et rend Ruby plus favorable pour les frameworks de type Rails que tout autre langage dynamique. D'où ma réponse: utilisation courante de la réouverture des classes.
la source
Certains ont dit que le type de métaprogrammation requis pour rendre ActiveRecord (un composant clé des rails) possible est plus facile et plus naturel à faire en ruby qu'en python - je ne connais pas encore python;), donc je ne peux pas personnellement confirmer cette déclaration.
J'ai brièvement utilisé les rails, et son utilisation de catchalls / interceptors et d'évaluation dynamique / injection de code vous permet d'opérer à un niveau d'abstraction beaucoup plus élevé que certains des autres frameworks (avant l'heure). J'ai peu ou pas d'expérience avec le framework Python - mais j'ai entendu dire qu'il est tout aussi capable - et que la communauté python fait un excellent travail en soutenant et en encourageant les efforts pythoniques.
la source
Je pense que la syntaxe est plus propre et que Ruby, du moins pour moi, est beaucoup plus «agréable» - aussi subjective que cela soit!
la source
Deux réponses:
une. Parce que les rails ont été écrits pour le rubis.
b. Pour la même raison, C plus adapté à Linux que Ruby
la source
Tout cela est TOTALEMENT "IMHO"
Dans Ruby, il existe UN SEUL framework d'application web, c'est donc le seul framework annoncé pour cette langue.
Python en a eu plusieurs depuis sa création, pour n'en nommer que quelques-uns: Zope, Twisted, Django, TurboGears (il est lui-même un mélange d'autres composants du framework), Pylons (un peu clone du framework Rails), etc. Aucun d'entre eux n'est supporté à l'échelle de la communauté python en tant que "THE one to use", donc toute la "vague de fond" est répartie sur plusieurs projets.
Rails a la taille de la communauté uniquement, ou du moins dans la grande majorité, à cause de Rails.
Python et Ruby sont parfaitement capables de faire le travail en tant que cadre d'applications Web. Utilisez celui que VOUS (et votre équipe de développement potentiel) aimez et sur lequel vous pouvez vous aligner.
la source