Question S'il vous plaît conseiller sur Ruby vs Python, pour quelqu'un qui aime beaucoup LISP


Je suis un développeur C ++, je me lance lentement dans le développement Web. J'aime beaucoup LISP mais je n'aime pas AllegroCL et les web-frameworks disponibles pour LISP. Je recherche plus de liberté et la capacité de faire des hacks cool au niveau de la langue. Je ne considère pas les onglets comme un crime contre nature.

Lequel est le plus proche de LISP: Python ou Ruby?

Je ne peux pas sembler être en mesure de choisir entre Python et Ruby: ils semblent très similaires mais apparemment Ruby est plus fonctionnel et orienté objet, ce qui est une bonne chose, tandis que Python ressemble plus à Perl: un langage de script simple. Ai-je la bonne impression?

PS - Cela peut sembler un appât de flamme mais ce n'est pas vraiment, j'essaie juste de ne pas devenir fou de la part d'OCD pour passer de RoR à Python / Django et retour.


20
2018-01-01 17:12


origine


Réponses:


Je vais avec Ruby. Il a toutes sortes de métaprogrammation et de piratage de canards qui le rendent vraiment facile à étendre. Les fonctionnalités telles que les blocs peuvent ne pas sembler beaucoup au début, mais elles offrent une syntaxe très propre si vous les utilisez correctement. Les classes ouvertes peuvent être le débogage de l'enfer si vous les défoncez, mais si vous êtes un programmeur responsable, vous pouvez faire des choses comme 2.days.from_now (exemple de Rails) très facilement (Python peut le faire aussi, je pense, mais avec un peu plus de douleur)

PS: Check out "Pourquoi Ruby est un LISP acceptable".


25
2018-01-01 17:24



Peter Norvig, un célèbre et grand lisier, converti en Python. Il a écrit l'article Python pour les programmeurs Lisp, que vous pourriez trouver intéressant avec sa comparaison détaillée des fonctionnalités.

Python ressemble à un pseudo-code exécutable. C'est facile à prendre en main, et souvent votre intuition fonctionnera. Python vous permet de mettre facilement vos idées en code.

Maintenant, pour le développement Web, Python peut sembler une option plus dispersée que Ruby, avec la pléthore de frameworks Web Python disponibles. Cependant, en général, Python est un langage très intéressant et utile à connaître. Comme les niches de Ruby et Python se chevauchent, je suis d’accord avec Kiv pour dire que c’est en partie une question de goût personnel.


31
2018-01-01 17:40



Devils Advocate: Who Cares?

Ce sont tous deux de bons systèmes et ont un écosystème de bons cadres Web et de communautés de développeurs actifs. Je suppose que vous définissez votre décision en fonction des mauvais critères. La question semble être que vous vous demandez si vous rencontrerez des problèmes de mise en œuvre ou d’autres difficultés en choisissant l’une sur l’autre. Ne pas 

Ceci est similaire aux décisions Java / .Net. Il peut y avoir des raisons impérieuses dans un cas spécifique, mais des facteurs non contraignants, tels que la familiarité de l'architecte avec la plate-forme, sont des indicateurs beaucoup plus probants du succès d'un projet.

J'admets que j'ai utilisé Python beaucoup plus que Ruby, mais je ne dirais pas que je préfère les deux sauf la familiarité. J'ai utilisé Python de façon intermittente depuis 1998 et j'aime la Smalltalkish-ness de Ruby car j'ai utilisé Smalltalk brièvement il y a environ 15 ans. Ils font tous les deux des choses légèrement différentes.

Je voudrais certaines fonctionnalités de Ruby (ou Smalltalk d'ailleurs), mais Python ne fonctionne pas de cette façon. Au lieu de cela, il a d'autres caractéristiques et les idiomes de langage sont légèrement différents de Ruby ou Smalltalk. Nombreuses du autre  affiches ont lié aux articles qui comparent les deux.

Si vous vous inquiétez de Rails vs Django, cela signifie que vous recherchez une plate-forme pour les applications Web. Les deux langues ont un bon support des outils et une communauté de développeurs actifs. Django semble être le vainqueur du framework web Python, tandis que Rails semble être en train de «franchir le fossé» et d’y amener Ruby. Les deux systèmes sont relativement matures et ont fait leurs preuves pour des volumes de trafic respectables.

ProTip: La présence de guerres de religion est un bon indicateur qu’aucune des parties n’a un argument convaincant.

Donc, je vais jouer le rôle de défenseur du diable et dire que s'inquiéter du choix est inutile. Les langues ont des avantages et des inconvénients les unes par rapport aux autres, mais rien de ce qui pourrait être considéré comme convaincant dans le cas général. Fretting sur les mérites détaillés d'une plate-forme ou de l'autre encadre mal la décision.

Choisissez-en un et utilisez-le. Vous pourrez construire des systèmes efficacement avec les deux.


17
2018-01-01 19:23



En tant que "Rubyist", je suis d’accord avec Kiv. Les deux langues offrent toutes deux une bonne marge de manœuvre en ce qui concerne les paradigmes de programmation, mais elles présentent également des avantages / inconvénients. Je pense que les compromis que vous faites dans les deux sens concernent beaucoup votre propre style de programmation et vos goûts.

Personnellement, je pense que Ruby peut lire plus comme un pseudo-code que Python. Tout d'abord, Python possède des espaces blancs qui, tout en étant élégants aux yeux de beaucoup, n'ont pas tendance à entrer dans l'équation lors de l'écriture d'un pseudo-code. De plus, la syntaxe de Ruby est assez flexible. Cette flexibilité provoque beaucoup de bizarreries qui peuvent induire en erreur, mais elle permet aussi d’exprimer du code assez expressif et joli à regarder.

Enfin, je dirais vraiment que Ruby me semble plus Perl-Ish. C'est en partie parce que je suis beaucoup plus à l'aise avec cela, donc je peux pirater des scripts assez rapidement. Une grande partie de la syntaxe de Ruby a été empruntée à Perl, et je n'ai pas vu beaucoup de code Python qui soit similaire (même si, encore une fois, j'ai peu d'expérience avec Python).

Selon l’approche de la programmation Web que vous souhaitez suivre, je pense que les types de frameworks Web disponibles dans chaque langue pourraient également être un facteur déterminant. Je dirais les essayer tous les deux. Vous pouvez acquérir une connaissance pratique de chacun d’eux dans l’après-midi, et bien que vous n’écriviez pas de superbes Ruby ou Python, vous pouvez probablement vous faire une idée de chacun et décider lequel vous préférez.

Mettre à jour: Je pense que votre question devrait en fait être deux discussions distinctes: une avec Ruby, une avec Python. Les comparaisons sont moins importantes car vous commencez à débattre des mérites des différences, par opposition à la langue qui vous conviendra le mieux. Si vous avez des questions à propos de Ruby, je serais plus qu'heureux de répondre de mon mieux.


12
2018-01-01 18:00



Ruby et Python sont tous deux assez éloignés des traditions Lisp des données immuables, des programmes en tant que données et des macros. Mais Ruby est presque un clone de Smalltalk (et j'espère qu'il deviendra plus proche de Smalltalk car le format Perlish est obsolète), et Smalltalk, comme Lisp, est un langage qui amène une idée à l'extrême. Basé sur votre désir de faire cool hacks sur le niveau de langue Je vais aller avec Ruby, car il hérite beaucoup de la mentalité de métaprogrammation de Smalltalk, et cet état d'esprit est connecté à la tradition Lisp.


8
2018-01-01 19:01



Alex Martelli donne un bonne analyse du sujet. C'est un peu daté maintenant, mais je suis d'accord avec l'essentiel: Python et Ruby sont deux manières différentes d'implémenter la même chose. Bien sûr, il y a des choses que vous pouvez faire dans Ruby que vous ne pouvez pas faire en Python. Et la syntaxe de Python est certainement meilleure que celle de Ruby. Mais quand on y arrive, il n’ya pas beaucoup de raisons objectives et scientifiques de préférer l’une à l’autre.

Une chose commune que vous entendrez est la suivante: la plate-forme est plus importante que le langage et Python a une meilleure plate-forme que Ruby (cet argument fonctionne dans les deux sens, donc ne me vote pas, tous vous rubyists). Et il y a de la vérité à cela. Malheureusement, ce n'est pas très pertinent. Si vous n'aimez pas la plate-forme pour les deux langues, il existe des implémentations à la fois en Java et en .Net, vous pouvez donc les utiliser si vous avez des préoccupations concernant la plate-forme.


5
2018-01-01 19:03



Je recommande également l'article de Peter Norvig que namin a posté. Si vous voulez regarder la programmation fonctionnelle en Python, consultez la functools module dans la bibliothèque standard.

Il y a aussi beaucoup de place pour pirater en Python; les variables privées sont par convention et non appliquées, vous pouvez donc contourner l'état interne des objets si vous en avez envie. Cela n'est généralement pas nécessaire.

Ruby et Python sont tous deux très orientés objet et supportent la programmation fonctionnelle; Je ne dirais pas que l'un ou l'autre est clairement supérieur à votre projet; c'est en partie une question de goût personnel.


3
2018-01-01 17:42



Je suis un pythonista; Cependant, en fonction de vos besoins, en particulier des "hacks sympas au niveau de la langue", je vous suggère de travailler sur Ruby. Ruby est plus flexible dans Perl et vous pouvez faire beaucoup de hacks. Python est ciblé vers lisibilité, ce qui est une très bonne chose, et les hacks linguistiques sont généralement un peu mal vu. Les types de base de Ruby peuvent être modifiés de manière pirate, contrairement aux langages prototypes, tandis que les types de base de Python sont plus adaptés au sous-classement.

En passant, j'ajouterais une correction mineure: Ruby et Python sont très, très orientés objet, et ni l'un ni l'autre ne sont destinés à être utilisés pour des scripts rapides et sales comme Perl. Parmi les deux, Ruby est syntaxiquement plus proche de Perl que de Python.


3
2018-01-01 19:56



Si vous avez besoin du support Unicode, n'oubliez pas de vérifier sa compatibilité. AFAIK, le support de Python pour Unicode est meilleur que celui de Ruby, surtout depuis Python 3.0. D'autre part, Python 3 manque encore de certains paquets et de bibliothèques tierces, ce qui pourrait jouer contre.


1
2018-01-01 19:06