/ / Interfejs bibliotek C / C ++ z Pythonem - python, boost, swig, cython, boost-python

Łączenie bibliotek C / C ++ z Pythonem - python, boost, swig, cython, boost-python

Mam bibliotekę C ++, której potrzebuję, aby móc łączyć się z Pythonem. czytam to pytanie aby zrozumieć wybór, który muszę dostosować.

Widziałem SWIG i Cython i chciałem iść z SWIG,głównie dlatego, że moje doświadczenie w programowaniu w Pythonie jest bardzo minimalne. Zdaję sobie jednak sprawę, że dzięki Swig muszę napisać interfejs (rozszerzenia .i) dla każdej klasy. Teraz mój projekt w C ++ jest ogromny i czuję, że zajmie mi dużo czasu, aby umieścić owijki na swoim miejscu (a może się mylę).

Więc teraz, ponieważ moja aplikacja jest duża, potrzebujęDokonać wyboru. W cytowanym wątku natknąłem się na Boost Python. Teraz nie mogę już decydować i chcę uzyskać informacje od ludzi, którzy mogą mi powiedzieć zalety i wady jednego nad drugim. Uwaga: moje preferencje dotyczą łatwości użytkowania i szybkości, z jaką można to zrobić. W tym celu jestem gotów obniżyć wydajność systemu. Byłbym bardzo wdzięczny, gdyby ktoś mógł dostarczyć mi projekt zaimplementowany w SWIG lub link do projektu zaimplementowanego w Pythonie (kompletny moduł zamiast przykładowego samouczka byłby znacznie lepszy!)

Odpowiedzi:

4 dla odpowiedzi № 1

Podnieść::Python zapewnia niemal bezproblemowy interfejs między C ++ i Python. Pozwala także pisać niestandardowe konwertery i inne fajne rzeczy, dzięki którym interfejsy Pythona są znacznie ładniejsze. Interfejsy to czysty C ++, ale opierają się na szablonach i sprytnych wzorach projektowych, aby wyglądały ładnie i deklaratywnie. Korzyścią jest również to, że kod konektora jest sprawdzany bezpośrednio przez kompilator.

Dzięki Swig piszesz deklaracje interfejsuSwig DSL, który zajmuje kilka dni, aby się zawiesić. Ponadto zawsze wstawia warstwę otoki, więc może być nieco wolniejszy. Ma jednak fajną funkcję automatycznego konwertowania wielu rzeczy dla ciebie bez konieczności deklarowania czegokolwiek dodatkowego. Opakowania, które generuje, są jednak dość trudne do debugowania.

Zwiększenie IMHO ::python jest lepszym wyborem, ponieważ pracujesz całkiem bezpośrednio z natywnymi interfejsami C CPython. Używam Swiga do interakcji z Javą i C ++, ponieważ JNI jest niedźwiedziem, interfejs C Pythona jest całkiem całkiem użyteczny sam w sobie.

Jeśli masz już kilka opakowań Swig, jazatrzyma je, ponieważ będziesz musiał przerobić całą tę pracę. Jednak rozpoczynając nowy projekt lub jeśli potrzebujesz maksymalnej wydajności, zwiększ :: python do końca!