Лас- Скароты API вы бачылі не раз і не два, чытаючы артыкулы пра праграмнае забеспячэнне. Але не ўсе ведаюць, што такое API на самай справе. Менавіта таму мы ўдакладняем гэта ў гэтым артыкуле. Першае, што трэба сказаць, гэта тое, што яны з'яўляюцца абрэвіятурай "Інтэрфейс праграмавання праграм", гэта значыць па-іспанску "Інтэрфейс праграмавання праграм". І шмат разоў гэта стварае блытаніну нават у тых, хто ведае некаторыя праграмы.
Напрыклад, у Arduino ёсць уласны API для праграмавання, які прапануе шэраг функцый, якія можна выкарыстоўваць у IDE Arduino ці іншых асяроддзях для праграмавання мікракантролера для стварэння праектаў. Але ... не маглі б вы сказаць мне розніца паміж бібліятэкай праграмавання і API? Ці ёсць адрозненні паміж фрэймворкам і API? Ці з'яўляецца API такім жа, як ABI? Ёсць шмат сумневаў, якія, магчыма, працягваюць выклікаць блытаніну і якія мы збіраемся ўдакладніць прама зараз.
Я не ведаю, ці ведаеце вы гэта мовы нізкага ўзроўню, як асэмблер альбо ASM, залежаць непасрэдна ад апаратнай архітэктуры, у той час як высокага ўзроўню абстрагуюцца ад апаратнага забеспячэння, каб палегчыць задачу праграміста, але залежаць ад аперацыйнай сістэмы (сістэмныя выклікі) альбо ад пэўных API і г.д. Каб усё гэта не падалося вам кітайскім, паглядзім, пра што гаворка ...
Індэкс
Што такое API?
Una API - гэта інструмент, з дапамогай якога прадастаўляюцца распрацоўшчыкі каб яны мелі ў сваім распараджэнні шэраг функцый, падпраграм і працэдур альбо метадаў для ООП, якія можна выкарыстоўваць у існуючых бібліятэках. Сярод таго, што прапануе API, - функцыі для стварэння простых прыкладанняў, функцыі, звязаныя з ІІ, стварэнне графікі, кіраванне апаратнымі рэсурсамі і г.д.
Напрыклад, я ўпэўнены, што вы знаёмыя з такімі API, як той, які прапануе Linux праз бібліятэку glibc, альбо графікай, напрыклад OpenGL і Vulkan, альбо іншыя падобныя на OpenCL для неаднародных вылічэнняў, OpenXR для віртуальнай і дапоўненай рэальнасці і г.д. Іншыя аперацыйныя сістэмы і праграмнае забеспячэнне таксама ўключаюць уласныя API, каб іншыя праграмісты маглі ствараць адоны, убудовы або модулі для гэтай сістэмы і г.д.
Прыклад з Arduino
Калі ў вас ёсць значок Arduino і вы часта карыстаецеся IDE Arduino, альбо любое іншае асяроддзе распрацоўкі Arduino, вы будзеце ведаць, што пры стварэнні кода вы выкарыстоўваеце некалькі варыянтаў, каб загадаць мікракантролеру зрабіць шэраг дзеянняў. Напрыклад, pinMode () - тыповая функцыя для наладжвання высновы Arduino, так?
Калі вы пішаце pinMode (9, УВОД)Напрыклад, вы ўказваеце, што выснова 9 платы Arduino павінна працаваць як уваход, гэта значыць мікракантролер будзе чакаць, калі інфармацыя паступіць праз гэты штыфт, каб прачытаць яе і выканаць дзеянне. Але вы калі-небудзь задаваліся пытаннем, як ён здольны зразумець гэтую каманду?
Ну, у Arduino ёсць API распрацоўкі, які нам даступны. Да гэтага API можна дадаваць незалежныя бібліятэкі, як мы бачылі ў шматлікіх прыкладах у гэтым блогу. Як SparkFun для пэўных датчыкаў і г.д. Пры ўсім гэтым функцыі можна ўвесці ў IDE Arduino, і ён правільна перакладзе код, каб загрузіць яго ў памяць мікракантролера, каб ён мог яго апрацаваць.
Калі б у вас не было гэтага API, вы не змаглі б стварыць гэтыя праграмы для Arduino такім простым спосабам, бо мы павінны паспрабаваць зрабіць іх у зборным кодзе для мікракантролера ATMega328P, гэта значыць у ASM для архітэктуры AVR. І гэта было б значна складаней, бо вам прыйшлося б непасрэдна карыстацца інструкцыямі, даступнымі ў гэтым МСА. Калі так, вам трэба будзе не толькі адэкватна ведаць рэпертуар гэтага МСА, але і іншыя аспекты, такія як колькасць рэгістрацый і г.д. Гэта значыць, вы павінны валодаць нізкім узроўнем апаратнага забеспячэння, для якога вы працуеце.
Па напрыклад, код ASM Тое, што вы павінны генераваць, каб святлодыёд міргаў у цыкле, будзе:
<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
у той час як дзякуючы API, агульны аб'ём паслуг, напісанне на высокім узроўні наступнага эквівалентнага кода (значна карацейшага і больш інтуітыўнага):
<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
Адрозненні з ABI
ABI - менш вядомы тэрмін, гэта Бінарны інтэрфейс прыкладання, альбо на англійскай мове Application Binary Interface. У гэтым выпадку гэта інтэрфейс паміж модулямі праграмы, як правіла, паміж бібліятэкай альбо аперацыйнай сістэмай машыннай мовы для архітэктуры, у якой вы знаходзіцеся: SPARC, AMD64, ARM, PPC, RISC-V і г.д.
Дзякуючы ABI вызначаецца спосаб выкліку функцый, бінарны фармат якія могуць зразумець машыну, для якой вы кампілюеце, альбо сістэмныя выклікі, як апрацоўваюцца выключэнні, як перадаюцца дадзеныя і г.д.
Адрозненні ў рамках
Un фрэймворк альбо фрэймворк - гэта хутчэй набор інструментаў у вашым распараджэнні, каб дапамагчы ў распрацоўцы дадзенага праекта. Звычайна фамілія ўсталёўвае некаторыя стандарты кадавання, дае карысныя кампаненты і г.д. Напрыклад, JUnit - гэта фрэймворк для Java, альбо Symfony / Cake для PHP і г.д.
Адрозненні ад SDK і NDK
SDK - гэта набор для распрацоўкі праграмнага забеспячэння, гэта значыць камплект для распрацоўкі праграмнага забеспячэння. Гэта выходзіць за рамкі таго, што з'яўляецца фрэймворкам альбо API. Прыкладам можа служыць Android Studio альбо iOS xCode і г.д. Напрыклад, першы, акрамя самога Android API, таксама ўключае IDE альбо інтэграванае асяроддзе распрацоўкі для праграмавання і кампіляцыі, бібліятэкі, інструменты і г.д.
Акрамя таго, NDK (Натыўны камплект распрацоўкі) гэта дапаўненне. Напрыклад, Android NDK дазваляе распрацоўшчыкам паўторна выкарыстоўваць код C / C ++, уводзячы яго ў дадаткі праз JNI (Java Native Interface) ...
Адрозненні з бібліятэкай
І, нарэшце, бібліятэка - гэта зыходны код шматразовага выкарыстання што палягчае жыццё праграмістам. Напрыклад, у бібліятэцы C stdio.h ёсць функцыя printf для друку тэксту на экране. Каб гэта было магчыма, неабходны зыходны код, які прымушае аперацыйную сістэму выконваць гэтую задачу. Але паколькі гэта часта паўтараецца, што часта выкарыстоўваецца, проста выклікаўшы гэтую бібліятэку, вы можаце выкарыстоўваць printf, не пішучы ўвесь код з нуля. Іншымі словамі, іншымі словамі, іх можна разглядаць як зборныя блокі.
Бібліятэку і API можна лёгка пераблытаць, на самай справе, бібліятэкі ахінуты API. Прыклад Glibc...
Я спадзяюся, што пасля гэтага ў вас узнікне ідэя больш ясна пра тое, што такое API, ABI, фреймворк, SDK і бібліятэка, акрамя таго, што з гэтага часу можна іх адрозніваць.
Будзьце першым, каб каментаваць