Dans le tutoriel de Python, on peut lire que l'implémentation originale de Python est en C;
D'autre part, l'implémentation Python, écrite en C, (...)
Je suis très curieux de savoir pourquoi Python a été écrit en C et non en C ++.
J'aimerais connaître le raisonnement derrière cette décision et la réponse devrait être étayée par des références historiques (et non basées sur des opinions).
python
c++
history
implementations
Piotr Dobrogost
la source
la source
Réponses:
D'après tout ce que j'ai vu, c'est une combinaison de raisons pratiques et historiques. La raison (principalement) historique est que CPython 1.0 est sorti en 1989. À cette époque, C n’était que récemment normalisé. C ++ était presque inconnu et décidément non portable, car presque personne n'avait de compilateur C ++.
Bien que le C ++ soit beaucoup plus répandu et facilement disponible aujourd'hui, il faudrait encore beaucoup de travail pour réécrire CPython dans le sous-ensemble de C compatible avec C ++. En soi, ce travail apporterait peu ou pas d'avantages réels.
C'est un peu comme le blog de Joel sur le fait de recommencer et de réécrire complètement la pire erreur qu'une société de logiciels puisse commettre. Je contrerais cela en soulignant la conversion de Microsoft du noyau Windows 3.0 vers le noyau Windows NT et la conversion d'Apple de MacOS 9 à Mac OS / X. Aucune des deux n’a tué la société - mais c’était définitivement des projets de grande envergure, coûteux et à long terme. Les deux points soulignent également un élément essentiel à la réussite: maintenir les deux bases de code assez longtemps pour que la plupart des utilisateurs puissent passer à leur guise à la nouvelle base de code, en fonction des avantages (au moins perçus).
Pour une équipe de développement de la taille de Python, ce type de changement est beaucoup plus difficile. Même le passage de Python 2 à 3 a demandé pas mal de travail et a nécessité un chevauchement similaire. Au moins dans ce cas, toutefois, les modifications ont des avantages directs, mais une réécriture en C ++ (par elle-même) n’apporterait pas (du moins immédiatement).
Le discours de Linus Torvalds contre C ++ a été évoqué, je le mentionnerai donc également. Rien de ce que j'ai vu de Guido n'indique qu'il ait ce genre de sentiments négatifs et forts envers le C ++. Le pire que je l’ai vu dire est que l’ enseignement de C ++ est souvent un désastre - mais il a immédiatement ajouté que c’était en grande partie parce que les enseignants ne connaissaient pas / ne connaissaient pas le C ++.
Je pense également que s'il est possible de convertir beaucoup de code C en C ++ avec une relative relative facilité, obtenir de réels avantages du C ++ nécessite non seulement un peu plus de réécriture que cela, mais nécessite également une rééducation substantielle de la plupart des développeurs impliqués. Le C ++ le mieux écrit est très différent du C bien écrit pour faire les mêmes choses. Ce n’est pas seulement une question de changement
malloc
versnew
etprintf
verscout
, par un effort d'imagination.la source
Je pense que la raison pour laquelle il a été écrit à l' origine dans la norme ANSI C89 est tout simplement parce qu'à l'époque, le C ++ n'était tout simplement pas un choix viable, avec des incompatibilités entre différents compilateurs et autres. Je veux dire, il a fallu attendre 2005 pour arriver à une spécification ABI permettant au code compilé avec un compilateur d'appeler du code compilé avec un compilateur différent.
La question la plus intéressante est de savoir pourquoi il est toujours écrit en C89.
Et il y a une réponse surprenante: parce que les gens utilisent réellement Python sur des plates-formes pour lesquelles il n'existe ni compilateur C ++ ni C99! Lorsque les optimisations interpréteur-code threadé Forth inspirés ont été fusionnés, il y avait une énorme discussion à ce sujet, parce que le code (nécessairement) utilisé calculé
goto
qui ne fait pas partie de C89. Apparemment, il était à craindre que cette fonctionnalité ne soit pas disponible sur certaines des plateformes sur lesquelles Python est actuellement utilisé.La même chose s’est produite avec Unladen Swallow, qui utilise LLVM, qui est écrit en C ++. Il a été clairement expliqué que la fusion de Unladen Swallow dans CPython impliquerait de pouvoir le compiler sans le compilateur JIT, car certaines plates-formes sur lesquelles les utilisateurs exécutent Python ne sont pas compilées par C ++.
Bien sûr, de nos jours, CPython n’est plus la seule implémentation de Python. Il existe PyPy, qui est écrit en RPython (un sous-ensemble de types statiques de Python), Jython en Java, IronPython en C #, Pynie en NQP et PIR, etc.
la source
Une meilleure question pourrait être: "Pourquoi Python n'est-il pas écrit en Python?"
Plus précisément, une fois que suffisamment de primitives pour les classes et les objets Python sont écrites en C, celles-ci peuvent être utilisées pour écrire le reste de l'interpréteur, vous ne gagnerez donc rien en utilisant C ++.
la source