2012-03-30 10 views
7

Sto lavorando su un'API di documentazione per Python chiamo Python Docs e ho notato che quasi tutti i built-in non sono accessibili dalla mia suite di analisi statiche, perché sono quasi esclusivamente moduli C. Per quanto posso ricordare, non posso pensare ad alcuna eccezione a questa regola.I python sono incorporati sempre con estensioni C (anche su PyPy)?

La prima parte della mia domanda è semplicemente, l'essere un modulo predefinito presuppone di essere un'estensione C in CPython?

Supponendo che questo potrebbe essere il caso, ho compilato un nuovo runtime pypy e ho provato a usare il mio progetto contro con i built-in di pypy. Sono stato sorpreso di scoprire che questo non ha funzionato neanche.

Perché i moduli PyPy non sono oggetti AST disponibili se sono in puro Python? Si tratta di un effetto collaterale di PyPy ospitato su un JIT?

+0

Come regola generale, le operazioni e i tipi primitivi in ​​un linguaggio di alto livello devono essere "integrati" nell'implementazione del linguaggio, perché se non fossero forniti magicamente in qualche modo non ci sarebbe modo di implementarli all'interno del livello più alto linguaggio. per esempio. Prova a implementare 'int' in Python senza utilizzare il supporto integrato. – Ben

risposta

4

PyPy è costituito da due parti: l'interprete Python e la toolchain di traduzione.

La toolchain di traduzione traduce/"compila" l'interprete da RPython in codice macchina.

Quindi sebbene PyPy sia scritto in un linguaggio che è un sottoinsieme di Python, non è Python quando lo si usa.

Si dovrebbe leggere il compiler section of the PyPy Parser docs e this blog post che descrive che le funzioni AST in PyPy rispecchiano quelle in CPython.

+0

Ciò aiuta a rispondere alla seconda domanda, grazie! – mvanveen

+2

@mvanveen Qual è esattamente la tua prima domanda - tutte le funzioni e i tipi di CPython sono implementati in C (si), oppure tutti i moduli di libreria standard inclusi in CPython implementati in C (no, molti sono implementati in Python)? Perché non sono sicuro di cosa intendi per "modulo integrato". – agf

+0

Il primo. Grazie per la risposta! – mvanveen

Problemi correlati