75 votes

Je veux commencer à lire le code source de Python. Où dois-je commencer

Je veux commencer à lire le code source de Python.

Mon expérience,

Je connais très bien Python et Java. Je connais d'autres langages à différents niveaux de compétence, mais pas particulièrement bien le C/C+/. J'ai étudié le C à l'université, mais je n'ai jamais programmé professionnellement dans ce langage.

Mes raisons pour lire ce code.

  1. Comprendre comment python fonctionne sous le capot.
  2. Apprenez mieux le C.

1 est plus important pour moi que 2.

comment dois-je m'y prendre ?

45voto

Ned Batchelder Points 128913

Commencez par vous familiariser avec l'API Python C. Il s'agit d'une API vaste et riche, et le code source Python l'utilise naturellement un peu partout. Vous n'irez pas très loin dans le code source Python avant de devoir comprendre ce que signifie Py_INCREF et ainsi de suite.

J'ai fait une présentation à Pycon pour expliquer l'API : Une excursion tourbillonnante à travers les extensions C de Python qui pourraient vous être utiles. Les extensions C utilisent la même API que le code Python lui-même.

22voto

Edan Maor Points 4491

Tout d'abord, si vous êtes surtout intéressé par le 1, je commencerais par lire les sources Python des différents modules (et ne pas sauter directement au C). Chaque fois que je me suis retrouvé à lire le source de certains modules, j'ai toujours appris de nouvelles choses sur la programmation Python.

Deuxièmement, si vous essayez de mieux apprendre le C, je vous suggérerais personnellement quelque chose de complètement différent : programmez dedans. La simple lecture statique du code source est no ne vous fera pas mieux comprendre le langage C (ou du moins, c'est une approche limitée ; cela peut vous faire progresser un peu, mais la lecture d'une source ne peut pas tout vous apporter).

Après avoir programmé au moins un projet de taille modérée en C, puis Je commencerais par regarder les sources de Python. C'est vraiment le seul moyen de mieux connaître le C, et je pense vraiment que lire les sources C de Python sans bien connaître le C ne vous mènera pas très loin.

Une idée pour un projet C

En fait, voici une idée de projet en C : écrire un interpréteur Python en C. Évidemment, il ne sera pas du tout complet, et c'est un projet assez difficile, mais si vous vous concentrez seulement sur certaines parties du langage, je pense que c'est une bonne idée.

Non seulement il vous aidera à apprendre le C, mais il vous aidera aussi à mieux comprendre Python. avant en regardant la source : vous devrez avoir une compréhension plus approfondie d'une lot de choses en Python, vous comprendrez les compromis de conception dans le fonctionnement de Python, etc.

Ensuite, lorsque vous lirez enfin le code de Python, non seulement vous comprendrez pourquoi certaines choses fonctionnent de cette façon, mais vous apprendrez probablement beaucoup de techniques C vraiment cool qui résoudront les problèmes que vous aviez.

15voto

Lothar Points 4740

1) Assurez-vous d'abord que vous pouvez construire votre propre Python et l'exécuter dans un débogueur. Ainsi, vous pouvez non seulement ajouter des expressions d'impression, mais aussi vous arrêter à certains endroits et suivre le flux du code. Si vous avez des outils qui vous permettent de tracer les appels de fonction, parfait, vous en aurez besoin.

2) Commencez par le fichier qui implémente les types de données. Ils sont très faciles à comprendre et vous améliorez vos compétences en langage C tout en lisant le code.

3) Réaliser des diagrammes UML - de simples outils d'aide au dessin comme Argo UML ou MS Visio peuvent vous aider ici. Notez le flux de code.

4) Lisez le code de démarrage de python. Voyez quoi et comment l'infrastructure de base est initialisée.

6) Ty doit comprendre le côté Python à 100% - même les détails de mise en œuvre les plus difficiles, ce qu'est un AST et ce que sont les méthodes liées et non liées et comment les mettre en œuvre. Lorsque vous aurez un modèle en tête de la façon dont vous écrirez un interprète Python, vous pourrez passer à l'étape finale.

7) Ecrivez une extension du débogueur avec l'API C du débogueur rapide fourni. Cela vous aidera à améliorer vos compétences en C.

8) Faites le dernier pas de maître et plongez dans le cœur du code de l'interpréteur. Ce code est même difficile à lire et à comprendre pour un programmeur C expérimenté. Lisez comment les expressions sont évaluées et comment les recherches de méthodes sont mises en cache, comment les cadres sont configurés pour les règles de scoping, etc. C'est difficile et complexe - en termes de complexité et de lignes de code.

9) Lancez Adobe Photoshop et créez un beau diplôme de "Master of Python" et mettez-le sur le mur de votre bureau.

12voto

ardsrk Points 1393

Télécharger le source depuis le site web de python. Supposons que vous ayez décompressé les sources dans un répertoire nommé Python-3.1.1. Je vous propose deux points de départ dans le code source de Python qui vous aideront à explorer le fonctionnement de Python sous le capot :

  • Examinez comment la machine virtuelle Python exécute le bytecode généré par l'interperteur. La VM Python se trouve dans le fichier nommé Python-3.1.1/Python/ceval.c. Le cœur de la VM est une boucle eval qui commence à la fonction PyEval_EvalFrameEx dans ceval.c. Lisez la source et les commentaires en ligne. Je suis sûr que vous l'apprécierez.

  • Une autre option consiste à examiner comment les types de données intégrés à Python, tels que les listes, les dictionnaires et les ensembles, sont mis en œuvre. Par exemple, les ensembles sont implémentés dans Python-3.1.1/Objects/setobject.c. Le répertoire Objects contient également des implémentations d'autres types de données.

J'espère que cela vous aidera.

Profitez-en !

5voto

Mizipzor Points 10952

La question est assez large, donc je pense que la meilleure réponse est de télécharger simplement l'application source python et faites-vous plaisir. Choisissez un module ou une section de Python que vous connaissez bien et vérifiez ce qui se cache sous le capot.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X