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
460
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
1
380
モバイルアプリ開発を始めよう!
yt8492
0
82
Git勉強会
yt8492
0
180
なんでもやってみる勇気
yt8492
0
110
Android Autoが思ったよりしんどい話
yt8492
0
230
apollo-kotlinにcontributeした話
yt8492
0
160
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
900
今だからこそ知りたいKotlin Multiplatform
yt8492
0
310
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
Other Decks in Programming
See All in Programming
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
CSC307 Lecture 04
javiergs
PRO
0
620
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
650
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
140
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
380
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
480
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
330
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.4k
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
3
670
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
310
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
200
Visualization
eitanlees
150
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
100
WENDY [Excerpt]
tessaabrams
9
35k
Testing 201, or: Great Expectations
jmmastey
46
7.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
We Are The Robots
honzajavorek
0
130
The Cult of Friendly URLs
andyhume
79
6.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
GraphQLとの向き合い方2022年版
quramy
50
14k
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、しよう!