Hegel2011的博客

读书 - 工作 - 生活 - 笔记

Every Language Will Implement a Lisp Interpreter in Itself

H&P里面这句话起初还有点琢磨不过来,后来看了下jstl等东西,这不就是表达式在java中的一个实现么。

从头开始讲的话,需要从web开发讲起。Web中最耗开发时间的是页面的开发,因为在这个环节一切编程的好东西都是没有引入的。比如C的头文件有include检察, 而css依然一团乱;其他语言有的各类引用机制,到了页面全部木有。而在页面上的代码,主要有下面两种模式:

  • <% %> <%= %>这样的代码嵌入
  • 代码标签及各类膜拜,如jstl标签,struts2标签,velocity模板等

仔细观察,可以发现第二种代码标签和模板其实就是实现了一套语言解析器。往往Java的就用Java实现,有些语言就用自己的实现。 正好印证了Paul的话。为了应付实际的表达困难,表达力弱一些的语言不得不自建一套类Lisp的语言表达解释器

所以,表达力越差(可以理解成 啰嗦、信息量低)的语言,其搭配的解释器可能越五花八门,因为<% %>是很难适应这类语言嵌入在Html中的需求的。而能力强的语言,则模板就要少许多, 因为语言本身的表达力强大,使得再造一套标签显得很没有必要,自然也就无人发明此类模板。

从表达力而言,Java确实较次些。按Paul的理论那就Ruby更接近Lisp。

Included file 'twitter_sharing.html' not found in _includes directory