Sealang est un ensemble amélioré de liens Python pour libclang
.
Les mainteneurs en amont de libclang
n'ont pas été particulièrement
particulièrement réceptifs aux correctifs qui traitent de questions telles que la compatibilité avec Python 3,
et les omissions significatives dans l'API (comme l'extraction de littéraux et d'opérateurs).
et les opérateurs).
Ce paquet est un fork des bindings officiels de Python pour libclang
,
patché pour corriger ces problèmes.
Comment ça marche
Sealang est un peu un méchant hack. libclang
est un ensemble de liens C vers une API C++.
C++ ; les ctypes
de Python sont alors utilisés pour envelopper l'API C. Cependant, alors que
l'API C++ est assez riche, libclang
l'est moins.
Sealang comble cette lacune en fournissant des enveloppes C autour des appels C++ qui fournissent les fonctionnalités utiles. Cette bibliothèque de fonctions C est enveloppée dans un module C Python à des fins de livraison - ce module C ne contient pas d'objets ou de méthodes Python exposés, mais parce qu'il s'agit d'un le module compilé sous-jacent sealang.so est facile à trouver. Les ctypes sont alors utilisés pour exposer les objets* ou méthodes. sealang ;
En interne, Sealang reproduit quelques éléments mineurs de l'API libclang
;
il s'agit de méthodes (telles que les méthodes de création et de manipulation de chaînes de caractères)
qui ne sont pas exposées en tant que symboles pour une utilisation tierce.
Toutes ces fonctionnalités sont potentiellement candidates pour être transmises en amont à libclang.
Relation avec Clang
Ce projet vise à refléter ce qui est actuellement disponible dans les liens Python
à libclang
. Le numéro de version de ce projet est tiré de la version et de la révision SVN du dépôt officiel de Clang.
de la version et de la révision SVN du dépôt officiel de clang.
Tout changement effectué en amont de libclang
sera reflété ici ; tout changement effectué ici sera, dans la mesure du possible, poussé vers libclang
.
changements faits ici seront, si possible, poussés en amont vers libclang
.
libclang
.
État d'avancement du développement
Ce projet est une expérience développée pour soutenir le projet [Seasnake] (/projet/attic/seasnake). [Seasnake] (/projet/attic/seasnake). Depuis que Seasnake a été abandonné, ce projet l'a été aussi.