Lisp 是如何编译的?

126 views
Skip to first unread message

Soar Tsui

unread,
Nov 22, 2013, 12:04:36 PM11/22/13
to lis...@googlegroups.com
……在这里也发一个贴,这是我一直没想通的,如Scheme 具有动态类型却又有很多编译器……

Liu Cheng

unread,
Nov 22, 2013, 8:25:13 PM11/22/13
to lis...@googlegroups.com
很简单,编译出来的代码里面也是诸如检查类型,然后做对应操作这样的指令。
这个只是动态检查和静态检查的区别,静态类型语言中也会有这种东西,比如如果语言规定自动阻止数组越界访问,那么这个事情就只能在运行期干。

只是你要优化的话,很大的一部分工作就是尽可能静态分析出每个位置上每个变量可能的类型,尽可能消除类型检测的代码,比如
(if (pair? x)
(car x))
解释的时候car会检查x的类型,不是pair就报错,但是静态分析可以发现这时x只能是pair类型就可以直接取第一项了

scheme的编译器主要优化点其实不再这里,探讨的比较多的一般都是怎么处理闭包什么的


2013/11/23 Soar Tsui <tio...@gmail.com>:
> ……在这里也发一个贴,这是我一直没想通的,如Scheme 具有动态类型却又有很多编译器……
>
> --
> --
> Lisp-cn(Lisp中文用户组)
> CLUG http://lisp.org.cn
>
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+u...@googlegroups.com
> 要查看更多选项,请访问 https://groups.google.com/groups/opt_out

tio...@gmail.com

unread,
Nov 23, 2013, 12:13:18 AM11/23/13
to lis...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages