今週は第66回を開催しました!
引き続きKotlin Hands-onをすすめています。
前回の様子はコチラ↓
[第66回の様子]
2021/6/2に第66回を開催した。
今週も先週と同じメンバーが来てくれて、自分をいれて5名だった。
今週も自分はナビゲータ役で参加。
勉強会本編の内容としては、新たにKotlin/Native Concurrencyハンズオンに着手した。第1章から第3章の冒頭までを進めた。
といっても今回はビルドに時間がかかり、実際にコードを動かしてみるところまでは行けなかった。
[学んだことや疑問点]
- Kotlin/Native Concurrency: 1. Introduction
- 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)ちょっとだけ理解できた気がする!
今週のプルリクエストはこちら。