duangsuse::Echo
幸好,我已经准备好弄内部 DSL 版的了😥
中午还没吃饭,那就不吃了,最近浪费时间第一的实践...
#JavaScript 其实最开始我是不打算用 fold 解释器的,打算直接用 eval() 处理变成 clickingOn("wtf").addsClass("") 这种形式的代码,为此还定义了一个
foldReplace(/(\S+)\s+(\S+)("[^"]*")?/, (a,b,c) => a+capitalize(b)+c?
但是发现这样没法区别处理 "" 里的东西,不得不换成兼容 ES5 的 RegExp sticky flag 分词法。
总之,这次感觉血亏,跟着一个30岁,还只会前端、冒鬼点子的大叔,也没学到写CSS。
嗯…… 也不全对,学到了个 requestAnimationFrame((t_ms) => void) 算 start/elapsed
还有魔怔的 +function(){}() 等于 (function(){})() IIFE 技巧
#JavaScript 其实最开始我是不打算用 fold 解释器的,打算直接用 eval() 处理变成 clickingOn("wtf").addsClass("") 这种形式的代码,为此还定义了一个
foldReplace(/(\S+)\s+(\S+)("[^"]*")?/, (a,b,c) => a+capitalize(b)+c?
(${c}):"", "apple fd") function capitalize(s) { return (s=="")?"" : s[0].toUpperCase()+s.substr(1, s.length); } function foldReplace(re, op, input) { var text=input; var matched=false; do { matched=false; text = text.replace(re, (_, ...args) => { matched=true; return op(...args); }); } while(matched); return text; }但是发现这样没法区别处理 "" 里的东西,不得不换成兼容 ES5 的 RegExp sticky flag 分词法。
总之,这次感觉血亏,跟着一个30岁,还只会前端、冒鬼点子的大叔,也没学到写CSS。
嗯…… 也不全对,学到了个 requestAnimationFrame((t_ms) => void) 算 start/elapsed
还有魔怔的 +function(){}() 等于 (function(){})() IIFE 技巧
每次打破计划后都不知道为什么会浪费时间(但是这次是复制粘贴的比较多,然后 EDSL 的数据封装、JS 的歧义语法差错和codegen都浪费了时间),但是站起来的时候腿软了,即便这样还要继续编程么?
#China #Freedom 写好的东西, git push 不了。
有的觉得是 http buf 和压缩的问题,有的说是要上梯子
V2Ray 下了,不知道是不是USB绑定网不能用,完全复制手机的JSON配置也不行。
真棒, GH 的 SSH 和 github.io , githubusercontent.com 都已经屏蔽了,马上中国的开发者就要分为认识GH和墙内的两拨了,嘿嘿嘿嘿嘿嘿…… 不错,真棒。
有的觉得是 http buf 和压缩的问题,有的说是要上梯子
V2Ray 下了,不知道是不是USB绑定网不能用,完全复制手机的JSON配置也不行。
真棒, GH 的 SSH 和 github.io , githubusercontent.com 都已经屏蔽了,马上中国的开发者就要分为认识GH和墙内的两拨了,嘿嘿嘿嘿嘿嘿…… 不错,真棒。
#algorithm 之前 Kotlin 的 DeepRecursiveFunction 有一个建树的示例,如果 n 指二叉树深度那对象分操作数配肯定比 O(n) 大吧……
Forwarded from Phonograph (Ralph 萌新喵)
我人傻了
互评作业,有人说他建树算法时间复杂度是
您把输入的节点遍历一遍都是
互评作业,有人说他建树算法时间复杂度是
O(log n) ❓❓❓您把输入的节点遍历一遍都是
O(n) ,好吗Forwarded from dnaugsuz
emmm
JDK 是
C++ 一般都用 OpenSSL init update finalize
JDK 是
java.util.MessageDigest C++ 一般都用 OpenSSL init update finalize
duangsuse::Echo
中午还没吃饭,那就不吃了,最近浪费时间第一的实践... #JavaScript 其实最开始我是不打算用 fold 解释器的,打算直接用 eval() 处理变成 clickingOn("wtf").addsClass("") 这种形式的代码,为此还定义了一个 foldReplace(/(\S+)\s+(\S+)("[^"]*")?/, (a,b,c) => a+capitalize(b)+c?(${c}):"", "apple fd") function capitalize(s) { return (s=="")?""…
duangsuse-valid-projects.github.io
uilang
A minimal, UI-focused programming language for web designers.
#css #js https://github.com/duangsuse-valid-projects/Share/tree/master/HTMLs/uilang/uilang.js
这个就是我的重写版本(感觉。十分鸡肋,人家的是用 trim split" & 元编程,我的是倾向于解释器&EDSL(嵌入式DSL) ,看起来就一个 onclick CSS add/remove/toggle class 的问题,不值得这么大费周章(但即便这样我的代码去掉codegen还是比他短,100行,emm )
这个就是我的重写版本(感觉。十分鸡肋,人家的是用 trim split" & 元编程,我的是倾向于解释器&EDSL(嵌入式DSL) ,看起来就一个 onclick CSS add/remove/toggle class 的问题,不值得这么大费周章(但即便这样我的代码去掉codegen还是比他短,100行,emm )
也不是 10 行之内我实现不了这个逻辑,就是写太弱类型化,感觉总是不合适(虽然JS本该如此😳
理论上这个前端虽然滥用面向对象,他的性能应该是比我高的,毕竟我是 EDSL (就要创建只含数据的字句对象)而非提数据元编程(突然觉得中缀算符优先级对DSL挺重要的啊…… clickingOn .action adds (.wtf on div) 不比纯左结合优雅)
这个就是看起来还可以,语言实现像是视图实现教程附赠的
所以我写严苛点吧…… 搞得我还没有前端熟悉编程和消模板一样
不过在重构原作者一个不会写的线性查找时我也糊涂了,
没有定义无符合的情况
原作者很不明智地新建了 codeBlock 这个同义词变量,其实应该是
,看看这个 while 的穷举居然不可以重构掉(废话),实在是草生
理论上这个前端虽然滥用面向对象,他的性能应该是比我高的,毕竟我是 EDSL (就要创建只含数据的字句对象)而非提数据元编程(突然觉得中缀算符优先级对DSL挺重要的啊…… clickingOn .action adds (.wtf on div) 不比纯左结合优雅)
这个就是看起来还可以,语言实现像是视图实现教程附赠的
所以我写严苛点吧…… 搞得我还没有前端熟悉编程和消模板一样
不过在重构原作者一个不会写的线性查找时我也糊涂了,
while (i--) {code=codes[i]; if (p(code)) break;}
没有定义无符合的情况
原作者很不明智地新建了 codeBlock 这个同义词变量,其实应该是
rfind(p, xs) { var i=xs.length; while (i--) { if (p(xs[i]) return xs[i] } return null; }
,看看这个 while 的穷举居然不可以重构掉(废话),实在是草生
今天下午在实现 Tokenizer DOM/JS 应用(基本就是包一下 Trie 树,方便咱唱有日文假名字的歌用的,这个功能苹果有,网易云音乐早就该加了哼。)
因为这个家伙设计得比较方便,可以查看字典树结构和合并后的词对应关系表(而且还能用来查单词……带自动补全草),必须设计一个字典树 string-value 遍历算法。
这个算法咱在 ParserKt 里实践过(毕竟字典树是一遍过解析关键字的重要结构),那时候写了一个纯函数(优点是没有参数所以直接 public 即可),大概就是各种 flatMap 修改合并下一层递归返回的列表啊,麻烦死了,而且性能不高
字典树这个结构也没比嵌套 Map (K-V 里 V 是 Map 的那种) 复杂多少,就是每层映射本身多对应一个『节点本身的值』而已 (比如 "stand", "standby" 里 "d" 也有存值,这种很常见的)
开始我避免了使用递归算法(虽然我最爱写递归算法了 误),想想这个遍历是嵌套 1-N 次组合,肯定要用栈,当时觉得有 keySeq, stack 这两个栈就够了(对应关系是
我开始发现现在写的算法虽然都很麻烦,但就像是思考“通项公式”一样,就是一个状态机或者操作一两个结构,明白了就很简单。
写的是每层 Trie 先给其值(如果有),然后访问它的子节点,这时候我就发现为了能递归完成这个动作,循环必须可以打断(循环的 label TypeScript 是支持的,然后要保存索引……)
我把 for in 变成
写了好多次显式栈之后,我果然还是觉得递归好,至少不需要你加 hack 。
一天半后,项目完成了,然后我突然想到了一个 #Kotlin #coroutine 必须要 executor 来执行的理由(之前一直搞不懂 runBlocking, launch 什么的是干嘛)
一个协程 yield 后要把执行权交出去,如果只是用 CPS (理解为无返回,只 callback ,但在这里收 callback 的还能恢复协程) 的话会造成调用栈不断增长,所以不能直接这样干,只能先把 Continuation 交给收它的地方,返回调度器取任务继续
关于 await/async 不知道能不能完全只用 CPS 变换来实现(反正我觉得实现起来枚举语法生成很复杂),但完整的协程是可以的。
因为这个家伙设计得比较方便,可以查看字典树结构和合并后的词对应关系表(而且还能用来查单词……带自动补全草),必须设计一个字典树 string-value 遍历算法。
这个算法咱在 ParserKt 里实践过(毕竟字典树是一遍过解析关键字的重要结构),那时候写了一个纯函数(优点是没有参数所以直接 public 即可),大概就是各种 flatMap 修改合并下一层递归返回的列表啊,麻烦死了,而且性能不高
字典树这个结构也没比嵌套 Map (K-V 里 V 是 Map 的那种) 复杂多少,就是每层映射本身多对应一个『节点本身的值』而已 (比如 "stand", "standby" 里 "d" 也有存值,这种很常见的)
开始我避免了使用递归算法(虽然我最爱写递归算法了 误),想想这个遍历是嵌套 1-N 次组合,肯定要用栈,当时觉得有 keySeq, stack 这两个栈就够了(对应关系是
stack[i] = keySeq.subSeq(0,i-1).fold(routes) { it,k -> it[k] } ,主要是缓存路径结果)我开始发现现在写的算法虽然都很麻烦,但就像是思考“通项公式”一样,就是一个状态机或者操作一两个结构,明白了就很简单。
写的是每层 Trie 先给其值(如果有),然后访问它的子节点,这时候我就发现为了能递归完成这个动作,循环必须可以打断(循环的 label TypeScript 是支持的,然后要保存索引……)
我把 for in 变成
o[Object.keys(o)[i]] 这样可以保存迭代状态(ES6 也不支持 ObjectIterator ,然后 Object.entries 在 TS 上很麻烦),写出来了(递归的话直接把 i 给 push 上去 然后 i == length 的时候就 pop),现在也感觉好不爽啊…… 索性又换成了带副作用的递归的形式。写了好多次显式栈之后,我果然还是觉得递归好,至少不需要你加 hack 。
一天半后,项目完成了,然后我突然想到了一个 #Kotlin #coroutine 必须要 executor 来执行的理由(之前一直搞不懂 runBlocking, launch 什么的是干嘛)
一个协程 yield 后要把执行权交出去,如果只是用 CPS (理解为无返回,只 callback ,但在这里收 callback 的还能恢复协程) 的话会造成调用栈不断增长,所以不能直接这样干,只能先把 Continuation 交给收它的地方,返回调度器取任务继续
关于 await/async 不知道能不能完全只用 CPS 变换来实现(反正我觉得实现起来枚举语法生成很复杂),但完整的协程是可以的。
duangsuse::Echo
今天下午在实现 Tokenizer DOM/JS 应用(基本就是包一下 Trie 树,方便咱唱有日文假名字的歌用的,这个功能苹果有,网易云音乐早就该加了哼。) 因为这个家伙设计得比较方便,可以查看字典树结构和合并后的词对应关系表(而且还能用来查单词……带自动补全草),必须设计一个字典树 string-value 遍历算法。 这个算法咱在 ParserKt 里实践过(毕竟字典树是一遍过解析关键字的重要结构),那时候写了一个纯函数(优点是没有参数所以直接 public 即可),大概就是各种 flatMap…
嗯…… 现在 github.io 没了,只好看看 coding pages 副本吧
这个墙烦死人了,还要不要程序猿活了,日你妈(指
https://github.com/duangsuse-valid-projects/Share/blob/master/HTMLs/Tokenizer/Tokenizer_es5.ts
https://duangsuse-valid-projects.github.io/Share/HTMLs/Tokenizer/?simple=a_dict.txt+a_dict.txt%3Ea_dict.txt&reverse=~a_dict.txt&text=Hello%20Rolld
这个墙烦死人了,还要不要程序猿活了,日你妈(指
https://github.com/duangsuse-valid-projects/Share/blob/master/HTMLs/Tokenizer/Tokenizer_es5.ts
https://duangsuse-valid-projects.github.io/Share/HTMLs/Tokenizer/?simple=a_dict.txt+a_dict.txt%3Ea_dict.txt&reverse=~a_dict.txt&text=Hello%20Rolld
GitHub
duangsuse-valid-projects/Share
🐕 duangsuse's shared files(e.g. productive software projects, documents) - duangsuse-valid-projects/Share