Sealang è un insieme migliorato di binding Python per libclang
.
I manutentori upstream di `libclang' non sono stati particolarmente non sono stati particolarmente sensibili alle patch che affrontano problemi come la compatibilità con Python 3, e le significative omissioni nell'API (come l'estrazione di letterali e operatori). e gli operatori).
Questo pacchetto è un fork dei binding ufficiali di Python per libclang
,
con una patch che corregge questi problemi.
Come funziona
Sealang è un hack un po' particolare. libclang
è un insieme di collegamenti C a un'API C++.
API C++; i ctypes' di Python sono quindi usati per avvolgere l'API C. Tuttavia, mentre
l'API C++ è piuttosto ricca,
libclang` lo è meno.
Sealang colma questa lacuna fornendo dei wrapper C intorno alle chiamate C++ che forniscono le funzionalità utili. Questa libreria di funzioni C è come modulo C di Python per la consegna; questo modulo C non contiene oggetti o metodi Python esposti. non contiene oggetti o metodi Python* esposti, ma poiché si tratta di un modulo, la compilazione sottostante modulo, il sottostante compilato sealang.so è facile da trovare. I ctypes sono quindi usati per esporre il file funzioni wrapper di Sealang;
Internamente, Sealang riproduce alcune parti minori dell'API libclang
;
si tratta di metodi (come quelli per la creazione e la manipolazione delle stringhe)
che non sono esposti come simboli per l'uso da parte di terzi.
Tutte queste funzionalità sono potenzialmente candidate a essere passate a monte a libclang.
Relazione con Clang
Questo progetto ha l'obiettivo di rispecchiare ciò che è attualmente disponibile nei bindings Python
per libclang
. Il numero di versione di questo progetto è tratto
dalla versione e dalla revisione SVN del repository ufficiale di clang.
Qualsiasi modifica apportata a monte a libclang
verrà rispecchiata qui; qualsiasi
modifiche apportate qui saranno, ove possibile, spinte a monte a
libclang
.
Stato di sviluppo
Questo progetto è stato un esperimento sviluppato per supportare [Seasnake] (/project/attic/seasnake). Poiché Seasnake è stato abbandonato, anche questo progetto.