Sealang, libclang
için geliştirilmiş bir Python bağlama kümesidir.
libclang`ın yukarı akış bakımcıları özellikle Python 3 uyumluluğu gibi sorunları ele alan yamalara duyarlı, ve API'deki önemli eksiklikler (örneğin, değişmezlerin ayıklanması ve operatörler).
Bu paket libclang
için resmi Python bağlamalarının bir çatallamasıdır,
bu sorunları düzeltmek için yamalanmıştır.
Nasıl çalışır
Sealang biraz kötü bir hacktir. libclang
bir dizi C bağlayıcısıdır.
C++ API; Python ctypes
daha sonra C API'yi sarmak için kullanılır. Bununla birlikte
C++ API oldukça zengindir, libclang
ise daha az zengindir.
Sealang, C++ çağrıları etrafında C sarmalayıcıları sağlayarak bu boşluğu kapatır kullanışlı işlevsellik sağlar. Bu C fonksiyonları kütüphanesi teslimat amacıyla bir Python C modülü olarak paketlenmiştir - bu C modülü hiçbir açık Python nesnesi veya yöntemi içermez, ancak bir modülü, altta yatan derlenmiş sealang.so dosyasını bulmak kolaydır. ctypes daha sonra şu öğeleri ortaya çıkarmak için kullanılır sealang sarmalayıcı işlevleri;
Sealang dahili olarak libclang
API'sinin bazı küçük parçalarını yeniden üretir;
bunlar metotlardır (string oluşturma ve manipülasyon metotları gibi)
Üçüncü taraf kullanımı için sembol olarak gösterilmeyen.
Tüm bu işlevler potansiyel olarak yukarı akışa aktarılmaya adaydır libclang'a.
Clang ile İlişki
Bu proje şu anda Python'da mevcut olanları yansıtmayı amaçlamaktadır
bağları libclang
için. Bu proje için sürüm numarası çizilmiştir
resmi clang deposunun sürümünden ve SVN revizyonundan.
Yukarı yönde libclang
üzerinde yapılan tüm değişiklikler buraya yansıtılacaktır; herhangi bir
Burada yapılan değişiklikler, mümkün olduğunda, yukarı yönde
libclang
.
Geliştirme durumu
Bu proje, aşağıdakileri desteklemek için geliştirilmiş bir deneydi Seasnake. Seasnake terk edildiğinden beri, Bu proje de öyle.