javascript - javascript实际上是一个Lisp方言?

  显示原文与译文双语对照的内容

我的一位朋友提请我注意 4th 欧洲Lisp研讨会的欢迎消息:

。implementation任何Lisp方言,包括 Common Lisp,Scheme,Emacs Lisp,AutoLisp,ISLISP,ACL2,,,。

然后询问ECMAScript是否真的是Lisp方言。 它真的能被视为? 为什么?

是否有良好的定义和清晰的标准,帮助我们检测一种语言是Lisp的方言。 或者是以非常松散的意义( 在这种情况下,我们可以添加 python 。Perl 。Haskell 。等等 列表)?

时间:

他希望用类似语言的语言,但他最终不得不做一些类似于C 和Java的事情,而不是像函数语言那样 worked 。

我个人认为,这是一个不必要的拉伸调用,但每个人自己。 实际Lisp的关键点似乎是数据结构符号和代码符号相同的特性,并不是 true ( 或者 ruby 或者 python,或者其他任何动态函数语言,而非 Lisp ) 。

警告:我没有Lisp凭据:- )

这不是很多功能根,但现在还有很多不同的lisp语言,如你指出的那样。

Lisps还有一个特性使它们成为 Lisps,这就是lisp代码是用lisp数据结构( homoiconicity ) 编写的。 这就是lisps强大的宏系统,以及为什么它看起来如此的bizzare而非 lispers 。 函数调用只是一个列表,其中列表中的第一个元素是函数的NAME 。

由于lisp代码只是lisp数据,因这里可以使用元编程来完成一些非常强大的事情。 许多 lisps,甚至像clojure一样,大部分都以一组宏的形式实现。

尽管我不会调用 of,但是我认为,比大多数主流语言更类似于Lisp方法。

本质上,与Lisp一样,它是基于非类型化lambda演算的一种简单命令式语言。

其次,在JavaScript中嵌入文本数据( 。以lambda表达式的形式包含代码) 很容易,因为它的一个子集等价于 JSON 。 这是一个常见的Lisp Pattern 。

第三,它的价值和类型的模型是的,非常 。 它是面向对象的对象,所有值都具有身份概念,但它并不特别面向大多数 narrower 。 和Lisp一样,对象是非常动态的。 代码通常分为函数单元,而不是类。

实际上,在JavaScript世界中有几个( 或多或少) 最近的发展,使语言感到非常有用。 例如,在我看来,使用jQuery嵌入CSS选择器是一种非常简单的,方法。 或者考虑harmony协议的ECMAScript metaobject: 它看起来像一个普通( 多数 lisp,比 ruby 系统的python 对象更多)的直接端口。 此类 事件 举不胜举.

JavaScript缺少 MACROS 和带有编辑器集成的REPL的合理实现,这是不幸的。 当然,其他语言的影响也非常明显。 然而,Lisp和JavaScript阵营之间仍然存在着大量的文化兼容性。 有些可能是( 和最近兴起的JavaScript JIT编译一样),有些系统的,但肯定是在那里。

...