• # Python

    Posté par . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 1.

    Grand amateur de Python également (j'en fais tous les jours au boulot), j'ai également fait un peu de Ruby.

    Quelques critiques à propos de Ruby (je n'ai pas testé la version 1.9):
    - C'est très lent (mais cette critique semble tomber à l'eau avec la version 1.9). Il est vrai que la vitesse d'exécution n'est pas primordiale dans ce genre de langage (Perl, Python, Ruby, ...) ... mais il y a des limites.
    - Pas de support de l'Unicode, qui est pour moi _le_ plus gros problème de Ruby.
    - J'ai retrouvé beaucoup de truc que j'aimais pas en Perl (notamment les variables @, ...), le langage est un peu "fouilli".
    - Pas de multihéritage (mais on dirait que c'est le truc du moment à proscrire..)

    Quelques avantages de Python:
    - La librairie de base est bien plus fournie que celle de Ruby.
    - Langage clair, propre et simple, et surtout qui ne change pas à chaque version (à l'exception de Python 3000), comme en Perl ou PHP. Je suis presque sur qu'un programme écrit il y a 10 ans tourne sans modifications sur les WM actuelles.
    - La "communauté" Python met en place des petits "standard" (les PEP) légers comme DBAPI, WSGI, ...
    - "There is only one way to do it"

    Et puis on trouve vraiment d'excellentes libraires comme Pylons, SQLAlchemy, Genshi, ... on a vraiment plus de choix qu'en Ruby.

    Les principales critiques que j'entends toujours à propos de Python:
    - L'indentation: on aime ou on aime pas..
    - Il faut mettre "self" partout: oui, "explicit is better than implicit". Je trouve ça plus lisible d'accéder à une variable (ou méthode) de l'objet via "self.x" plutot que betement "x"
    - Il n'y a pas de support des variables privées: oui et non. On peut créer des variables à peu près privée avec __foo, mais la philosophie de Python est plutot "si vous ne voulez pas accéder à une variable privée, n'y accéder pas et puis c'est tout". De plus ce n'est, pour moi, pas le plus important en POO. Quand on regarde la majorité des programmes Java, on a en général un setVariable() et un getVariable() qui contiennent en général une ligne avec une assignation pour le premier et un return pour le 2ème .. De plus Python a un concept de "properties" (ala C#) qui permet de faire ça de manière élégante.

    Pour finir, je me demande aussi si Ruby aurait autant de succès aujourd'hui si Ruby on Rails n'avait pas existé (... d'ailleurs je me demande toujours comment ce framework a autant de succès tant il est inintéressant et mal foutu ...)