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
410
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
72
Android Autoが思ったよりしんどい話
yt8492
0
180
apollo-kotlinにcontributeした話
yt8492
0
110
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
810
今だからこそ知りたいKotlin Multiplatform
yt8492
0
270
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.2k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
190
Compose for Webを始めよう
yt8492
0
380
Compose Multiplatform 1.0.0
yt8492
0
150
Other Decks in Programming
See All in Programming
監視 やばい
syossan27
12
10k
AI時代の開発者評価について
ayumuu
0
230
Vibe Coding の話をしよう
schroneko
13
3.7k
Bedrock × Confluenceで簡単(?)社内RAG
iharuoru
1
110
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
200
Optimizing JRuby 10
headius
0
570
VitestのIn-Source Testingが便利
taro28
8
2.4k
KANNA Android の技術的課題と取り組み
watabee
0
180
Ruby's Line Breaks
yui_knk
4
2.8k
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
1
1.9k
エンジニア向けCursor勉強会 @ SmartHR
yukisnow1823
3
12k
Fiber Scheduler vs. General-Purpose Parallel Client
hayaokimura
1
290
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Faster Mobile Websites
deanohume
306
31k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Language of Interfaces
destraynor
158
25k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Thoughts on Productivity
jonyablonski
69
4.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
BBQ
matthewcrist
88
9.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.4k
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、しよう!