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å.

How to help