duangsuse::Echo
705 subscribers
4.22K photos
127 videos
583 files
6.43K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
唉,果然还是工程上的事人多些吧。 Kotlin 的解析组合子库,除了 ParserKt 外只用一两个,太无聊了…… 算上 JVM Java Scala 的估计也不多。
现在的 JVM 程序员怎么思想都这么封闭…… parser generator 倒是见过不少
https://github.com/taocpp/PEGTL 草,开始我点进去的时候还害怕这个库非常易读,没想到还是传统 C++……
struct sign: one<'+', '-'> {};
struct integer: seq<opt<sign>, digit> {};

就是
val sign = elementIn('+','-').toDefault('+').convert { it == '-' }
val signDigit = Seq(sign, digit).convert { if (e1) -digit else digit }
啦。
为什么这个道理这么简单,但是明明是大佬的人却不懂…… 我以为高等的 C++ 程序员就会明白,命名不是越短越好、定义不是越长越好;可是为什么我看过那么多框架,懂得精炼的人却那么少。

太聪明了…… 聪明反被聪明误么

parser combinator 是老东西,可是为什么作者凭这个就能叫 "The Art of C++" 呢?还是缺少点文档之提纲吧……

不过我真的喜欢 taocpp 的项目,很有水准而且可以说是“完美符合常规”的 C++ 编程之道
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
https://github.com/taocpp/PEGTL 草,开始我点进去的时候还害怕这个库非常易读,没想到还是传统 C++…… struct sign: one<'+', '-'> {}; struct integer: seq<opt<sign>, digit> {}; 就是 val sign = elementIn('+','-').toDefault('+').convert { it == '-' } val signDigit = Seq(sign, digit).convert { if…
其实仔细想想,这行凭能力说话,大佬永远是不会差的。
与其把心思放在猜测每个接口程序员乃至用户会如何使用,还不如好好研究下算法和数学思想,我是智商不够用,被迫选择干这种低劣愚蠢的“优化”的。

既然这么简单都没人用,显然是别人已经知道了也抛弃了,库的作者应该是为算法、技巧和自己的名誉服务,怎么可能应该是给使用它的东西服务? 看来我想得太多
草,凭借这样的接口能拿 1.4k star ,真是佩服 JS 程序员们了……
duangsuse::Echo
4.3K 了
草…… 说起来我今天又靠整日坐+熬夜 把 subcommand 写出来了…… 其实实现思路不咋高大上,而且 可能有缺点。
这样即便能比上另外的库,对我而言又有什么意义……
因为苹果商店审核通过了这次更新,所以他们删除了阴阳怪气的话语
你依然可以在网页存档欣赏这段话
嗯…… 写完了。 明天开始给 funcly-PKT 写测试了,写完测试和 unparse 我就走…… 因为 Kamet 的设计不需要所以不写 Layout 解析和 LexicalScope 解析了,赶快 publish 的好
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from 层叠 - The Cascading
网友的想象力是无止境的……

https://t.me/lychee_wood/17004
不过说句实话 @Telegram 好像支持 GIF 头像了吧? 🤔 #Telegram
Forwarded from dnaugsuz
嘛,吃早饭的时候想到 ParserKt 跳过 Expr 里的 /* 注释的问题,说是不可能完成(因为要 lookahead),发现是我错怪它了……
它读取 Expr 链用的是 InfixPattern ,而这个 Pattern 接收的是 Pattern<Char, InfixOp<T>> 所以只要给 Trie 外面包层 Piped.decide, 然后如果是 /* 就返回一个跳到 */ 的解析器,否则 always(op) ,实际上是可以实现,只不过那个跳到 */ 的Pattern超级难写,而且这个做法超级鸡肋而已(只为区别除号和注释就得在 Trie 外再包一层…… 还不如允许 lookahead 开销小呢)
Forwarded from dnaugsuz
不过我是真打算抛弃老的 ParserKt 了…… 看起来 crossinline 更有魅力一些,而且老版的代码虽然不冗余但也有很多比较鸡肋的功能,对实践的意义有疑问,而且新版一样支持 Trie,NumUnit,Lexical,Layout 这样复杂的 pattern 和 unparse ,只不过就不能写 !element('x') 这种利用 OOP PatternWrapper 的特性了。
草,花了好长时间就做了个 logo …… 而且动画还要另做