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
How useful Kotlin/Native in Kotlin 1.3
Search
Masaya Yashiro
July 21, 2020
Programming
0
410
How useful Kotlin/Native in Kotlin 1.3
Masaya Yashiro
July 21, 2020
Tweet
Share
More Decks by Masaya Yashiro
See All by Masaya Yashiro
拡大期を迎えたプロダクトに起きたこと - Android編
yashims
0
490
UX design trend 2019
yashims
5
1.5k
Kotlin/MPP getting started and troubles
yashims
0
3.9k
C# code refactoring with Scope Functions
yashims
0
2.8k
ココがダメだよWebCamTexture
yashims
0
86
Introduction of MaterialDesign for engineer
yashims
0
94
Other Decks in Programming
See All in Programming
Kanzawa.rbのLT大会を支える技術の裏側を変更する Ruby on Rails + Litestream 編
muryoimpl
0
120
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
29
4.8k
functionalなアプローチで動的要素を排除する
ryopeko
1
950
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
200
チームの立て直し施策をGoogleの 『効果的なチーム』と見比べてみた
maroon8021
0
280
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
2.2k
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
2.3k
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
1
190
法律の脱レガシーに学ぶフロントエンド刷新
oguemon
4
620
[JAWS-UG横浜 #79] re:Invent 2024 の DB アップデートは Multi-Region!
maroon1st
0
130
社内フレームワークとその依存性解決 / in-house framework and its dependency management
vvakame
1
500
ASP.NET Core の OpenAPIサポート
h455h1
0
160
Featured
See All Featured
A designer walks into a library…
pauljervisheath
205
24k
A Tale of Four Properties
chriscoyier
157
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Producing Creativity
orderedlist
PRO
343
39k
The Cult of Friendly URLs
andyhume
78
6.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
11
900
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
What's in a price? How to price your products and services
michaelherold
244
12k
KATA
mclloyd
29
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Designing Experiences People Love
moore
139
23k
Transcript
Kotlin/Nativeで今どこまで できるか 2020-07-20 吉祥寺.pm #23 @yashims85
誰? 名前: 屋代昌也 会社: 株式会社モバイルファクトリー Twitter: @yashims85 Github: yashims
None
皆さんPerlのどういったところが好 きでしょうか?
Perlで私が好きなところ • コーディングスタイルの自由度が高い • 書き捨てのコードも書きやすい • 資産が豊富 • XSである程度早く実行することもできる •
正規表現が楽 • 言語レベルまでハックできる 触ってて面白い言語だと感じてます。もしあなたがこの辺に好 感を感じるなら、そんなあなたにおすすめしたい言語がありま す。
Kotlin
Kotlinではどの程度カバーできるか コーディングスタイルの自由度が高い 常識の範囲内で高い 書き捨てのコードが書きやすい スクリプトとして実行できる 資産が豊富 Javaの資産を使える(JVMでは) XSである程度早くできる Kotlin/Nativeで機械語出力もできる 正規表現が楽
特段楽ではない 言語レベルまでハックできる できない
今日話したいこと • Kotlin/Nativeで何? • Kotlin/Nativeで今どこまでできるのか
Kotlin/Native • もともとJVM言語として作られたKotlinの拡張 • Kotlin 1.3 からpreview版として使用可能 • KotlinのコードをLLVMでクロスコンパイルして機械語を 吐き出そうという試み
• Kotlin/NativeとともにKotlin/JS拡張も平行で進行中
Kotlin/JVM Kotlin/Native Kotlin/JS
Kotlin/MPP(Multi Platform Project) Kotlin/MPP Kotlin/JVM Kotlin/Native Kotlin/JS Kotlin/Android ServerSide Kotlin
Kotlin/iOS Kotlin/MacOS Kotlin/X86 Kotlin/WinGW Kotlin/Common
Kotlin/MPPによってどんな嬉しい ことがあるのか
設計をコードレベルで共有できるよ うになる
Android/iOSビジネスロジック共通化 アプリインターフェースパッケー ジ(Kotlin/Android) アプリインターフェースパッケー ジ(Swift) バックエンドライブラリ(Kotlin/MPP) ビジネスロジック リソースロジック Appサーバ OS
Firebase Activity, Fragment View ViewControll er View
更にサーバもKotlinにしてしまえば APIの型中間表現とか不要になっ て。。 とか考えると夢が膨らみますね。
で、実際のところその設計はどの程 度まで実現できるの?
A: Androidは問題なく動く
A: iOSは不可侵領域に踏み込まな ければ動く 以降のiOSの場合の話はKotlin/Native(以降K/N)の 厄介さの話です。 Kotlin/JVMを触ってる限りは考慮に入れるひつようは ありません。
不可侵 領域
バックグラウンドスレッド
不可侵領域: バックグラウンドスレッド Kotlin 1.3 ではバックグラウンドスレッドはサポートされていな い。 KotlinにはMPPをサポートする非同期処理として Coroutine がある。これを使用してスレッドを切り替えることはもちろん、 バックグラウンドスレッドで実行されている
Swiftコードから呼 び出すのもダメ。 これは、後述するfreezeルールと関連する。
freezeルール
不可侵領域: freezeルール class Sample { var value: Int = 0
fun increment(): Int { value++ Log.d("incremented: $value") return value } } 問題: increment() メソッドは必ず元の値から +1された値を返 すでしょうか?
答え: NO
不可侵領域: freezeルール class Sample { var value: Int = 0
fun increment(): Int { value++ Log.d("incremented: $value") return value } } メンバ変数はスレッド間で共通のため、トランザクション分離レ ベルを意識する必要がある。 この間に別Threadで increment()が走るかもし れない
不可侵領域: freezeルール K/Nではこのメンバ変数のトランザクション分離レベルの問題 を回避するためにfreezeの制約が存在する。 メンバ変数に実体を置く時は、freezed内部フラグを立てて、 変数をimmutableにしないと、他のスレッドで触ることが出来 ない。
不可侵領域: FAQ • シングルトンの場合freezeルールどうなるの? ◦ そこが、Mainスレッド以外で動作が保証されない理由 ◦ 副作用の無い処理なら問題ないが、副作用がある処理の 場合、適切に処理されていないと、シングルトンを instantiateしたスレッドでしか触れなくなる
• どのK/Nライブラリでシングルトンを使っているかわからない ◦ Kotlin 1.3では、K/NはMainスレッド以外は動作対象外な ので全部諦めよう。 • 非同期処理(Coroutine等)は使えないの? ◦ Mainスレッドで遅延実行すればできるよ
不可侵領域要約: Kotlin 1.3 の現状では、Mainス レッド以外が厳しみ
さて皆さんこの状況お気づきでしょう か。
Android/iOSビジネスロジック共通化 アプリインターフェースパッケー ジ(Kotlin/Android) アプリインターフェースパッケー ジ(Swift) バックエンドライブラリ(Kotlin/MPP) ビジネスロジック リソースロジック Appサーバ OS
Firebase Activity, Fragment View ViewControll er View バックエンドを共通化し たいのにバックグラウ ンドスレッドでうまく動か ないとはこれ如何に
まとめ • 普通にJVMで使う分には何も問題無い • Kotlin/Nativeに手を出すとKotlin 1.3現在ではまだ早 い • KotlinいいよKotlin
詠みます
“ 僕らは何度も共通化の夢をみる 徒花と知りつつも
ありがとうございました