Python - Extensii C

Cuprins

Limbajul programare C Acesta a fost pus la dispoziția dezvoltatorilor de software de mulți ani, fiind un limbaj compilat, putem face programele mult mai optime și mai rapide, datorită acestui limbaj care este încă în vigoare, deoarece permite efectuarea rapidă a diferitelor tipuri de procesare.

În Piton Puterea de a se dezvolta într-un mod lizibil și prietenos vine cu un preț mic, care înseamnă că performanța poate fi pierdută în unele procese foarte specifice, deci dacă această pierdere nu este acceptabilă și pune programul nostru în pericol, trebuie să căutăm alternative. Flexibilitatea sa ne permite să încorporăm module realizate în alte limbi, cum ar fi C.

Scrierea extensiilor în C
a scrie C extensii nu este la fel de transparent ca să o faci în C # sau în JAVA că cu diferitele implementări Python o facem foarte rapidă și ușoară, cu C trebuie să aderăm la a API foarte stricte, cu toate acestea aceste dificultăți au dus la instrumente care încearcă să îmbunătățească acest proces, unul dintre ele este ÎNGHIŢITURĂ.

ÎNGHIŢITURĂ este un acronim pentru Wrapper simplu și generator de interfață este un instrument care ne permite să dezvoltăm extensii în C sau C ++ și apoi să le împachetăm pentru a fi utilizate în limbaje de nivel înalt, cum ar fi Piton, Perl, Rubin si altii.

Ce face SWIG?
A folosi ÎNGHIŢITURĂ Trebuie doar să îndeplinim câțiva pași simpli, să vedem de ce avem nevoie în continuare:

  • Trebuie să scriem o interfață pentru codul nostru C, acest tip de fișier este foarte similar cu anteturi; în unele cazuri puteți utiliza direct fișierul antet.
  • Noi fugim ÎNGHIŢITURĂ în fișierul de interfață, acest lucru determină generarea mai multor coduri în C, adică învelișul.
  • Compilăm fișierul interfață împreună cu pachetul cu care generăm o bibliotecă partajată pe care o putem folosi cu limbile compatibile ÎNGHIŢITURĂ.

Puțină practică
După ce am însușit un pic de teorie, să vedem acum un exemplu de acest lucru pe care l-am explicat, vom face un modul care detectează dacă un șir este palindrom, adică este citit în același mod în ambele direcții, acest lucru nu înseamnă că reprezintă o problemă pentru PitonCu toate acestea, când sunt șiruri foarte mari, se poate observa problema performanței, să vedem mai întâi codul din următoarea imagine și apoi să vedem cum implementați-l folosind SWIG:

Aici avem implementarea în C, pentru a ști dacă un șir este palindrom, atunci construim interfața care este următorul cod:

Deoarece avem cerințele complete de nivel C, deocamdată vom vedea în ce trebuie să facem ÎNGHIŢITURĂ pentru a putea folosi acest lucru:

Mai întâi trebuie să executăm următoarea comandă:

 $ swig -python palindrome.i
Unde palindrom.i este interfața noastră. Aceasta va genera fișierele Piton necesar, atunci trebuie să compilăm totul, pentru acest pas trebuie să cunoaștem foarte bine căile elementelor noastre pentru a putea face referințele corecte:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Include -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
După acești pași, putem folosi noua noastră bibliotecă în Piton după cum urmează:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Cu aceasta terminăm tutorialul, deoarece vedem că este un pic complex implementați extensii în C cu toate acestea, performanța obținută merită.

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave