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
420
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
500
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
92
Introduction of MaterialDesign for engineer
yashims
0
95
Other Decks in Programming
See All in Programming
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
21
4.4k
CDKを使ったPagerDuty連携インフラのテンプレート化
shibuya_shogo
0
130
Generating OpenAPI schema from serializers throughout the Rails stack - Kyobashi.rb #5
envek
1
450
Better Code Design in PHP
afilina
0
190
The Clean ArchitectureがWebフロントエンドでしっくりこないのは何故か / Why The Clean Architecture does not fit with Web Frontend
twada
PRO
62
21k
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.3k
はじめてのIssueOps - GitHub Actionsで実現するコメント駆動オペレーション
tmknom
5
1.7k
JAWS Days 2025のインフラ
komakichi
1
370
DevNexus - Create AI Infused Java Apps with LangChain4j
kdubois
0
150
気がついたら子供が社会人になって 自分と同じモバイルアプリエンジニアになった件 / Parent-Child Engineers
koishi
0
130
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
9
1.7k
ABEMA iOS 大規模プロジェクトにおける段階的な技術刷新 / ABEMA iOS Technology Upgrade
akkyie
1
270
Featured
See All Featured
Become a Pro
speakerdeck
PRO
26
5.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
The Cost Of JavaScript in 2023
addyosmani
47
7.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
11
560
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Unsuck your backbone
ammeep
669
57k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
270
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
660
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
詠みます
“ 僕らは何度も共通化の夢をみる 徒花と知りつつも
ありがとうございました