du API siglak behin eta bitan baino gehiagotan ikusiko dituzu softwareari buruzko artikuluak irakurtzean. Baina denek ez dakite zer den benetan API bat. Horregatik argitzen dugu artikulu honetan. Esan beharreko lehenengo gauza da Application Programming Interface-ren laburdurak direla, hau da, gaztelaniaz, Application Programming Interface. Eta askotan nahasmena sortzen du programazio batzuk ezagutzen dituztenen artean ere.
Adibidez, Arduinok bere programazio APIa du, Arduino IDEan edo beste ingurune batzuetan erabil ditzakezun funtzio ugari eskaintzen ditu mikrokontroladorea programatzeko zure proiektuak sortzea ahalbidetzeko. Baina ... esango al zenidake programazio liburutegi eta API baten arteko aldea? Ba al dago desberdintasunik esparru baten eta API baten artean? API bat ABI baten berdina al da? Nahasmena sortzen jarraitzen duten eta oraintxe argitzera goazen zalantzak daude.
Ez dakit hori ezagutzen duzun maila baxuko hizkuntzak, mihiztatzailea edo ASM bezala, hardwarearen arkitekturaren mende daude, goi mailakoak, berriz, hardwareari ateratzen zaizkio programatzailearen zeregina errazteko, baina sistema eragilearen (syscalls) edo API batzuen eta abarren araberakoak dira. Guzti honek txinatar itxura izan ez dezan, ikus dezagun zertaz ari den ...
Index
Zer da APIa?
a API garatzaileekin hornitutako tresna da beraz, eskura dituzte hainbat liburutegi bidez erabil daitezkeen OOPrako funtzio, azpierrutina eta prozedura edo metodo batzuk. API batek eskaintzen dituenen artean daude aplikazio sinpleak sortzeko funtzioetatik, AIrekin lotutako funtzioekin, grafikoen sorrerarekin, hardware baliabideen kudeaketarekin, etab.
Adibidez, ziur nago ezagutzen dituzula APIak, hala nola Linuxek glibc liburutegiaren bidez eskaintzen dituenak, edo bezalako grafikoak OpenGL eta Vulkan, edo OpenCL bezalako beste batzuk ere konputazio heterogeneorako, OpenXR errealitate birtual eta areagotuarentzat, etab. Beste sistema eragile eta software batzuek beren APIak ere badituzte, beste programatzaileek sistema horretarako gehigarriak, pluginak edo moduluak sor ditzaten, etab.
Adibidez Arduinorekin
Intsignia baduzu Arduino eta zuk maiz erabiltzen duzu Arduino IDE, edo Arduinorentzako beste edozein garapen ingurune, jakingo duzu kode bat sortzerakoan aukera anitz erabiltzen dituzula zure mikrokontroladoreak ekintza ugari egin ditzan. Adibidez, pinMode () funtzio arrunta da Arduino pin bat konfiguratzeko, ezta?
Idazten duzunean pinMode (9, INPUT)Adibidez, Arduino plakako 9. pinak sarrera gisa funtzionatu behar duela adierazten ari zara, hau da, mikrokontroladoreak pin horren bidez informazioa noiz sartuko duen zain egongo da hura irakurtzeko eta ekintza bat burutzeko. Baina inoiz galdetu al zaizu nola gai den agindu hori ulertzeko?
Beno, Arduinok badu Gure eskura jartzen den garapen APIa. API honetan hirugarrenen liburutegiak gehi daitezke blog honetan adibide askotan ikusi dugun moduan. SparkFun-en antzera sentsore batzuetarako eta abar Horrekin guztiarekin, funtzioak Arduino IDEan sar daitezke eta kodea behar bezala itzuliko du mikrokontroladorearen memorian kargatzeko prozesatu ahal izateko.
API hau izango ez bazenu, ezin izango zenituzke programa hauek Arduinorako hain modu sinplean sortu, ATMega328P mikrokontroladorearentzako muntatze kodean egiten saiatu beharko ginateke, hau da, AVR arkitekturarako ASM. Eta hori askoz ere korapilatsuagoa izango litzateke, ISA honek eskaintzen dituen argibideak zuzenean erabili beharko zenituzkeelako. Horrela bada, ISA horren errepertorioa behar bezala ezagutu beharko zenuke, baita beste alderdi batzuk ere, hala nola izen emate kopurua, etab. Hau da, lanean ari zaren hardwarearen maila baxuko ezagutza izan beharko zenuke.
By adibidez, ASM kodea LED batek begizta batean keinua egin dezan sortu beharko zenukeena:
<br data-mce-bogus="1"> .ORG 0x0000 ; the next instruction has to be written to ; address 0x0000 rjmp START ; the reset vector: jump to "main" START: ldi r16, low(RAMEND) ; set up the stack out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 ldi r16, 0xFF ; load register 16 with 0xFF (all bits 1) out DDRB, r16 ; write the value in r16 (0xFF) to Data ; Direction Register B LOOP: sbi PortB, 5 ; switch off the LED rcall delay_05 cbi PortB, 5 ; wait for half a second ; switch it on rcall delay_05 ; wait for half a secon rjmp LOOP ; jump to loop DELAY_05: ; the subroutine: ldi r16, 31 ; load r16 with 31 OUTER_LOOP: ; outer loop label ldi r24, low(1021) ; load registers r24:r25 with 1021, our new ; init value ldi r25, high(1021) ; the loop label DELAY_LOOP: ; "add immediate to word": r24:r25 are ; incremented adiw r24, 1 ; if no overflow ("branch if not equal"), go ; back to "delay_loop" brne DELAY_LOOP dec r16 ; decrement r16 brne OUTER_LOOP ret ; and loop if outer loop not finished ; return from subroutine
bitartean APIari esker instalazioak osoak dira, maila altuan honako kode baliokide hau idatziz (askoz ere laburragoa eta intuitiboagoa):
<br data-mce-bogus="1"> int ledPin = 13; // LED que se encuentra en el pin 13 void setup(){ pinMode(ledPin, OUTPUT); // El p1n 13 será una salida digital } void loop(){ digitalWrite(ledPin, HIGH); // Enciende el LED delay(1000); // Pausa de 1 segundo digitalWrite(ledPin, LOW); // Apaga el LED delay(1000); // Pausa de 1 segundo
Desberdintasunak ABI batekin
ABI ez da hain ezaguna den terminoa, a da Application Binary Interface, edo ingelesez Application Binary Interface. Kasu honetan, programa baten moduluen arteko interfazea da, normalean liburutegi baten edo makina-lengoaia sistema eragilearen artean zauden arkitekturaren artean: SPARC, AMD64, ARM, PPC, RISC-V, etab.
ABIri esker, funtzioei deitzeko modua zehazten da, formatu bitarra horrek ulertu dezake konpilatzen ari zaren makina edo sistemaren deiak, salbuespenak nola kudeatzen diren, datuak nola pasatzen diren etab.
Esparru batekin desberdintasunak
Un esparrua edo esparrua tresna multzo bat gehiago da zure eskura proiektu jakin bat garatzen laguntzeko. Fama lanak normalean kodeketa estandar batzuk ezartzen ditu, osagai baliagarriak eskaintzen ditu, etab. Adibidez, JUnit Java-rako esparrua da, edo Symfony / Cake PHP-rako, etab.
SDK eta NDK-rekin desberdintasunak
SDK Software Garapen Kit bat da, hau da, softwarea garatzeko kit bat. Esparru edo API bat denaz haratago doa. Adibide bat Android Studio edo iOS xCode, etab. Adibidez, lehenengoan, Android APIaz gain, IDE edo garapen ingurune integratua ere sartzen da programatzeko eta biltzeko, liburutegiak, tresnak, etab.
Gainera, NDK (Native Development Kit) osagarria da. Adibidez, Android NDK-k garatzaileei C / C ++ kodea berrerabiltzeko aukera ematen die JNI (Java Native Interface) bidez aplikazioetan sartuz ...
Liburutegiarekin desberdintasunak
Azkenik, liburutegia iturburu kode berrerabilgarrien bilduma da horrek bizitza errazten die programatzaileei. Adibidez, C liburutegiaren stdio.h barruan printf funtzioa dago pantailan testua inprimatzeko. Hori posible izan dadin, sistema eragileak zeregin hori egiten duen iturburu kodea behar da. Baina maiz erabiltzen den oso errepikakorra denez, liburutegi hori deitzean printf erabil dezakezu kode guztia hutsetik idatzi gabe. Beste era batera esanda, beste modu batera esanda, aurrefabrikatutako bloke gisa ikus daitezke.
Liburutegia eta APIa erraz nahastu daitezke, hain zuzen ere, liburutegiak API baten barruan bilduta daude. Adibidez glibc...
Espero dut ondoren ideia bat izatea argiago zer den API bat, ABI, frameworka, SDK bat eta liburutegia zer diren, hemendik aurrera haien artean bereizteko gai izateaz gain.