/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
Forwarded from Deleted Account
我怎么觉得这个人的函数式风格很莫名其妙,感觉是强行函数式而对问题毫无设计。
Forwarded from Deleted Account
草 风格好清奇 这居然是函数式…… 不就是 ('0'..'9') + ('A'..'F') 这居然能写成 while loop 还起 arr 这么莫名其妙的名字…… 而且作为 val initializer 还是只执行一遍的那种……
Forwarded from Deleted Account
这居然是”函数式“,我看这种函数式不过比其它编程方法多个高大上的 J, iff, World, StateMachine, FContext, Facade 而已嘛

我不知道类似这般的函数式除了把 feed.next() 直到 defaultValue : (parse cs) / (op c) : (parse cs) 直到各种各样的数据实例编码控制流越写越复杂,还能多解决什么实际问题
它们不仅仅不好用,而且也不见得 Haskell GHC 这么学术的编译系统就有啥不得了的优化,它们就是”毛泽东思想“,迷信吃枣药丸。
Forwarded from Deleted Account
不能解决问题的函数式是垃圾函数式
尤其是这种连理论问题都解决得跟 前端 C++ 后端杂交一样的
屑函数式编程
Forwarded from Deleted Account
就是引用透明嘛
Forwarded from Deleted Account
鼓吹自己是函数式的项目是屑
Kotlin 的 Arrow (functional stdlib) 是屑
Forwarded from Deleted Account
想处理错误就能处理,不想就可以不处理,这才是正经编程实践错误处理方式
弄个 Either 在那里说什么 (Either a b) 啊谁都搞不懂弄啥子,更多 boilerplate 还不如原生 Result
Forwarded from Deleted Account
所以函数式=屑(迫真)
因为真正的函数式从不自称函数式(迫真)
Forwarded from Deleted Account
我知道,我的意思是如果有 exception 不应该用 callcc
Forwarded from Deleted Account
迫真函数式
明明有更加函数式的风格非要用愚蠢的 loop
还甚至用了 var i = 0 和 val arr,真是蠢死了的 JavaScript 风格
不愧是前端的长期项目。
作者的迫真函数式编程水平由此可见一斑,这么简单的问题都能屑写出十行我真的怀疑此项目 TM 有7个子项目是不是包括了 810 个烂定义
Forwarded from Deleted Account
屑写法:
val arr = IntArray(114.514.toInt())
var i = 0
while (i++ < 10) arr[i + '0'.toInt()] = i
i = 0
while (i__ < 16) arr[i + 'a'.toInt()] = 10+1
正规写法
val arr = run {
val hexMaps = (0..9).map { '0'.toChar()+it to it } + (10..15).mapIndexed { 'a'.toInt()+it to it }
return@run hexMaps.toIndexedArray()
}
inline fun <reified T> Collection<Pair<Int, T>>.toIndexedArray(): Array<T> {
val first = firstOrNull() ?: return emptyArray()
val ary = Array(size) {first}
forEach { val (i, x) = it; ary[i] = x }
return ary
}

即便屑写法 homo 比正规写法快 114514 倍,程序员也要克服自己的 1919 种怨念,重复写 810 遍方可修成正果(迫真)

我可是很正经的,请物理论 谢谢茄子。
Deleted Account
屑写法: val arr = IntArray(114.514.toInt()) var i = 0 while (i++ < 10) arr[i + '0'.toInt()] = i i = 0 while (i__ < 16) arr[i + 'a'.toInt()] = 10+1 正规写法 val arr = run { val hexMaps = (0..9).map { '0'.toChar()+it to it } + (10..15).mapIndexed { 'a'.toInt()+it…
分析一个循环的关键点是在它起始时相关变量的状态,以及终止条件。

val i=0; while (i++ < 10)i in (0 until 10)
只不过最后离开循环体时 i = 11
val i=0; while (++i < 10)
不一样的地方是 ++i 的版本 in (1 until 10) 少循环一次
最后 i=10
Forwarded from Deleted Account
extra/lsof 4.93.2-1 [已安装]
Lists open files for running Unix processes
Forwarded from Deleted Account
lsof -t path 可以查打开路径的 pid
lsof -p pid 可以查 pid 打开的所有路径
写个 ParserKt 我还用 tokenizer+parser 的形式我是什么病啊我…… 🤪
Forwarded from Deleted Account
好看的外表不如有趣的灵魂 🌚
Forwarded from Deleted Account
确认过时延,遇见对的大佬
Forwarded from Deleted Account
在 ParserKt 里甚至很难跳过空格,即便在使用 tokenizer+parser 的实现模式…… 这个得优化
虽然主推的当然是 scannerless parsing,但是为了秀操作当然是什么基本方法都是可以兼容的(大嘘)
Forwarded from Deleted Account
一旦用上 tokenizer+parser,ParserKt 的代码质量和灵活性瞬间下降了一个等级
我大概是要讽刺 Lex/Yacc style 的,emmm…… 🤪