Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How useful Kotlin/Native in Kotlin 1.3

How useful Kotlin/Native in Kotlin 1.3

Masaya Yashiro

July 21, 2020
Tweet

More Decks by Masaya Yashiro

Other Decks in Programming

Transcript

  1. Kotlin/Nativeで今どこまで
    できるか
    2020-07-20
    吉祥寺.pm #23
    @yashims85

    View Slide

  2. 誰?
    名前: 屋代昌也
    会社: 株式会社モバイルファクトリー
    Twitter: @yashims85
    Github: yashims

    View Slide

  3. View Slide

  4. 皆さんPerlのどういったところが好
    きでしょうか?

    View Slide

  5. Perlで私が好きなところ
    ● コーディングスタイルの自由度が高い
    ● 書き捨てのコードも書きやすい
    ● 資産が豊富
    ● XSである程度早く実行することもできる
    ● 正規表現が楽
    ● 言語レベルまでハックできる
    触ってて面白い言語だと感じてます。もしあなたがこの辺に好
    感を感じるなら、そんなあなたにおすすめしたい言語がありま
    す。

    View Slide

  6. Kotlin

    View Slide

  7. Kotlinではどの程度カバーできるか
    コーディングスタイルの自由度が高い 常識の範囲内で高い
    書き捨てのコードが書きやすい スクリプトとして実行できる
    資産が豊富 Javaの資産を使える(JVMでは)
    XSである程度早くできる Kotlin/Nativeで機械語出力もできる
    正規表現が楽 特段楽ではない
    言語レベルまでハックできる できない

    View Slide

  8. 今日話したいこと
    ● Kotlin/Nativeで何?
    ● Kotlin/Nativeで今どこまでできるのか

    View Slide

  9. Kotlin/Native
    ● もともとJVM言語として作られたKotlinの拡張
    ● Kotlin 1.3 からpreview版として使用可能
    ● KotlinのコードをLLVMでクロスコンパイルして機械語を
    吐き出そうという試み
    ● Kotlin/NativeとともにKotlin/JS拡張も平行で進行中

    View Slide

  10. Kotlin/JVM
    Kotlin/Native
    Kotlin/JS

    View Slide

  11. 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

    View Slide

  12. Kotlin/MPPによってどんな嬉しい
    ことがあるのか

    View Slide

  13. 設計をコードレベルで共有できるよ
    うになる

    View Slide

  14. Android/iOSビジネスロジック共通化
    アプリインターフェースパッケー
    ジ(Kotlin/Android)
    アプリインターフェースパッケー
    ジ(Swift)
    バックエンドライブラリ(Kotlin/MPP)
    ビジネスロジック
    リソースロジック
    Appサーバ OS Firebase
    Activity,
    Fragment
    View
    ViewControll
    er
    View

    View Slide

  15. 更にサーバもKotlinにしてしまえば
    APIの型中間表現とか不要になっ
    て。。
    とか考えると夢が膨らみますね。

    View Slide

  16. で、実際のところその設計はどの程
    度まで実現できるの?

    View Slide

  17. A: Androidは問題なく動く

    View Slide

  18. A: iOSは不可侵領域に踏み込まな
    ければ動く
    以降のiOSの場合の話はKotlin/Native(以降K/N)の
    厄介さの話です。
    Kotlin/JVMを触ってる限りは考慮に入れるひつようは
    ありません。

    View Slide

  19. 不可侵
    領域

    View Slide

  20. バックグラウンドスレッド

    View Slide

  21. 不可侵領域: バックグラウンドスレッド
    Kotlin 1.3 ではバックグラウンドスレッドはサポートされていな
    い。
    KotlinにはMPPをサポートする非同期処理として
    Coroutine
    がある。これを使用してスレッドを切り替えることはもちろん、
    バックグラウンドスレッドで実行されている
    Swiftコードから呼
    び出すのもダメ。
    これは、後述するfreezeルールと関連する。

    View Slide

  22. freezeルール

    View Slide

  23. 不可侵領域: freezeルール
    class Sample {
    var value: Int = 0
    fun increment(): Int {
    value++
    Log.d("incremented: $value")
    return value
    }
    }
    問題: increment() メソッドは必ず元の値から +1された値を返
    すでしょうか?

    View Slide

  24. 答え: NO

    View Slide

  25. 不可侵領域: freezeルール
    class Sample {
    var value: Int = 0
    fun increment(): Int {
    value++
    Log.d("incremented: $value")
    return value
    }
    }
    メンバ変数はスレッド間で共通のため、トランザクション分離レ
    ベルを意識する必要がある。
    この間に別Threadで
    increment()が走るかもし
    れない

    View Slide

  26. 不可侵領域: freezeルール
    K/Nではこのメンバ変数のトランザクション分離レベルの問題
    を回避するためにfreezeの制約が存在する。
    メンバ変数に実体を置く時は、freezed内部フラグを立てて、
    変数をimmutableにしないと、他のスレッドで触ることが出来
    ない。

    View Slide

  27. 不可侵領域: FAQ
    ● シングルトンの場合freezeルールどうなるの?
    ○ そこが、Mainスレッド以外で動作が保証されない理由
    ○ 副作用の無い処理なら問題ないが、副作用がある処理の
    場合、適切に処理されていないと、シングルトンを
    instantiateしたスレッドでしか触れなくなる
    ● どのK/Nライブラリでシングルトンを使っているかわからない
    ○ Kotlin 1.3では、K/NはMainスレッド以外は動作対象外な
    ので全部諦めよう。
    ● 非同期処理(Coroutine等)は使えないの?
    ○ Mainスレッドで遅延実行すればできるよ

    View Slide

  28. 不可侵領域要約:
    Kotlin 1.3 の現状では、Mainス
    レッド以外が厳しみ

    View Slide

  29. さて皆さんこの状況お気づきでしょう
    か。

    View Slide

  30. Android/iOSビジネスロジック共通化
    アプリインターフェースパッケー
    ジ(Kotlin/Android)
    アプリインターフェースパッケー
    ジ(Swift)
    バックエンドライブラリ(Kotlin/MPP)
    ビジネスロジック
    リソースロジック
    Appサーバ OS Firebase
    Activity,
    Fragment
    View
    ViewControll
    er
    View
    バックエンドを共通化し
    たいのにバックグラウ
    ンドスレッドでうまく動か
    ないとはこれ如何に

    View Slide

  31. まとめ
    ● 普通にJVMで使う分には何も問題無い
    ● Kotlin/Nativeに手を出すとKotlin 1.3現在ではまだ早

    ● KotlinいいよKotlin

    View Slide

  32. 詠みます

    View Slide


  33. 僕らは何度も共通化の夢をみる
    徒花と知りつつも

    View Slide

  34. ありがとうございました

    View Slide