第66回Kotlin dojoを開催した

今週は第66回を開催しました!

引き続きKotlin Hands-onをすすめています。

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

 

 

[第66回の様子]

2021/6/2に第66回を開催した。

 

今週も先週と同じメンバーが来てくれて、自分をいれて5名だった。

今週も自分はナビゲータ役で参加。

 

勉強会本編の内容としては、新たにKotlin/Native Concurrencyハンズオンに着手した。第1章から第3章の冒頭までを進めた。

といっても今回はビルドに時間がかかり、実際にコードを動かしてみるところまでは行けなかった。

 

[学んだことや疑問点]

  • Kotlin/Native Concurrency: 2. Simple State
    • まずは単純な状態から(グローバルでも、マルチスレッドでもない)
    • サンプルコードは以下のとおり
fun runSimpleState(){
    val s = SimpleState()
    s.increment()
    s.increment()
    s.report() // My count 2
    s.decrement()
    s.report() // My count 1
}

class SimpleState{
    var count = 0

    fun increment(){
        count++
    }

    fun decrement(){
        count--
    }

    fun report(){
        println("My count $count")
    }
}
    • この状態はfrozenでないので、可変である
    • frozenという新しい概念が出てきたが、よくわからない。次の章のタイトルが「Frozen State」なのでとりあえず先に進んでみることに。
    • なお、この時点ではプロジェクトをクローンしてビルドしている途中だったので、実際にコードを動かすところまでは辿り着けず
  • Kotlin/Native Concurrency: 3. Frozen State
    • Kotlin/Nativeではfrozenでない状態は、可変mutableである
    • 概念的には、JavaScriptのObject.freeze()やRubyのfreeze()とおなじ
    • Kotlin/Nativeではすべてのクラスにfreeze()関数が定義されている
    • freeze()を実行すると関連するもの全てをfrozenで不変にする
    • 一度frozenになると、スレッド間で状態を共有できる(変更はできない)
    • isFrozenプロパティでfrozenかどうかを判別できる
fun freezeSomeState(){
    val sd = SomeData("Hello 🐶", 22)
    sd.freeze()

    println("Am I frozen? ${sd.isFrozen}") // Am I frozen? true
}

data class SomeData(val s:String, val i:Int)
    • ここまで読んだところで、IntelliJのビルドがおわった。コードを実行してもらおうとしたが、実行時にモジュール不足のエラーが出てしまいうまくいかず、時間切れで終わった。(あとで確認してもらったところ、CentOSで実行する場合にはlibtinfo.so.5というモジュールが必要だった模様)

 

[まとめ]

モブプログラミング・スタイルで、Kotlin/Native Concurrencyハンズオンを進めた。

Kotlin/Nativeの新しい概念(frozen state)ちょっとだけ理解できた気がする!

 

今週のプルリクエストはこちら。

github.com