ラス APIの頭字語は、ソフトウェアに関する記事を読んだときにXNUMX回以上見たことがあるでしょう。。 しかし、APIが実際に何であるかを誰もが知っているわけではありません。 そのため、この記事でそれを明確にします。 最初に言うことは、それらはApplication Programming Interfaceの頭字語、つまりスペイン語でApplication ProgrammingInterfaceであるということです。 そして、プログラミングについて何か知っている人の間でさえ、多くの場合、それは混乱を引き起こします。
たとえば、Arduinoには独自のプログラミングAPIがあり、Arduino IDEまたはその他の環境で使用して、マイクロコントローラーをプログラムしてプロジェクトを作成できるようにするための多数の関数を提供します。 でも...教えてくれませんか プログラミングライブラリとAPIの違い? フレームワークとAPIに違いはありますか?APIはABIと同じですか? おそらく混乱を引き起こし続けていること、そして私たちが今明らかにしようとしていることには多くの疑問があります。
あなたがそれを知っているかどうかはわかりません 低水準言語、アセンブラやASMのように、それらはハードウェアアーキテクチャに直接依存し、高レベルのものはプログラマのタスクを容易にするためにハードウェアから抽象化しますが、オペレーティングシステム(システムコール)や特定のAPIなどに依存します。 これがすべてあなたにとって中国語のように聞こえないように、それが何であるかを見てみましょう...
APIとは何ですか?
A APIは、開発者に提供されるツールです。 そのため、既存のライブラリを介して使用できるOOPの一連の関数、サブルーチン、プロシージャ、またはメソッドを自由に使用できます。 APIが提供するものの中には、単純なアプリを作成する関数、AIに関連する関数、グラフィックの生成、ハードウェアリソースの管理などがあります。
たとえば、よく知られているAPIは、Linuxがglibcライブラリを介して提供しているもののように聞こえるか、グラフィックスのように聞こえると思います。 OpenGLとVulkan、またはOpenCLのような他のもの ヘテロジニアスコンピューティング用、仮想現実および拡張現実用のOpenXRなど。 他のオペレーティングシステムやソフトウェアにも独自のAPIが含まれているため、他のプログラマーはそのシステム用のアドオン、プラグイン、モジュールなどを作成できます。
Arduinoの例
バッジをお持ちの場合 ArduinoとあなたはArduinoIDEを頻繁に使用しますが、 またはArduinoの他の開発環境では、コードを作成するときに、複数のオプションを使用してマイクロコントローラーに一連のアクションを実行するように指示することがわかります。 たとえば、pinMode()はArduinoピンを構成するための典型的な関数ですよね?
あなたが書くとき pinMode(9、INPUT)たとえば、Arduinoボードのピン9が入力として機能する必要があることを示しています。つまり、マイクロコントローラーは、情報がそのピンから入力されて読み取られ、アクションを実行するのを待機します。 しかし、彼がそのコマンドをどのように理解できるのか疑問に思ったことはありますか?
さて、Arduinoには 私たちが利用できるようになった開発API。 このブログの多くの例で見たように、サードパーティのライブラリをこのAPIに追加できます。 特定のセンサーなどのSparkFunのように。 これらすべてで、関数はArduino IDEに入力でき、コードを適切に変換してマイクロコントローラーのメモリにロードし、処理できるようにします。
このAPIがない場合は、Arduino用のこれらのプログラムをこのような簡単な方法で作成することはできません。ATMega328Pマイクロコントローラーのアセンブリコードで作成する必要があるためです。 AVRアーキテクチャ用のASM。 そして、このISAで利用可能な命令を直接使用する必要があるため、これははるかに複雑になります。 その場合、そのISAのレパートリーだけでなく、登録数などの他の側面も十分に知っている必要があります。 つまり、作業しているハードウェアについての低レベルの知識が必要です。
POR 例、ASMコード LEDがループで点滅するために生成する必要があるものは次のとおりです。
<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はあまり知られていない用語であり、 アプリケーションバイナリインターフェイス、または英語のアプリケーションバイナリインターフェイス。 この場合、これはプログラムのモジュール間のインターフェイスであり、通常は、SPARC、AMD64、ARM、PPC、RISC-Vなどのアーキテクチャのライブラリまたは機械語オペレーティングシステム間のインターフェイスです。
ABIのおかげで、関数を呼び出す方法が決定されます。 バイナリ形式 コンパイルするマシンやシステムコール、例外の処理方法、データの受け渡し方法などを理解できます。
フレームワークとの違い
Un フレームワークまたはフレームワークは、より多くのツールのセットです 特定のプロジェクトの開発を支援するために自由に使用できます。 名声は通常、いくつかのコーディング標準を設定し、便利なコンポーネントなどを提供します。 たとえば、JUnitはJavaのフレームワーク、またはPHPのSymfony / Cakeなどです。
SDKおよびNDKとの違い
SDKはソフトウェア開発キットですつまり、ソフトウェア開発キットです。 フレームワークやAPIを超えています。 例としては、AndroidStudioやiOSxCodeなどがあります。 たとえば、最初のものには、Android API自体に加えて、プログラミングとコンパイルのためのIDEまたは統合開発環境、ライブラリ、ツールなども含まれています。
さらに、 NDK(ネイティブ開発キット) それは補足です。 たとえば、Android NDKを使用すると、開発者はC / C ++コードをJNI(Java Native Interface)を介してアプリケーションに導入することで再利用できます...
ライブラリとの違い
最後に、 ライブラリは再利用可能なソースコードのコレクションです これにより、プログラマーの生活が楽になります。 たとえば、Cライブラリstdio.h内には、画面にテキストを印刷するためのprintf関数があります。 これを可能にするには、オペレーティングシステムにこのタスクを実行させるソースコードが必要です。 しかし、これは頻繁に使用される非常に頻繁なものであるため、そのライブラリを呼び出すだけで、すべてのコードを最初から作成しなくてもprintfを利用できます。 言い換えれば、それらはプレキャストブロックとして見ることができます。
実際、ライブラリとAPIは簡単に混同される可能性があります。 ライブラリはAPI内にラップされています。 例 glibcの...
この後あなたがアイデアを持っていることを願っています API、ABI、フレームワーク、SDK、およびライブラリが何であるかについてより明確になり、今後それらを区別できるようになります。