2019/08/24 このエントリーをはてなブックマークに追加 はてなブックマーク - Kotlin Fest 2019に行ってきました

Kotlin Fest 2019に行ってきました

カテゴリ: ,



Kotlin Fest 2019行ってきました。
https://kotlin.connpass.com/event/129860/




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
}

https://speakerdeck.com/aakira/introduction-kotlin-mpp

勉強になりました。
資料も、資料の端々のアニメーションも良くできていて良いなと思いました。
あと、なんか本出すらしいですね。応援しております。
発表の所々で名言が入っていて、発表原稿が良いなと思いました。
色々温度感とか含めて聴きにきてよかったなーと。

マルチプラットフォームあるあるな部分とか、ハマりポイントとかも分かりやすかったです。


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の最新バージョンにも追従しないとダメなのでどうやら大変らしい。


https://speakerdeck.com/youta1119/kotlinfest2019

スライドの構成(章立て)も良くできていて、発表も聴きやすかったです。
めっちゃ発表練習したんだろうなと思いました。

Kotlin/Nativeの内部実装的なところは全然知らなかったので勉強になりました。
Kotlin/Nativeのコンパイルフェーズの説明とか特に分かりやすかったです。
結局、コンパイラ実装ってコンパイルフェーズがわかればかなり読み易くなる気がするので助かります。


Kotlin fest2回目ですね。
2回とも大成功で終わってて運営お疲れ様です。
僕全然関わってないけど、よく作り上げてるなぁと思います。さすが。

あとは何よりKotlinという話題に関してカンファレンスができてこれほど盛況なのは
昔のマイナー言語扱いだった時代から考えると感慨深いものがありますね。おっさんなので。

いいカンファレンスでしたーありがとうございました!




0 件のコメント:

コメントを投稿

GA