- 论坛徽章:
- 2
|
回复 8# OwnWaterloo
前面scheme的优势说掉了一个。。。 尾调用优化。。。
我知道的语言使用严格求值的语言只有scheme, lua, scala是语言保证支持的。 cl是implementation details, 一些支持一些不支持。
在非严格求值的语言里尾调用的含义不一样,没有可比性。
这里个人认为学院派是对的,有语言保证的尾调用优化与没有语言保证的尾调用优化,代码的写法都完全不一样。
scheme的优势:尾调用优化+continuation,没了。
lexical scope only? 前面提到的3种lisp,el,cl,clojure都是混合型的。 el在24之前是默认dynamic, lexical 要麻烦一些。 24之后就与cl, clojure一样是默认lexical, 也支持dynamic。
lisp-1? 这只是权衡,与lisp-2之间各有优劣。
卫生宏? make simple thing simpler, make hard thing harder。
Minimalism? 理论上是对的, 实践里行不通。 roll your own的言外之意就是还会有roll their own。
本来语言与host环境(大部分都是C)之间的boundary就是个麻烦事情,Minimalism还会导致各种roll xxx own之间的boundary。
连个data structure库都要东拼西凑,搞毛啊。
而其他的feature稍微现代点的语言里哪个没有?
总之,scheme适合学习,学习语言的core可以精简到什么程度,可以在这些尽量减少限制的core上实现各种features。
但实践和学习是两码事。实践里scheme"语言"这种哲学行不通。而如果是scheme的"某种实现",投入实际使用前还请三思而行。 |
|