笔记仓库

正常人的正常笔记集

零基础开始读类型系统(Cardelli的type systems小结)

在找TAPL相关材料时,被豆瓣网友推荐先去读一下Luca Cardelli的这篇Type Systems1只有41页的小册子,当时粗略看了一下这个summary感觉很简洁易读,就放在阅读材料调查计划里差不多拖了一年没看,这两天因为一些原因找到不错的机会静下心来断断续续的读完了,观感上来说确实是让人读起来有瘾的东西,没有特别痛苦的内容,基本上是符合直觉的。对于状态良好的,有一定编程语言使用经验的,对符号逻辑有基本了解,但对编程语言类型系统没有系统性认知的人来说,原文预计需要大约一个下午的时间读完,请有相关计划的读者做好相应的规划。

Read More

词法寻址

词法寻址是Scheme这样使用词法作用域(lexical scope)即函数被调用时以函数被定义时的环境来求值的语言的编译器过程中最常见的优化之一,这部分内容对应SICP原书5.5.6 Lexical Addressing部分,你可以看到原书只是大致提了一下优化的背景和思路,具体如何做都放在习题里面了,需要自己尝试着去写实现,MIT 6.001等公开的资料更是完全没有提及。所以我参考了SchemeWiki社区给出的一些解决方案来完整实现一下这部分内容的细节描述。当然更多资源和深入的关于词法寻址的讨论可以参考其他资料1,我在这里不再多谈。

Read More

显式控制求值器

本文主要内容5.4 The Explicit-Control Evaluator寄存机器模型实现的基础上,用更底层的视角去实现The Metacircular Evaluator所实现的用Scheme去解释Scheme的元循环求值器,也就是用底层的寄存机器语言去解释Scheme程序。这部分内容没有太大的难点和痛点,在理解eval-apply循环,寄存机器操作的前提下,除了尾递归优化以外,这些内容只是普通的炒冷饭。当然从前篇可以看到这种寄存机器语言也是通过Scheme模拟解释实现的,所以最后的模拟还是Scheme $\to$ 寄存机器语言 $\to$ Scheme这样绕了一大圈,性能上肯定是让人大失所望的,不过借此机会可以清楚看到程序是如何在底层被解释的,也可以通过自定义一些监控性能的指令来观察底层执行情况。

Read More