Concernant le temps de compilation, bien sûr c'est long.Mais est-ce que c'est plus long que d'écrire un milliard de tests ou de planter après 2h d'éxécution pour pallier à l'absence de la phase de compilation (genre se tromper sur l'objet que tu passe à une méthode, détecter à 98% par le compilateur, jolie execption à l'éxecution sinon :))
C'est un faux problème. Effectivement, le compilateur C++/Java va refuser de compiler si on n'utilise pas les bons types. Par contre, les bugs « après 2h d'exécution » existent également en C++ et Java. Le compilateur n'est en rien une garantie que le programme ne va jamais planter. Les tests sont également nécessaires en C++ et Java pour garantir le bon fonctionnement du programme (on teste les cas qui marchent et on teste qu'une erreur est levée pour les cas invalides).
Je pense qu'un compilateur rassure les développeurs : si je me trompe, le compilateur va détecter mes erreurs. Or seuls un petit nombre d'erreurs sont détectées : les fuites de mémoire, lecture n'importe où en mémoire, faille de sécurité et autres ne sont pas détectées par le compilateur vu que les erreurs ne peuvent être détectées qu'à la compilation ou par une lecture attentive du code source.
L'absence de type est une force de Python : le duck typing permet d'écrire un algorithme générique à moindre frais : temps de compilation (en C++, il faut recompiler la fonction pour chaque combinaison de types) et code concis (pas besoin des horribles templates mégaverbeux de C++).
Note : pylint, pychecker et pyflakes comblent partiellement le manque de « compilateur » en Python (en réalité, Python est un compilateur : code source => bytecode Python). Python 3 autorise maintenant la déclaration des types mais ils ne sont pas validés, c'est juste informatif. Je pense qu'un drogué de C++/Java va écrire un outil pour valider les types ;-)
[^] # Re: Critique
Posté par Victor STINNER (site web personnel) . En réponse au journal Explorez les richesses du langage Python. Évalué à 2.
C'est un faux problème. Effectivement, le compilateur C++/Java va refuser de compiler si on n'utilise pas les bons types. Par contre, les bugs « après 2h d'exécution » existent également en C++ et Java. Le compilateur n'est en rien une garantie que le programme ne va jamais planter. Les tests sont également nécessaires en C++ et Java pour garantir le bon fonctionnement du programme (on teste les cas qui marchent et on teste qu'une erreur est levée pour les cas invalides).
Je pense qu'un compilateur rassure les développeurs : si je me trompe, le compilateur va détecter mes erreurs. Or seuls un petit nombre d'erreurs sont détectées : les fuites de mémoire, lecture n'importe où en mémoire, faille de sécurité et autres ne sont pas détectées par le compilateur vu que les erreurs ne peuvent être détectées qu'à la compilation ou par une lecture attentive du code source.
L'absence de type est une force de Python : le duck typing permet d'écrire un algorithme générique à moindre frais : temps de compilation (en C++, il faut recompiler la fonction pour chaque combinaison de types) et code concis (pas besoin des horribles templates mégaverbeux de C++).
Note : pylint, pychecker et pyflakes comblent partiellement le manque de « compilateur » en Python (en réalité, Python est un compilateur : code source => bytecode Python). Python 3 autorise maintenant la déclaration des types mais ils ne sont pas validés, c'est juste informatif. Je pense qu'un drogué de C++/Java va écrire un outil pour valider les types ;-)