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
240
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
Android Autoが思ったよりしんどい話
yt8492
0
93
apollo-kotlinにcontributeした話
yt8492
0
38
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
580
今だからこそ知りたいKotlin Multiplatform
yt8492
0
180
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.1k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
150
Compose for Webを始めよう
yt8492
0
310
Compose Multiplatform 1.0.0
yt8492
0
130
2021年のKotlin入門
yt8492
0
200
Other Decks in Programming
See All in Programming
今、知っておきたい! 生成AIエージェントの世界
elith
3
360
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
490
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
330
Node.js v22 で変わること
yosuke_furukawa
PRO
9
3.4k
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.3k
GitHub Copilotのススメ
marcy731
1
200
データアナリストが行うDatabricksを活用したETLの自動化事例
shinoa
0
270
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
4.1k
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
ゆるい個人開発のススメ
kuroppe1819
10
990
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.2k
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
530
Featured
See All Featured
A better future with KSS
kneath
231
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
125
32k
Designing the Hi-DPI Web
ddemaree
276
33k
Thoughts on Productivity
jonyablonski
58
3.8k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
Navigating Team Friction
lara
178
13k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
Bash Introduction
62gerente
604
210k
Docker and Python
trallard
34
2.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
260
12k
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、しよう!