/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
热泪盈眶
真正懂得设计的程序设计语言
何必那么多 DSL、何必那么多语法、何必那么多变通
只需要一个 大家都应该了解的、最简单却最富有表现力的表示
关注问题本身
像这种就属于不必要的抽提,必须内联进去 #Kotlin
> Task :parserkt-util:compileKotlinJs FAILED
e: java.lang.StackOverflowError
at kotlin.collections.ArraysKt___ArraysKt.map(_Arrays.kt:8888)
at org.jetbrains.kotlin.name.FqNameUnsafe.pathSegments(FqNameUnsafe.java:158)
at org.jetbrains.kotlin.name.FqName.pathSegments(FqName.java:98)
at org.jetbrains.kotlin.descriptors.FindClassInModuleKt.findClassifierAcrossModuleDependencies(findClassInModule.kt:24)
at org.jetbrains.kotlin.descriptors.FindClassInModuleKt.findClassAcrossModuleDependencies(findClassInModule.kt:40)

辣鸡 Kotlinc 又出错了
/tmp/duangsuse.sock
> Task :parserkt-util:compileKotlinJs FAILED e: java.lang.StackOverflowError at kotlin.collections.ArraysKt___ArraysKt.map(_Arrays.kt:8888) at org.jetbrains.kotlin.name.FqNameUnsafe.pathSegments(FqNameUnsafe.java:158) at org.jetbra…
我通过 undo last commit 逐个排查修改文件后已经找到了原因,的确是 inline type parameter 的问题

作为一个 Kotlin 程序员的爱心…… 虽然此 bug 有 workaround,但我还是把它提交给 JetBrains 的好
现在正在撰写最小 problem file
This media is not supported in your browser
VIEW IN TELEGRAM
[duangsuse@susepc tmp]$ kotlinc-js SOE.kt -output a.js
exception: java.lang.StackOverflowError
at org.jetbrains.kotlin.js.translate.expression.ExpressionVisitor.getPrimitiveClass(ExpressionVisitor.java:303)

成功重现 bug,正在简化问题文件
inline fun <reified T: Any> T.compareUsing(other: Any?, crossinline compare: T.(T) -> Boolean): Boolean {
if (this === other) return true
return other is T && compare(other)
}

interface Animal<FOOD> where FOOD: Comparable<FOOD> {
val food: FOOD
}

abstract class BaseAnimal<FOOD>(override val food: FOOD): Animal<FOOD> where FOOD: Comparable<FOOD> {
override fun equals(other: Any?) = compareUsing(other) { food == it.food }
}

这是基本问题输入,即便我不用 intersection upper-bound 也是一样

inline fun <reified T> T.causeBug() {}

interface SomeToImplement<SOME_TVAR>

interface SomeInterface<T> where T: SomeToImplement<T> {
val field: T
}

abstract class SomeChild<T>(override val field: T): SomeInterface<T> where T: SomeToImplement<T> {
fun op() = causeBug()
}
即便 causeBug 的 T 不是 receiver 也是一样
只有在 SOME_TVAR 包含对继承自自己的 Type 的引用时候才会引发无尽递归
T: SomeToImplement<Int> 则不会引起 bug

inline fun <reified T> T.causeBug() {}

interface SomeToImplement<SELF_TVAR>

interface SomeInterface<T> where T: SomeToImplement<T>

abstract class SomeChild<T>: SomeInterface<T> where T: SomeToImplement<T> {
fun op() = causeBug()
}
提交了这个 bug 就去睡觉~ 但愿能尽早修复
StackOverflowException when using reified recursive bound for type parameter in Kotlin2Js

https://youtrack.jetbrains.com/issue/KT-37128
提交了
Forwarded from Deleted Account
object Yes {
fun main(vararg args: String) {
while(true) println(args.firstOrNull() ?: "y")
}
}

(迫真)buffer 什么的就算了
鸡它太美……
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-dsl-marker/index.html
@DslMarker annotation class HtmlTag
@HtmlTag class TagHtml()
@HtmlTag class TagHead()

结果 html { head { head {} } } 同名 member 就可以 closest one wins 吗……

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-builder-inference/index.html

无法理解,表述太复杂,看示例是能从 fun <T> (op: @DslMarker Receiver<T>.() -> Unit) 这样的 function argument 推导出 T 一样
HomoOS: 🌚???
Forwarded from POTUS
Forwarded from Deleted Account
不懂为什么要这么画
这片蓝色本应人人平等
可是有些国家的水更蓝一些
高科技,呵呵。
Forwarded from POTUS