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
Kotlin/NativeからCの標準ライブラリを呼び出そう
Search
Yuta Tomiyama
December 04, 2021
Programming
0
430
Kotlin/NativeからCの標準ライブラリを呼び出そう
2021/12/04 Piyogrammer Conference 2021にて発表
Yuta Tomiyama
December 04, 2021
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
モバイルアプリ開発を始めよう!
yt8492
0
53
Git勉強会
yt8492
0
120
なんでもやってみる勇気
yt8492
0
89
Android Autoが思ったよりしんどい話
yt8492
0
200
apollo-kotlinにcontributeした話
yt8492
0
140
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
850
今だからこそ知りたいKotlin Multiplatform
yt8492
0
290
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
200
Other Decks in Programming
See All in Programming
AIエージェント開発、DevOps and LLMOps
ymd65536
1
110
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
110
書き捨てではなく継続開発可能なコードをAIコーディングエージェントで書くために意識していること
shuyakinjo
1
280
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
1.8k
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
140
AIに安心して任せるためにTypeScriptで一意な型を作ろう
arfes0e2b3c
0
370
DataformでPythonする / dataform-de-python
snhryt
0
180
レガシープロジェクトで最大限AIの恩恵を受けられるようClaude Codeを利用する
tk1351
2
160
State of CSS 2025
benjaminkott
1
110
JetBrainsのAI機能の紹介 #jjug
yusuke
0
200
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
620
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
9
2.3k
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
GitHub's CSS Performance
jonrohan
1031
460k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
How GitHub (no longer) Works
holman
314
140k
Producing Creativity
orderedlist
PRO
347
40k
It's Worth the Effort
3n
186
28k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
Kotlin/Nativeから Cの標準ライブラリを呼び出そう 2021/12/04 Piyogrammer Conference
自己紹介 HN: マヤミト ID: yt8492 会津大学 学部4年 普段はAndroidアプリ書いたりサーバー書いたり 今回のイベントの運営でもあります GitHub:
https://github.com/yt8492 趣味: Kotlin, Twitter, ウマ娘 Twitter: yt8492
Kotlin/Nativeとは? - KotlinのコードをJavaのバイトコード以外にコンパイルする技術 - VMなしで実行可能なバイナリ - C/C++向けのライブラリとCヘッダ - Swift/Objective-C向けのApple framework
- 当然JavaのライブラリやJVMのみをターゲットとしたKotlinのライブラリは使えない 😇 - 目的のtargetに対応したKotlinのライブラリを使う - 目的のtargetの処理をブリッジを書いて Kotlinでラップする
Kotlin標準ライブラリでできることは意外と限られている - Javaの標準ライブラリが普通にKotlinから使えるおかげで普段意識しないが、実 はKotlinの標準ライブラリではファイル操作やソケット通信などは提供されていな い - kotlinx-ioというライブラリが公式で開発中だが、ファイル操作もソケット通信もまだできない 😇
KotlinからCの標準ライブラリを呼び出そう(本題) - fopenとかをKotlin/Nativeから呼び出せばいいじゃん! - とはいえ自力でブリッジを書くのはあまりにもしんどい - Kotlin/Native向けにplatform librariesという形でCの標準ライブラリの関数など をそのままKotlinから使えるようにしたラッパーが公式で提供されている
簡単な例
Cのprintfが呼び出せた🎉
とはいえそんなに単純に済む話じゃない - KotlinとCのそもそもの言語仕様の違い - Kotlinは変数の宣言と代入はセットだが、 Cは変数宣言だけしてポインタを関数に渡すなどができ る - KotlinはGCがあるけどCにはない -
Kotlinにポインタの概念はない - などなど
KotlinでCの変数のメモリ確保など - memScopedという関数に渡すブロックの中でallocなどの関数が使える - このスコープを抜けると確保したメモリは開放される - ポインタは ptr という拡張プロパティで取得できる
Cの値とポインタをKotlinで扱う - allocで確保できる型はCVariable型を継承した型のみ - Kotlinのプリミティブ型(Intなど)がallocできないじゃん! - プリミティブ型用にCVariable型を継承したIntVar型などが用意されている - CVariable型が継承しているCPointed型には、ptrという拡張プロパティが生えて いる
- ptrはCPointer型
Kotlin/NativeでTCPのソケット通信をecho backする例 - yt8492/NativeServer https://github.com/yt8492/NativeServer - Cのsocket関数などをKotlinでラップしてJavaのSocketまわりの標準ライブラリに近いものを自作 - それを使う形でecho backを実装
これでみなさんもCのコードをKotlinに 脳内変換できるようになりましたね?
みんなもKotlin/Native、しよう!