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
450
5
Share
APIとABIの違い
以下動画のテキストです
https://youtu.be/T-01LJnqdyg
Satoru Takeuchi
PRO
August 31, 2025
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
システム強制終了時にファイルシステムの整合性を保つ~ コピーオンライト編 ~
sat
PRO
0
45
システム強制終了時に ファイルシステムの整合性を保つ ~ ジャーナリング編 ~
sat
PRO
1
50
ファイルシステムの整合性を回復するfsck
sat
PRO
1
48
小学校5,6年生向けキャリア教育 大人になるまでの道
sat
PRO
8
4k
ファイルシステムの不整合
sat
PRO
2
150
書籍執筆での生成AIの活用
sat
PRO
2
480
ChatGPTに従って体調管理2026
sat
PRO
0
180
eBPF
sat
PRO
1
150
waruiBPF
sat
PRO
0
140
Other Decks in Technology
See All in Technology
Every Conversation Counts
kawaguti
PRO
0
250
Fラン学生が考える、AI時代のデザインに執着した突破口
husengs7
1
210
Terragrunt x Snowflake + dbt で作るマルチテナントなデータ基盤構築プラットフォーム
gak_t12
0
420
10サービス以上のメール到達率改善を地道に継続的に進めている話 / Continue to improve email delivery rates across multiple services
yamaguchitk333
6
2.1k
O'Reilly Infrastructure & Ops Superstream: Platform Engineering for Developers, Architects & the Rest of Us
syntasso
0
260
Gaussian Splattingの表現力を拡張する — 高周波再構成とインタラクションへのアプローチ —
gpuunite_official
0
190
社内RAGの導入で気を付けたポイント
yakumo
1
120
AI 時代の Platform Engineering
recruitengineers
PRO
1
220
業務に残された「良くない型」で考える「TypeScriptの難しさ」
sajikix
1
360
R&D 祭 2024 UE5で絵コンテ・作画の制作支援ツールをつくる話
olmdrd
PRO
0
190
20260516_SecJAWS_Days
takuyay0ne
2
460
なぜ、IAMロールのプリンシパルに*による部分マッチングが使えないのか? / 20260518-ssmjp-iam-role-principal
opelab
1
130
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
A Tale of Four Properties
chriscoyier
163
24k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
190
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
140
BBQ
matthewcrist
89
10k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
350
How to make the Groovebox
asonas
2
2.2k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
170
Side Projects
sachag
455
43k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
370
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