阅读王垠《怎样写一个解释器》一文后的一些体会
来源:互联网 发布:sql update多条数据 编辑:程序博客网 时间:2024/05/21 08:46
http://www.yinwang.org/blog-cn/2012/08/01/interpreter 怎样写一个解释器
R2语言实现了表达式解释器,支持单变量let绑定、函数调用、函数作为参数传递(对于FP解释器而言这实际上不是问题),讲解了文法作用域与闭包的概念。
缺点:直接利用了Racket语言的match语言,这有点偷懒,不过作者确实也说了不考虑parser的一些琐碎问题,比如优先级、歧义处理什么的。
另外,继承自LISP的[(? number? x) x]、[`(,e1 ,e2) ... 什么的,让人看着很不爽。
下面是我真正想说的一些东西:
(1)闭包捕获的是函数定义时的环境,而不是调用时的。解决了函数定义里的自由变量在调用时如何获取的问题。
(2)但是,对于解释型的脚本语言,区分文法作用域和动态作用域有点奇怪。难道说编译型语言是静态作用域?但是前者也支持JIT啊
(3)这样的话,推论:JIT解决的其实上是函数内的自由变量的运行时、也就是调用时的查找效率问题
(2)但是,对于解释型的脚本语言,区分文法作用域和动态作用域有点奇怪。难道说编译型语言是静态作用域?但是前者也支持JIT啊
(3)这样的话,推论:JIT解决的其实上是函数内的自由变量的运行时、也就是调用时的查找效率问题
(4)比如说,支持FP+OOP的一些脚本语言,比如Python、Ruby、JavaScript,对于类的成员方法,称method而不是function的,其隐式this实际上就可以认为是这里的函数的自由变量。所以JIT的重点就在于优化自由变量的查找效率,这个说法看起来一点问题都没有。令人豁然开朗。
(5)考虑到C++当初发明出来的时候,所谓的C++编译器实际上就是一个CFront前端转换宏程序,它将C++成员方法里的隐式this转换成了C语言里的显式参数。C/C++这类静态作用域语言实际上不支持闭包,——直接引用全局变量只能被看作动态作用域。
0 0
- 阅读王垠《怎样写一个解释器》一文后的一些体会
- [王垠系列]怎样写一个解释器
- 怎样写一个解释器
- 怎样写一个解释器
- 怎样写一个解释器
- 怎样写一个解释器
- 怎样写一个解释器
- 怎样写一个解释器
- 怎样写一个解释器
- [转]怎样写一个解释器
- 王垠:怎样写一个解释器
- 怎样写一个解释器 --没看懂
- [转载]怎样写一个解释器
- 阅读源代码的一些体会
- 怎样写一个解释器_王垠_新浪博客
- 怎样写一个解释器-- 记录一下,请勿删
- 阅读redis源代码的一些体会
- 写一个brainfuck语言的解释器
- SQL— CONCAT(字符串连接函数)
- JAVA学习(4)位运算
- Centos7安装RocketMQ及配置测试
- 做编程开发,要偏执
- jetbrain的产品注册,webstorm,idea 注册
- 阅读王垠《怎样写一个解释器》一文后的一些体会
- Linux C编程章节五:网络编程
- 队列列列列!!!!!
- ImageLoaderUtils配置
- python 正则表达式
- 孤独者的自我救赎[自我的认知]
- LeetCode 291. Word Pattern II
- WinSock IO模型
- JavaScript原生事件机制