Python - rozszerzenia C

Spisie treści

Język programowanie C Jest on udostępniany programistom od wielu lat, będąc językiem kompilowanym możemy tworzyć programy znacznie bardziej optymalne i szybsze, dzięki temu język ten nadal obowiązuje, ponieważ pozwala na szybkie przeprowadzanie różnych rodzajów przetwarzania.

w Pyton Możliwość rozwoju w czytelny i przyjazny sposób wiąże się z niewielką ceną, która polega na tym, że wydajność może zostać utracona w niektórych bardzo specyficznych procesach, więc jeśli ta utrata jest nie do zaakceptowania i naraża nasz program na ryzyko, musimy szukać alternatyw. Jego elastyczność pozwala nam na włączenie modułów wykonanych w innych językach, takich jak C.

Pisanie rozszerzeń w C
pisać Rozszerzenia C nie jest tak przejrzyste, jak robienie tego w C # lub w JAWA że z różnymi implementacjami Pythona robimy to bardzo szybko i łatwo, w C musimy przestrzegać a API bardzo rygorystyczne, jednak te trudności doprowadziły do ​​powstania narzędzi, które próbują usprawnić ten proces, jednym z nich jest HAUST.

HAUST to skrót od Proste opakowanie i generator interfejsów to narzędzie, które pozwala nam tworzyć rozszerzenia w C lub C++, a następnie pakować je do użytku w językach wysokiego poziomu, takich jak Pyton, Perl, Rubin i inni.

Czym zajmuje się SWIG?
Używać HAUST Musimy tylko wykonać kilka prostych kroków, zobaczmy, czego potrzebujemy dalej:

  • Musimy napisać interfejs dla naszego kodu C, ten typ pliku jest bardzo podobny do nagłówki; w niektórych przypadkach możesz użyć bezpośrednio pliku nagłówkowego.
  • Biegniemy HAUST w pliku interfejsu powoduje to wygenerowanie większej ilości kodu w C, czyli w opakowaniu.
  • Kompilujemy plik berło wraz z pakerem, za pomocą którego generujemy bibliotekę współdzieloną, z której możemy korzystać w językach zgodnych z HAUST.

Trochę praktyki
Po opanowaniu trochę teorii, zobaczmy teraz przykład tego, który wyjaśniliśmy, zrobimy moduł wykrywający, czy struna jest palindromem, czyli czy jest czytana w ten sam sposób w obu kierunkach, to nie jest to, że stanowi problem do PytonJednak gdy są to naprawdę duże ciągi, problem z wydajnością można zauważyć, najpierw zobaczmy kod na poniższym obrazku, a następnie zobaczmy, jak zaimplementuj go za pomocą SWIG:

Tutaj mamy implementację w C, aby wiedzieć, czy łańcuch jest palindromem, budujemy interfejs, który jest następującym kodem:

Ponieważ mamy pełne wymagania na poziomie C, na razie zobaczymy, co musimy zrobić w HAUST aby móc z tego korzystać:

Najpierw musimy uruchomić następujące polecenie:

 $ swig -python palindrome.i
Gdzie palindrom.i to jest nasz interfejs. To wygeneruje pliki Pyton konieczne, to musimy wszystko skompilować, na tym etapie musimy bardzo dobrze znać ścieżki naszych elementów, aby móc wykonać poprawne referencje:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Dołącz -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
Po wykonaniu tych czynności możemy korzystać z naszej nowej biblioteki w Pyton następująco:
 >>> importuj _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Na tym kończymy samouczek, ponieważ widzimy, że jest nieco skomplikowany implementuj rozszerzenia w C jednak osiągnięte wyniki są tego warte.

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave