Quiero comenzar a leer el código fuente de Python. Donde debería empezar

Quiero comenzar a leer el código fuente de Python.

Mi experiencia,

Conozco Python y Java muy bien. Conozco algunos otros idiomas en varios niveles de competencia, pero ninguno de C / C + / particularmente bien. Estudié C en la universidad, pero nunca lo programé profesionalmente.

Mis razones para leer este código.

  1. Entiende cómo funciona la python bajo el capó.
  2. Aprende C mejor.

1 es más importante para mí que 2.

¿Cómo debo hacer esto?

Comienza por aprender acerca de la API de Python C. Es una API grande y rica, y la fuente de Python, naturalmente, la utiliza en todo el lugar. No irás muy lejos en el código fuente de Python antes de tener que entender lo que significa Py_INCREF y así sucesivamente.

Hice una presentación en Pycon explicando la API: Una Excursión Torbellino a través de las Extensiones Python C que podrían resultarle útiles. Las extensiones C utilizan la misma API que el propio código de Python.

Primero, si está más interesado en 1, empezaría por leer la fuente de varios módulos de Python (y no saltaré directamente a la C). Cada vez que me encontraba leyendo la fuente de algunos módulos, siempre aprendía cosas nuevas sobre la progtwigción de Python.

Segundo, si estás tratando de aprender mejor C, personalmente sugeriría algo completamente diferente: progtwig en él. El solo hecho de leer el código fuente de manera estática no hará que entiendas mejor a C (o al menos es un enfoque limitado; podría hacerte un poco mejor, pero solo hay tanto que la fuente de lectura te dará).

Después de progtwigr al menos un proyecto de tamaño moderado en C, entonces comenzaría a buscar en la fuente de Python. Esa es realmente la única forma de conocer mejor a C, y realmente creo que leer la fuente C de Python sin saber C bien no te llevará muy lejos.

Una idea para un proyecto de C

De hecho, aquí hay una idea para un proyecto de C: escribir un intérprete de Python en C. Obviamente, no va a ser ni siquiera cerca de completarse, y este es un proyecto bastante difícil, pero si solo te centras en algunas partes del lenguaje, Creo que es una buena idea.

No solo te ayudará a aprender C, sino que te ayudará a entender mejor Python incluso antes de mirar la fuente: tendrás que tener un conocimiento más profundo de muchas cosas en Python, también comprenderás las ventajas y desventajas del diseño. cómo funciona Python, etc.

Entonces, cuando finalmente lea el código de Python, no solo entenderá por qué algunas cosas funcionan de esa manera, sino que probablemente aprenderá muchas técnicas de C realmente geniales que resuelven los problemas que tuvo.

1) Primero asegúrese de que puede construir su propio Python y ejecutarlo en un depurador. Por lo tanto, no solo puede agregar expresiones de impresión, sino también romper puntos y seguir el flujo de código. Si tiene herramientas que le permiten rastrear llamadas a funciones, perfecto, lo necesitará.

2) Comience con el archivo que implementa los tipos de datos. Son muy fáciles de entender y usted mejora sus habilidades de lenguaje en lenguaje C mientras lee el código.

3) Cree diagtwigs UML: las herramientas simples de ayuda de dibujo como Argo UML o MS Visio pueden ayudarlo aquí. Anote el flujo de código.

4) Lee el código de inicio para python. Ver qué y cómo se inicializa la infraestructura básica.

6) Comprenda el 100% del lado de Python, incluso los detalles más difíciles de la implementación, qué es un AST y qué son los métodos enlazados y no enlazados, y cómo los implementaría. Cuando tenga un modelo en mente cómo escribiría un intérprete de Python, puede ir al paso maestro final.

7) Escriba una extensión de depurador con la API C del depurador rápido que se proporciona. Esto te ayuda a mejorar tus habilidades en C

8) Da el último paso maestro y sumérgete en el corazón del código del intérprete. Esto es incluso difícil de leer y entender para un progtwigdor en C bien calificado. Lea cómo se evalúan las expresiones y cómo se buscan las búsquedas de métodos, se configuran los marcos para las reglas de scope, etc. Es difícil y complejo, en términos de complejidad y líneas de código.

9) Inicie Adobe Photoshop y cree un bonito diploma de “Maestro de Python” y colóquelo en la pared de su oficina.

Descarga la fuente del sitio web de Python. Digamos que descomprimiste la fuente en un directorio llamado Python-3.1.1. Te sugiero dos puntos de partida dentro del código fuente de Python que te ayudarán a explorar cómo funciona Python bajo el capó:

  • Examine cómo la máquina virtual de Python ejecuta el código de bytes generado desde el intérprete. La máquina virtual de Python se encuentra en el archivo denominado Python-3.1.1 / Python / ceval.c. El núcleo de la VM es un ciclo de evaluación que comienza en la función PyEval_EvalFrameEx en ceval.c. Lea la fuente y los comentarios en línea. Estoy seguro de que lo disfrutarías.

  • Otra opción es observar cómo se implementan los tipos de datos de Python incorporados, como listas, diccionarios y conjuntos. Por ejemplo, los conjuntos se implementan en Python-3.1.1 / Objects / setobject.c. El directorio de Objetos también contiene implementaciones de otros tipos de datos.

La pregunta es bastante amplia, así que supongo que la mejor respuesta es simplemente descargar la fuente de Python y volverte loco. Elija un módulo o sección de python que conozca bien y verifique qué hay debajo del capó.