Sealang ist ein verbesserter Satz von Python-Anbindungen für libclang
.
Die Upstream-Maintainer von libclang
waren nicht besonders
auf Patches reagiert, die Probleme wie die Kompatibilität mit Python 3 ansprechen,
und die erheblichen Lücken in der API (wie das Extrahieren von Literalen
und Operatoren).
Dieses Paket ist ein Fork der offiziellen Python-Bindungen für libclang
,
gepatcht, um diese Probleme zu beheben.
Wie es funktioniert
Sealang ist ein ziemlich fieser Hack. libclang
ist ein Satz von C Bindungen zu einer
C++ API; Python ctypes
werden dann verwendet, um die C API zu umhüllen. Während jedoch
die C++-API recht umfangreich ist, ist libclang
weniger umfangreich.
Sealang überbrückt diese Lücke, indem es C-Wrapper um die C++-Aufrufe die die nützlichen Funktionen bereitstellen. Diese Bibliothek von C-Funktionen wird für die Auslieferung als Python C-Modul verpackt - dieses C-Modul enthält keine offengelegten Python-Objekte oder -Methoden, aber da es sich um ein Modul ist, werden die zugrunde liegenden kompilierten sealang.so Datei leicht zu finden. ctypes werden dann verwendet, um die sealang Wrapper-Funktionen;
Intern reproduziert Sealang einige kleinere Teile der libclang
API;
dies sind Methoden (wie die Methoden zur Erzeugung und Manipulation von Zeichenketten)
die nicht als Symbole für die Verwendung durch Dritte verfügbar sind.
All diese Funktionen sind potenziell ein Kandidat für die Weitergabe an an libclang zu übergeben.
Beziehung zu Clang
Dieses Projekt zielt darauf ab, das zu spiegeln, was derzeit in den Python
Bindungen an libclang
verfügbar sind. Die Versionsnummer für dieses Projekt ergibt sich
von der Version und der SVN-Revision des offiziellen Clang-Repositorys.
Alle Änderungen, die Upstream an libclang
vorgenommen werden, werden hier gespiegelt; alle
Änderungen, die hier gemacht werden, werden, wenn möglich, in den Upstream von
libclang
übertragen.
Entwicklungsstand
Dieses Projekt war ein Experiment, das zur Unterstützung von Seasnake. Da Seasnake aufgegeben wurde, wurde auch dieses Projekt eingestellt.