Kotlin Fest 2019行ってきました。
https://kotlin.connpass.com/event/129860/
見たかったセッション/LT
- Kotlin コルーチンを 理解しよう 2019 ( https://speakerdeck.com/sys1yagi/kotlin-korutinwo-li-jie-siyou-2019-kotlinfest2019 )
- Kotlinの型実践入門 ( https://speakerdeck.com/satoshun/kotlin-fest-2019-kotlinxing-shi-jian-ru-men )
- Kotlin/JS の仕組み / How KotlinJS works ( https://speakerdeck.com/yukukotani/how-kotlinjs-works )
見たセッション
- 改めて学ぶContracts ( https://speakerdeck.com/tommykw/gai-metexue-hucontracts )
- Kotlin Multiplatform Project入門 ( https://speakerdeck.com/aakira/introduction-kotlin-mpp )
- フロントエンドもKotlinで書きたい! -WebページをKotlin/JSで作った軌跡- ( https://speakerdeck.com/subroh0508/jsdezuo-tutagui-ji )
- Kotlin/Nativeはなぜ動くのか?(https://speakerdeck.com/youta1119/kotlinfest2019)
改めて学ぶContracts
https://speakerdeck.com/tommykw/gai-metexue-hucontracts
改めて学べました。
そういえばcontractsとかあったなぁと思いつつ、
普段ほぼ使わないような機能なのでスルーしてたので、再度キャッチアップするいい機会になりました。
compile時に情報付加する機能なので結構発表難しかったんじゃないかと思いますが、わかりやすかったです。Goのcontractとは全然意味合いが違う。
Javaのchecker frameworkをKotlin用に再設計したような感じがしました。
初めは、コンパイル後にchecker framework使っているのかなと思いましたが、以下をコンパイルしてバイトコード見たりしてみたら全然そんなことありませんでした。
fun test() {
val x: Int
run {
// Next line is reported as ‘val reassignment’, because compiler
// can’t guarantee that lambda won’t be invoked more than once
x = 42
}
// Next line is reported as ‘uninitialized variable’, because compiler
// can’t guarantee that lambda will be invoked at least once
println(x)
}
KEEPはこれ
https://github.com/Kotlin/KEEP/blob/master/proposals/kotlin-contracts.md
stdlibはこれ
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.contracts/index.html
compilerの実装眺めていましたが、Contractsに関わっていそうな部分を一部見つけました。
https://github.com/JetBrains/kotlin/blob/master/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt
まあでもこれアノテーション読んでるだけなので面白みないですね。
// ----------- Contracts -------------------------------------------------------------------------------------------------------------------
fun KtNamedFunction.isContractPresentPsiCheck(): Boolean {
val contractAllowedHere =
isTopLevel &&
hasBlockBody() &&
!hasModifier(KtTokens.OPERATOR_KEYWORD)
if (!contractAllowedHere) return false
val firstExpression = (this as? KtFunction)?.bodyBlockExpression?.statements?.firstOrNull() ?: return false
return firstExpression.isContractDescriptionCallPsiCheck()
}
fun KtExpression.isContractDescriptionCallPsiCheck(): Boolean =
(this is KtCallExpression && calleeExpression?.text == "contract") || (this is KtQualifiedExpression && isContractDescriptionCallPsiCheck())
fun KtQualifiedExpression.isContractDescriptionCallPsiCheck(): Boolean {
val expression = selectorExpression ?: return false
return receiverExpression.text == "kotlin.contracts" && expression.isContractDescriptionCallPsiCheck()
}
fun KtElement.isFirstStatement(): Boolean {
var parent = parent
var element = this
if (parent is KtDotQualifiedExpression) {
element = parent
parent = parent.parent
}
return parent is KtBlockExpression && parent.firstStatement == element
}
contracts完全に思い出した#kotlinfest #c
— yank shaving (@yy_yank) August 24, 2019
標準関数側が見たくなるな#kotlinfest #c
— yank shaving (@yy_yank) August 24, 2019
checker frameworkをKotlin用に作ったのがContractsって理解で良さそう#kotlinfest #c
— yank shaving (@yy_yank) August 24, 2019
コンパイラの実装読んだ方が良さそう#kotlinfest #c
— yank shaving (@yy_yank) August 24, 2019
Kotlin Multiplatform Project入門
https://speakerdeck.com/aakira/introduction-kotlin-mpp
勉強になりました。
資料も、資料の端々のアニメーションも良くできていて良いなと思いました。
あと、なんか本出すらしいですね。応援しております。
発表の所々で名言が入っていて、発表原稿が良いなと思いました。
色々温度感とか含めて聴きにきてよかったなーと。
マルチプラットフォームあるあるな部分とか、ハマりポイントとかも分かりやすかったです。
multi platformに関してはkotlin conf行った人と行ってない人で温度感が違いそう。あと国内外#kotlinfest #a
— yank shaving (@yy_yank) August 24, 2019
mppはktor一択らしい#kotlinfest #a
— yank shaving (@yy_yank) August 24, 2019
フロントエンドもKotlinで書きたい! -WebページをKotlin/JSで作った軌跡-
https://speakerdeck.com/subroh0508/jsdezuo-tutagui-ji
個人的に一番聴きたかったやつです。
Kotlin/JSって実際使っている人少ない?ので貴重だしこれは聴くしかないなぁと。
(僕はJavaScript or TypeScriptでいいやってなりがちで…)
Reactの対応進んでてすごいなーと思いました。
文法とか関数は昔からあんまり変わってなかったですけど
gradle経由でnpmとかwebpack使えるとかビルド周り、下回り部分が強化されているのは分かりました。
ぶっちゃけ、やっぱシェア的なこと考えるとTypeScript > Kotlin/JSですが
Kotlinのmpp文脈ではKotlin/JS重要ですね。
Kotlin/JSはKotlinが好きな人が使うべきだなぁと。やっぱそこの感触は昔から変わらないです。
FunctionComponentとreact hooks使えないかなぁ。。
と思ってask the speakerで質問してみたら
FunctionComponentは使えるらしいです!すごい!
Kotlin/JSはReactの最新バージョンにもKotlinの最新バージョンにも追従しないとダメなのでどうやら大変らしい。
create-react-kotlin-apphttps://t.co/ksHhQx9ycf
— yank shaving (@yy_yank) August 24, 2019
#kotlinfest #c
htmlのDSLとかはそんなに目新しいものはないな#kotlinfest #c
— yank shaving (@yy_yank) August 24, 2019
+α 型定義、メソッド定義
— yank shaving (@yy_yank) August 24, 2019
わかる#kotlinfest #c
js関数便利だよね
— yank shaving (@yy_yank) August 24, 2019
domとかでかいライブラリ絡むとマジで型定義わけわからんくなるからな#kotlinfest #c
Kotlin/Nativeはなぜ動くのか?
https://speakerdeck.com/youta1119/kotlinfest2019
スライドの構成(章立て)も良くできていて、発表も聴きやすかったです。
めっちゃ発表練習したんだろうなと思いました。
Kotlin/Nativeの内部実装的なところは全然知らなかったので勉強になりました。
Kotlin/Nativeのコンパイルフェーズの説明とか特に分かりやすかったです。
結局、コンパイラ実装ってコンパイルフェーズがわかればかなり読み易くなる気がするので助かります。
へーKotlin/NativeはGC自前実装なのか#KotlinFest #a
— yank shaving (@yy_yank) August 24, 2019
PsiViwerなんてあるのか、便利#kotlinfest #a
— yank shaving (@yy_yank) August 24, 2019
Kotlin native IR つくって、llvm使ってーって流れっぽい#kotlinfest #a
— yank shaving (@yy_yank) August 24, 2019
llvm bitcodeをclang++でリンキングしている#kotlinfest #a
— yank shaving (@yy_yank) August 24, 2019
まとめ
Kotlin fest2回目ですね。
2回とも大成功で終わってて運営お疲れ様です。
僕全然関わってないけど、よく作り上げてるなぁと思います。さすが。
あとは何よりKotlinという話題に関してカンファレンスができてこれほど盛況なのは
昔のマイナー言語扱いだった時代から考えると感慨深いものがありますね。おっさんなので。
いいカンファレンスでしたーありがとうございました!
0 件のコメント:
コメントを投稿