C++ Academy · Lekcja

Używanie SWIG do powiązań z wieloma językami

Generuj jednocześnie powiązania dla wielu języków za pomocą SWIG

Lekcja 4 z 414 kroki

Używanie SWIG do powiązań z wieloma językami to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Czym jest SWIG?

SWIG (Simplified Wrapper and Interface Generator) generuje powiązania do bibliotek C/C++ dla wielu języków: Python, Java, C#, Ruby, Perl, Lua, Go i innych.

Kiedy używać SWIG

SWIG sprawdza się szczególnie wtedy, gdy potrzebują Państwo powiązań dla kilku języków z tej samej biblioteki C++ — interfejs definiuje się raz, a następnie kieruje na wiele platform.

Pliki interfejsu

SWIG używa plików interfejsu .i do deklarowania elementów przeznaczonych do eksportu.

// example.i
%module example
%{
#include "example.h"
%}
%include "example.h"

Budowanie powiązań

Należy uruchomić SWIG, aby wygenerować kod wrappera właściwy dla danego języka. Następnie wrapper należy skompilować razem ze źródłem C++.

swig -python -c++ example.i
# generates example_wrap.cxx and example.py

g++ -shared -fPIC -I$(python3-config --prefix)/include/python3.x \
    example.cpp example_wrap.cxx -o _example.so

Obsługa napisów

SWIG automatycznie konwertuje typowe typy: std::string ↔ str języka Python, std::vector ↔ tablice właściwe dla danego języka.

Dostosowywanie

typemaps SWIG-a pozwalają dostosować sposób konwersji typów między C++ a językiem docelowym. Są potężne, ale rozwlekłe.

Szablony

Należy jawnie tworzyć instancje szablonów C++ w pliku .i, aby SWIG mógł je opakować.

%template(IntVector) std::vector<int>;

Inteligentne wskaźniki

SWIG może opakowywać std::shared_ptr, dzięki czemu referencje właściwe dla danego języka zarządzają czasem życia obiektów. Należy włączyć tę funkcję za pomocą %shared_ptr(Type).

Wady

SWIG jest dojrzały, ale widać, że ma swoje lata:

  • rozwlekłe pliki interfejsu
  • złożone typemapy dla nietrywialnych konwersji
  • minimalna dokumentacja generowana automatycznie
  • większy narzut wydajnościowy niż w przypadku powiązań tworzonych specjalnie do danego języka

Alternatywy dla poszczególnych języków

Wyspecjalizowane narzędzia do tworzenia powiązań często dają lepsze rezultaty:

  • pybind11 dla języka Python
  • JNI lub JavaCPP dla języka Java
  • cppyy dla powiązań języka Python tworzonych w czasie wykonywania
  • cxx-rs dla języka Rust

Kiedy SWIG jest najlepszym wyborem

SWIG należy wybrać, gdy:

  • potrzebują Państwo powiązań dla co najmniej 3 języków z jednej bazy kodu
  • biblioteka jest duża i stabilna
  • utrzymywanie osobnych narzędzi do tworzenia powiązań dla każdego języka jest kosztowne

Kiedy pominąć SWIG

SWIG należy pominąć, gdy:

  • celem jest tylko jeden język — lepiej użyć wyspecjalizowanego narzędzia
  • API C++ intensywnie korzysta z szablonów i nowoczesnych funkcji języka
  • potrzebują Państwo najwyższej wydajności na granicy FFI

Szybkie sprawdzenie

Jaka jest główna zaleta SWIG-a w porównaniu z narzędziami do tworzenia powiązań osobno dla każdego języka?

Podsumowanie

SWIG generuje powiązania z jednego pliku interfejsu dla wielu języków. Najlepiej sprawdza się przy obsłudze wielu języków lub opakowywaniu dużych, stabilnych bibliotek C++. W projektach przeznaczonych dla jednego języka lepiej używać narzędzi tworzonych specjalnie do tego celu, takich jak pybind11.

Bezpłatny start

Ucz się C++ dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Używanie SWIG do powiązań z wieloma językami” jest bezpłatna?

Tak — pełny tekst „Używanie SWIG do powiązań z wieloma językami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Używanie SWIG do powiązań z wieloma językami”?

Generuj jednocześnie powiązania dla wielu języków za pomocą SWIG Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Używanie SWIG do powiązań z wieloma językami”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. extern C i ABI języka C
  2. Wywoływanie Pythona z C++ za pomocą pybind11
  3. Granice FFI między C++ i Rust
  4. Używanie SWIG do powiązań z wieloma językami
← Powrót do C++ Academy