突发奇想:用 Geiser 写一个 Emacs NewLisp REPL?

我第一个好好学习的语言就是 elisp, 说实话,词法作用域我反而不太习惯,不过个人感觉elisp 慢慢也向 词法作用域转换了,许多emacs 重要的包都开始激活词法作用域了。 词法作用域+全局变量将是 elisp 的未来

命名, 赋值和环境,有时候很让人困惑, lisp 的环境看不见摸不着的东西,理解全凭想象, 后来我学习R, 这门统计语言让我喜欢的一个特性就是: 它的环境是一个hashtable,特别容易访问,验证某些观点是否正确时特别方便。。。。

所有你感兴趣的都可以在这里看到:Programming Languages: Application and Interpretation,这本书的作者也是 racket 项目组里的,所以我觉得学 racket 是个不错的选择(如果你对这些感兴趣的话)

相反,学 newlisp 你 get 不到什么东西(FOOP?),除了给技能列表上添加一个 lisp language 外(然而学后过几年不用基本上也没意义了)

关于垠神,他写 blog 有个特点,如果过去的文章里他觉得有什么不对了他会写个新文章,而不是去修订老文章。所以过几年你也会发现他写的老文章里面的谬误的。而且他在 blog 里写的关于 programming language design 的一些正确观点,你认真学 racket 也能 get 到,而且 racket 里面还有些优秀特性是垠神没说的。

最近对 the best programming language 应该是什么样已经有了一些独到的概念了,我觉得我可能会专门开一个帖子谈谈原理,制作标准,而不是花大精力让它成为下图群体中的一员:

2 个赞

然后要看的书又多了一本

看到第一章,似乎发现了环形数据结构不是 Lisp 标配。

命名空间还是很有必要的。

动态作用域结合函数变量共用命名空间代表可以用简单粗暴的列表操作玩各种 lambda。Racket 反而已经是一种更高维度的抽象的东西了。

命名空间确实是一个很好的工具, 现在elisp全部是全局变量, 想变量名字想的脑仁疼。。。