O Sealang é um conjunto aprimorado de ligações Python para o libclang
.
Os mantenedores da libclang
não têm sido especialmente
receptivos aos patches que tratam de problemas como a compatibilidade com o Python 3,
e as omissões significativas na API (como a extração de literais
e operadores).
Este pacote é uma bifurcação dos bindings oficiais do Python para a libclang
,
corrigido para corrigir esses problemas.
Como funciona
O Sealang é um hack um tanto desagradável. O libclang
é um conjunto de ligações C para uma API C++.
API C++; os ctypes
do Python são usados para envolver a API C. No entanto, embora
a API C++ é bastante rica, a libclang
é menos.
A Sealang preenche essa lacuna fornecendo invólucros C em torno das chamadas C++ que fornecem a funcionalidade útil. Essa biblioteca de funções em C é como um módulo Python C para fins de entrega - esse módulo C não contém objetos ou métodos Python expostos, mas, por ser um módulo o módulo subjacente compilado sealang.so é fácil de encontrar. Os ctypes são então usados para expor os sealang funções de wrapper;
Internamente, o Sealang reproduz algumas partes menores da API libclang
;
esses são métodos (como os métodos de criação e manipulação de strings)
que não são expostos como símbolos para uso de terceiros.
Toda essa funcionalidade é potencialmente uma candidata a ser passada para o upstream para a libclang.
Relação com o Clang
Este projeto tem como objetivo espelhar o que está atualmente disponível nas ligações Python
para a libclang
. O número da versão deste projeto é extraído
da versão e da revisão SVN do repositório oficial do clang.
Quaisquer alterações feitas no libclang
serão espelhadas aqui; quaisquer
alterações feitas aqui serão, sempre que possível, enviadas para
libclang
.
Status de desenvolvimento
Esse projeto foi um experimento desenvolvido para dar suporte ao Seasnake. Como o Seasnake foi abandonado, este projeto também foi.