线程A
yet a idot who loves programming
展开
-
设计的错误问题
defer好像是在Go语言中出现的,用于避免函数出错后忘记收拾残局,然而这种defer函数有被滥用的趋势。我认为这是一个值得思考的问题。我们让函数在编译期间来执行, 下面这个函数(multiply)没有任何标志在编译期间进行执行,它只是一个普通的函数,我们要求它在编译期进行执行。这样可以推断出变量的类型,所以不需要写出变量的类型,但是我认为还是写上类型比较好。语句中对同一个变量进行赋值的时候可以使用这种表达式的用法,关键字是一个标志,它指示代码区域和值必须在编译期进行计算,原创 2022-07-22 01:29:07 · 86 阅读 · 0 评论 -
MySQL 的各种索引
如果你把类型看成是一个集合(比如int是机器整数的集合), 那么void所表示的集合是个空集, 它里面是不包含任何元素的, 声明一个void变量是没有任何意义的, 因为它不可能有一个值,如果一个函数返回void, 你是没有办法将它赋值给一个变量的。, 到后来累积几个defer之后, 你就不能一眼看清楚到底哪块代码先运行哪块后运行了。位置前面的代码居然可以在后来执行,违反了代码的自然位置顺序关系。所以不要将这个玩意使用在不要cleanup的动作上面去。函数有种被滥用的趋势, 比如, 有些人把那种不是。原创 2022-07-02 15:50:13 · 385 阅读 · 0 评论 -
使用pratt算法完美解决左递归问题
语法分析, 解决运算符优先级问题原创 2022-05-22 21:56:08 · 338 阅读 · 1 评论 -
什么时候打日志,打什么级别
日志打印原创 2022-07-01 01:18:50 · 27 阅读 · 0 评论 -
Yin的备份
当你一天之内可以变出好几种不同的语言特性来的时候,体会它们的优势和缺点,理解的越深入,一切语言就在自已的把玩之中了,而不是凌驾在自已之上的神,然后虚假的荣耀感也消失了,只剩下纯粹的乐趣和享受。并不是真正的核心,仍然是衍生物品,他们不明白海龟的下面还是海龟,并没有到底,掌握真正的核心知识的人是从容不迫的,因为不管什么新的衍生知识都万变不离其宗,一看就知道是怎么回事,掌握核心知识的人完全可以自已制造出这些衍生物品,所以对待它们就不再是一幅学习的姿态,而是一种鉴赏的姿态了。所以永远不要忽略短小的代码。原创 2022-08-17 14:29:56 · 161 阅读 · 0 评论 -
【编译原理】Java手写一个词法分析器
手写一个词法分析器原创 2022-10-31 21:58:41 · 336 阅读 · 0 评论 -
【OCaml】教程1
OCaml原创 2022-06-28 16:02:47 · 441 阅读 · 0 评论 -
【编译原理】编译器前端
首先构造根节点,代表整个程序,之后向下扫描 Token 串,构建它的子节点, 当它看到一个 int 类型的 Token 时,知道这儿遇到了一个变量声明语句,于是建立一个“变量声明”节点;最后,遇到“字面量”其值是 45。这棵树叫做抽象语法树, AST,树木的每一个节点是一个语法单元, 形成ast之后的好处就是,让计算机很容易去处理,一种非常直观的构造思路是自上而下进行分析。编译器的下一个阶段是语法分析,语法分析是在词法分析的基础上面识别出程序的语法结构,这个结构就是一个树状结构,是计算机容易理解和执行的。原创 2022-08-23 17:21:31 · 1156 阅读 · 0 评论