2012-03-30 6 views
7

Estoy trabajando en una API de documentación para Python. Estoy llamando al Python Docs, y he notado que mi suite de análisis estático casi no puede acceder a todas las incorporaciones, ya que son casi exclusivamente módulos C. Hasta donde puedo recordar, no puedo pensar en ninguna excepción a esta regla.¿Los complementos de python siempre son extensiones C (incluso en PyPy)?

La primera parte de mi pregunta es simple, ¿ser un módulo incorporado presupone ser una extensión C en CPython?

Asumiendo que este podría ser el caso, compilé un nuevo tiempo de ejecución pypy y traté de usar mi proyecto en contra de los complementos de pypy. Me sorprendió descubrir que esto tampoco funcionó.

¿Por qué los módulos PyPy no están disponibles en objetos AST si son Python puros? ¿Es este un efecto secundario de que PyPy se aloje en un JIT?

+0

Como regla general, las operaciones primitivas y los tipos en un lenguaje de alto nivel tienen que "integrarse" a la implementación del lenguaje, porque si no se proporcionan mágicamente de alguna manera no habría forma de implementarlos dentro del alto nivel idioma. p.ej. Intenta implementar 'int' en Python sin usar el soporte integrado. – Ben

Respuesta

4

PyPy tiene dos partes: el intérprete de Python y la cadena de herramientas de traducción.

La cadena de herramientas de traducción traduce/"compila" el intérprete de RPython en código máquina.

Así que aunque PyPy está escrito en un lenguaje que es un subconjunto de Python, no es Python cuando lo usa.

Debe leer compiler section of the PyPy Parser docs y this blog post que describen que las características de AST en PyPy reflejan aquellas en CPython.

+0

Eso ayuda a responder la 2da pregunta, ¡gracias! – mvanveen

+2

@mvanveen ¿Cuál es su primera pregunta exactamente? ¿Están implementadas todas las funciones y tipos de CPython en C (sí), o todos los módulos de biblioteca estándar incluidos con CPython implementados en C (no, muchos están implementados en Python)? Porque no estoy seguro de lo que quiere decir con "módulo incorporado". – agf

+0

El primero. ¡Gracias por la respuesta! – mvanveen

Cuestiones relacionadas