Sealang er et forbedret sæt Python-bindinger til libclang
.
Upstream-vedligeholderne af libclang
har ikke været specielt
lydhøre over for patches, der adresserer problemer som Python 3-kompatibilitet,
og de betydelige udeladelser i API'en (såsom udtrækning af bogstaver
og operatorer).
Denne pakke er en forgrening af de officielle Python-bindinger til libclang
,
opdateret for at rette disse problemer.
Sådan fungerer det
Sealang er lidt af et grimt hack. libclang
er et sæt C-bindinger til en
C++ API; Python ctypes
bruges derefter til at pakke C API'en ind. Men mens
C++ API'en er ret rig, er libclang
det i mindre grad.
Sealang bygger bro over dette hul ved at levere C-wrappers omkring de C++-kald der giver den nyttige funktionalitet. Dette bibliotek af C-funktioner er pakket ind som et Python C-modul til leveringsformål - dette C-modul indeholder ingen eksponerede Python-objekter eller -metoder, men fordi det er et modul, vil det underliggende kompilerede sealang.so-fil let at finde. ctypes bruges derefter til at eksponere sealang wrapper-funktioner;
Internt gengiver Sealang nogle mindre dele af libclang
-API'en;
Dette er metoder (som f.eks. metoder til oprettelse og manipulation af strenge)
der ikke er eksponeret som symboler til brug for tredjeparter.
Al denne funktionalitet er potentielt en kandidat til at blive sendt upstream til libclang.
Forholdet til Clang
Dette projekt har til formål at afspejle, hvad der i øjeblikket er tilgængeligt i Python
bindinger til libclang
. Versionsnummeret for dette projekt er hentet
fra versionen og SVN-revisionen af det officielle clang-repository.
Alle ændringer, der foretages opstrøms til libclang
, vil blive spejlet her; alle
ændringer foretaget her vil, hvor det er muligt, blive skubbet opstrøms til
libclang
.
Udviklingsstatus
Dette projekt var et eksperiment, der blev udviklet for at støtte Seasnake. Da Seasnake er blevet opgivet, er dette projekt det også.