The Скорочення API, ви бачили їх не раз і двічі, коли читали статті про програмне забезпечення. Але не всі знають, що таке API насправді. Ось чому ми це пояснюємо в цій статті. Перше, що слід сказати, це те, що це скорочення Інтерфейсу програмування програм, тобто іспанською мовою Інтерфейс програмування програм. І багато разів це створює плутанину навіть серед тих, хто знає певне програмування.
Наприклад, Arduino має власний API програмування, пропонуючи низку функцій, які можна використовувати в IDE Arduino або інших середовищах для програмування мікроконтролера для створення проектів. Але ... не могли б ви сказати мені різниця між бібліотекою програмування та API? Чи є відмінності між фреймворком та API? Чи є API таким самим, як ABI? Є багато сумнівів, які, можливо, продовжують створювати плутанину, і які ми збираємося пояснити прямо зараз.
Не знаю, чи ти це знаєш мови низького рівня, як асемблер або ASM, залежать безпосередньо від апаратної архітектури, тоді як високорівневі абстрагуються від апаратного забезпечення, щоб полегшити завдання програміста, але залежать від операційної системи (syscalls) або від певних API тощо. Щоб все це вам не здавалося китайською, давайте подивимось, про що йдеться ...
Що таке API?
Una API - це інструмент, за допомогою якого надаються розробники так що вони мають у своєму розпорядженні ряд функцій, підпрограм і процедур або методів для ООП, які можна використовувати через існуючі бібліотеки. Серед того, що пропонує API, є функції для створення простих додатків, функції, пов’язані з ШІ, з генерацією графіки, управління апаратними ресурсами тощо.
Наприклад, я впевнений, що ви знайомі з такими API, як той, який пропонує Linux через бібліотеку glibc, або графікою, такою як OpenGL і Vulkan, а також інші, такі як OpenCL для гетерогенних обчислень, OpenXR для віртуальної та доповненої реальності тощо. Інші операційні системи та програмне забезпечення також включають власні API, щоб інші програмісти могли створювати аддони, плагіни або модулі для цієї системи тощо.
Приклад з Arduino
Якщо у вас є значок Arduino, і ви часто використовуєте Arduino IDE, або будь-яке інше середовище розробки Arduino, ви будете знати, що при створенні коду ви використовуєте безліч варіантів, щоб замовити мікроконтролеру виконати ряд дій. Наприклад, pinMode () - типова функція для налаштування виводу Arduino, так?
Коли пишеш pinMode (9, INPUT)Наприклад, ви вказуєте, що штифт 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 - менш відомий термін, це a Бінарний інтерфейс програми, або англійською мовою Бінарний інтерфейс програми. У цьому випадку це інтерфейс між модулями програми, як правило, між бібліотекою або операційною системою машинної мови для архітектури, в якій ви знаходитесь: 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 та бібліотека, крім того, що відтепер їх можна розрізняти.