Python - C proširenja

Sadržaj

Jezik jezika programiranje C Bio je dostupan programerima dugi niz godina, budući da smo kao kompilirani jezik programe mogli učiniti optimalnijim i bržim, zahvaljujući čemu je ovaj jezik još uvijek na snazi ​​jer omogućuje brzu provedbu različitih vrsta obrade.

U Piton Moć razvoja na čitljiv i prijateljski način dolazi s malom cijenom, a to je da se performanse mogu izgubiti u nekim vrlo specifičnim procesima, pa ako ovaj gubitak nije prihvatljiv i dovodi naš program u opasnost, moramo tražiti alternative. Njegova fleksibilnost omogućuje nam ugradnju modula napravljenih na drugim jezicima, poput C.

Pisanje proširenja na jeziku C
napisati C nastavci nije tako transparentno kao što to radite C # ili u JAVA da s različitim Python implementacijama to činimo vrlo brzim i lakim, s C se moramo pridržavati a API vrlo strogi, međutim ove poteškoće dovele su do alata koji pokušavaju poboljšati ovaj proces, jedan od njih je GUTLJAJ.

GUTLJAJ je kratica za Jednostavan omotač i generator sučelja je alat koji nam omogućuje razvoj proširenja na C ili C ++ i njihovo pakiranje za upotrebu u jezicima na visokoj razini, kao što je Piton, Perl, Rubin i drugi.

Što radi SWIG?
Koristiti GUTLJAJ Moramo samo ispuniti nekoliko jednostavnih koraka, pa da vidimo što nam dalje treba:

  • Moramo napisati sučelje za naš C kod, ova vrsta datoteke je vrlo slična zaglavlja; u nekim slučajevima možete izravno koristiti datoteku zaglavlja.
  • Trčimo GUTLJAJ u datoteci sučelja to uzrokuje generiranje više koda u C, to jest omotu.
  • Sastavljamo datoteku sučelje zajedno s paketom s kojim generiramo zajedničku biblioteku koju možemo koristiti sa jezicima kompatibilnim GUTLJAJ.

Malo prakse
Svladavši malo teorije, pogledajmo sada primjer ovoga koji smo objasnili, napravit ćemo modul koji detektira je li niz palindrom, odnosno da se čita na isti način u oba smjera, ovo nije da predstavlja problem PitonMeđutim, kada su to zaista veliki nizovi, može se uočiti problem s performansama, prvo pogledajmo kod na sljedećoj slici, a zatim vidimo kako implementirajte ga pomoću SWIG -a:

Ovdje imamo implementaciju u C, da bismo znali je li niz palindromski, tada gradimo sučelje koje je sljedeći kod:

Budući da imamo potpune zahtjeve na razini C, za sada ćemo vidjeti u čemu moramo raditi GUTLJAJ da biste mogli koristiti ovo:

Prvo moramo pokrenuti sljedeću naredbu:

 $ swig -piton palindrom.i
Gdje palindrom.i to je naše sučelje. Ovo će generirati datoteke Piton potrebno, tada moramo sastaviti sve, jer za ovaj korak moramo vrlo dobro poznavati staze naših elemenata da bismo mogli napraviti točne reference:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Uključi -c palindrome_wrap.c gcc -podijeljeni palindrom.o palindrome_wrap.o -o _palindrome.so 
Nakon ovih koraka možemo koristiti našu novu biblioteku u Piton kako slijedi:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Ovime završavamo vodič, jer vidimo da je pomalo složen implementirati proširenja u C međutim postignuti učinak vrijedi.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave