Needed 1+1, built a functional programming language
11 hours ago
- 从二叉树算术表达式求值器开始,发现运算符可以泛化为函数(如Add、Sub等均接受两个操作数并返回一个值),因此求值器只需应用对应函数即可。
- 添加了变量功能,并为环境实现了自定义哈希表,因为C语言缺乏内置的哈希表结构。
- 构建了带标签的联合节点结构(Literal、Var、Func),随后又增加了闭包节点,将用户自定义函数表示为树形结构而非不透明的C函数指针。
- 开发了区域分配器以减少内存分配开销,然后升级为块链式分配器(通过链表管理内存块),避免内存扩展时指针失效的问题。
- 实现了标记-清除垃圾回收器用于回收不可达节点,将fib(40)的内存占用从约12GB降至约1.7MB。
- 注意到仍有性能问题(fib(40)耗时6分钟),原因包括指数级算法和停止世界型垃圾回收,计划未来通过尾调用优化和并发回收进行改进。
- 总结了成果:代数数据类型表示、可修改节点的图求值器、环境表、自定义块链式分配器以及标记-清除垃圾回收器。