skwtch a écrit 1 commentaire

  • [^] # Re: Python vs Ruby

    Posté par  . En réponse à la dépêche Entretien avec les développeurs Python francophones. Évalué à 5.

    J'adore Python, Ruby, Javascript, Lua, Perl 5 et 6.

    Pour des raisons différentes (support, intégration, communautés, librairies/frameworks, expressivité, fonctionnalités, sûreté, performances, documentation etc).

    Je pourrais argumenter pour ou contre chacun des langages de script en fonction du contexte, de l'humeur... Je n'ai pas rafraichi mes connaissances sur Python 3 depuis un certain temps, mais je suis effaré quand je vois des assertions du genre :

    « Je pense que [Perl 6] c'est le même langage »

    « En tout cas, Perl 6 ressemble de plus en plus à Python »

    « Je pense pareil que pour Python vs Perl : c'est le même langage »

    Le tronc commun est évidemment très large. Mais deux différences de haut-niveau me viennent à l'esprit : le multiple dispatch, et les règles grammaticales.

    À quoi ça sert ? À éviter pas mal de design patterns (visiteur, interpréteur/DSL) et d'anti-patterns (sur-objectification, copier/coller). Il est très dur d'y renoncer quand on les connait (et c'est le problème). Idem pour la myriade d'opérateurs, les jonctions, les appels d'ensemble : ces fonctionnalités compliquent obligatoirement la syntaxe Perl 6, mais elles sont facultatives, c'est un pari sur l'intelligence des développeurs, leur capacité à apprendre sur le long terme. Perl 6 reste évidemment plus compliqué en mode babillage que Python 3 qui est un havre de pureté en comparaison, fait pour attirer le plus grand nombre.

    Python 3 peut donc se consoler avec la syntaxe et son vernis industriel. Mais pour profiter des mêmes fonctionnalités (qui sont parfois utiles), il doit passer par des extensions et du code surchargé avec des constructions un peu simplistes et hasardeuses (chaine littérale, décorateurs...) qui sont aussi discutables en termes de maintenance/extensibilité. Ruby contourne ça avec une analyse syntaxique plus fine et plus flexible et plus de dynamisme.

    En Perl 6, le modèle objet et les contraintes de typage sont très abouties. Ce qui peut être avantageux en termes de productivité et de sécurité. Les autres langages dynamiques exigent théoriquement d'écrire plus de tests unitaires, et de communiquer davantage par des canaux alternatifs (doc, mails, etc).

    Python est un excellent langage, opérationnellement dans la moyenne, et qui mérite d'exister. Pour l'aider à progresser, il serait plus constructif de le comparer à Ruby plutôt qu'à Perl, au nom de ses principes fondamentaux plus proches (clarté, simplicité). Il faut comparer les interpréteurs/compilateurs Python à ceux de Lua (ou de JavaScript) en termes d'implémentation et de performances. Et si on veut comparer sérieusement Python 3 à Perl 6 il faut faire attention. Sémantiquement, le combat n'est pas joué et attaquer Perl 6 sur la syntaxe, c'est un peu comme dire « l'anglais c'est mieux que le chinois », ça me paraît pas très objectif et... on en reparlera peut-être dans 10 ans ;).