Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
APIとABIの違い
Search
Satoru Takeuchi
PRO
August 31, 2025
Technology
5
180
APIとABIの違い
以下動画のテキストです
https://youtu.be/T-01LJnqdyg
Satoru Takeuchi
PRO
August 31, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
ソースを読むプロセスの例
sat
PRO
15
9.7k
メモリマップトファイル
sat
PRO
1
120
「Linux」という言葉が指すもの
sat
PRO
4
210
ファイルシステムへのアクセス方法
sat
PRO
0
74
ファイルシステム
sat
PRO
1
69
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
6.2k
ポーリングと割り込み
sat
PRO
1
130
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
150
会社員しながら本を書いてきた知見の共有
sat
PRO
3
940
Other Decks in Technology
See All in Technology
OCIjp_Oracle AI World_Recap
shinpy
1
150
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
240
Findy Team+ QAチーム これからのチャレンジ!
findy_eventslides
0
490
会社を支える Pythonという言語戦略 ~なぜPythonを主要言語にしているのか?~
curekoshimizu
1
260
「最速」で Gemini CLI を使いこなそう! 〜Cloud Shell/Cloud Run の活用〜 / The Fastest Way to Master the Gemini CLI — with Cloud Shell and Cloud Run
aoto
PRO
0
140
Introduction to Bill One Development Engineer
sansan33
PRO
0
300
コンパウンド組織のCRE #cre_meetup
layerx
PRO
0
170
CoRL 2025 Survey
harukiabe
1
240
今この時代に技術とどう向き合うべきか
gree_tech
PRO
2
2.1k
ソフトウェアエンジニアの生成AI活用と、これから
lycorptech_jp
PRO
0
780
JSConf JPのwebsiteをGatsbyからNext.jsに移行した話 - Next.jsの多言語静的サイトと課題
leko
2
160
LLMプロダクトの信頼性を上げるには?LLM Observabilityによる、対話型音声AIアプリケーションの安定運用
ivry_presentationmaterials
0
740
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Six Lessons from altMBA
skipperchong
29
4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Building an army of robots
kneath
306
46k
It's Worth the Effort
3n
187
28k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
GraphQLとの向き合い方2022年版
quramy
49
14k
Designing for humans not robots
tammielis
254
26k
Transcript
APIとABIの違い Aug. 31st, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はじめに • ソフトウェア技術の文脈で「API」と「ABI」という言葉がよく出てくる • どちらも異なるプログラム(関数含む)間で情報をやりとりするためのインタフェース だがレイヤが異なる ◦ API(Application Programming Interface)
▪ ソースコードレベル ◦ ABI(Application Binary Interface) ▪ バイナリレベル • これだけではよくわからないので、2つの違いを具体例を使って説明 • 話を単純化するために、以下の例を考える ◦ Linux環境である ◦ C言語で書かれたソースコードをコンパイルして足し算をする関数を呼び出す 2
足し算をするplus関数のAPI • 書式通りにソースコードを書いてコンパイルすると、plus関数を呼び出して結果を受 け取る機械語コードを出力してくれる ◦ 言語が違うとAPIも違う事が多い 3 c = plus(1,
2); printf(“%d\n”, c); ソースコード aaabbbccc xxxyyyzzz コンパイル x86_64機械語コード ARM64機械語コード 書式: int plus(int x, int y); 説明: xとyを足した結果を返す APIを使って呼び出す
ABI • バイナリレベルで、関数を呼び出して戻り値を受け取る方法を定める • x86_64 LinuxでC言語で書かれた関数を呼び出す場合に通常使用するABI ◦ 第1,第2引数はCPUのrdi,rsiレジスタを使って渡し、 call機械語命令を使って呼び出す ◦
戻り値はCPUのraxレジスタを使って返す • ソースコードをバイナリ(機械語コード)にコンパイルする時、した後の話 ◦ プログラマは通常ABIを気にする必要はない 4 aaabbbccc x86_64機械語コード dddeeefff x86_64のplusのコード ABIを使って呼び出す
📝 役に立つページ • 一般的な話: wikipediaの「呼び出し規約」のページ ◦ https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84 • x86_64の話: System
V Application Binary Interface AMD64 Architecture Processor Supplement Draft Version 0.99.7(とくに3.2が役立つだろう) ◦ https://www.uclibc.org/docs/psABI-x86_64.pdf ◦ Linux上のC言語で書かれた関数は通常この ABIを使う 5
プログラマがABIを気にする場合の例 • go-sqlite3 ◦ https://github.com/mattn/go-sqlite3 ◦ libsqlite3ライブラリを使うための Go言語用ライブラリ • 課題
◦ Goのソースコードから直接 libsqlite3の関数を呼び出せない • 解決策 ◦ ユーザにはGo標準の”database/sql”APIを提供 ◦ APIを実装する関数の中で、 libsqlite3の機械語コードをABIを使って呼び出す ▪ cgoというしくみを使う 6
まとめ • APIとABIはどちらもプログラム間で情報をやりとりするインタフェース • レイヤが違う ◦ API: ソースコードレベル ◦ ABI:
バイナリレベル • プログラマは通常APIについてだけ考えればよい • 別言語のライブラリを呼び出すようなときにABIを意識することも 7