Javascript ECMAScript真的是Lisp的方言吗?
我的一位朋友提请我注意以下欢迎信息: 。。。实施和应用 任何一种口齿不清的方言,包括 通用Lisp、Scheme、Emacs Lisp、, AutoLisp、ISLISP、Dylan、Clojure、, ACL2,ECMAScript 然后问ECMAScript是否真的是Lisp的方言。真的可以这样认为吗?为什么?Javascript ECMAScript真的是Lisp的方言吗?,javascript,lisp,ecma262,Javascript,Lisp,Ecma262,我的一位朋友提请我注意以下欢迎信息: 。。。实施和应用 任何一种口齿不清的方言,包括 通用Lisp、Scheme、Emacs Lisp、, AutoLisp、ISLISP、Dylan、Clojure、, ACL2,ECMAScript 然后问ECMAScript是否真的是Lisp的方言。真的可以这样认为吗?为什么? 是否有一套定义明确的标准来帮助我们判断一种语言是否是Lisp方言?或者说是一种非常松散的方言(在这种情况下,我们可以将Python、Perl、Haskell等添加到Lisp方言列表中
是否有一套定义明确的标准来帮助我们判断一种语言是否是Lisp方言?或者说是一种非常松散的方言(在这种情况下,我们可以将Python、Perl、Haskell等添加到Lisp方言列表中吗?Brendan Eich想为Netscape开发一种类似Scheme的语言,但现实介入了,他最终不得不将就一些对“普通”人来说似乎很像C和Java的东西,但它就像一种函数式语言 就我个人而言,我认为将ECMAScript称为“Lisp”是不必要的,但对每个人来说都是自己的。真正的Lisp的关键在于数据结构表示法和代码表示法是相同的,而ECMAScript(或Ruby、Python或任何其他非Lisp的动态函数式语言)则并非如此
警告:我没有Lisp凭据:-)不是。正如您所指出的,它有很多函数根,但现在很多其他非lisp语言也是如此 lisp还有一个使它们成为lisp的特征,那就是lisp代码是按照lisp数据结构(同源性)编写的。这就是lisps强大的宏系统的功能所在,也是为什么它在非lisps人看来如此怪异的原因。函数调用只是一个列表,其中列表中的第一个元素是函数的名称 因为lisp代码只是lisp数据,所以可以使用元编程来完成一些非常强大的功能,这是其他语言无法完成的。许多Lisp,甚至像clojure这样的现代Lisp,基本上都是作为一组宏来实现的。不,不是
要被认为是Lisp,就必须是同音异义词,而ECMAscript不是。我认为ECMAscript是Lisp的方言,就像英语是法语的方言一样。有共同点,但只有了解另一个武装的情况下,一个武装的任务才有困难:)
我发现有趣的是,在第四届欧洲Lisp研讨会上突出强调的三个主题演讲中,只有一个直接涉及到Lisp(另外两个是关于x86/JVM/Python和Scala的)。尽管我不会将JavaScript称为Lisp,但我个人认为,与大多数主流语言(甚至是函数式语言)相比,它更类似于Lisp语言 首先,就像Lisp一样,它本质上是一种基于非类型lambda演算的简单命令式语言,适合由REPL驱动 其次,在JavaScript中嵌入文字数据(包括lambda表达式形式的代码)很容易,因为其中的一个子集相当于JSON。这是一种常见的Lisp模式 第三,它的价值和类型模型非常简单。广义上讲,它是面向对象的,因为所有的价值观都有一个同一性的概念,但在最狭义的意义上,它不是特别面向对象的。就像在Lisp中一样,对象是类型化的并且非常动态。代码通常分为函数单元,而不是类 事实上,JavaScript世界最近有几项(或多或少)的发展,使语言有时感觉非常不清晰。以jQuery为例。在我看来,将CSS选择器作为子语言嵌入是一种类似Lisp的方法。或者考虑ECMAScript和谐的元对象协议:它看起来像是普通Lisp的直接端口(比Python或露比的Meta对象系统要多得多)。这个名单还有很多 JavaScript确实缺少宏和REPL与编辑器集成的合理实现,这是不幸的。当然,来自其他语言的影响也非常明显(不一定是坏的)。尽管如此,Lisp和JavaScript阵营之间仍然存在大量的文化兼容性。其中有些可能是巧合(比如最近JavaScript JIT编译的兴起),有些是系统性的,但肯定是存在的。“方言”肯定把它拉得太远了。尽管如此,作为一个学习和使用过Python、Javascript和Scheme的人,Javascript显然比Python有一种更为Lisp的感觉(Coffeescript可能更为如此)
至于为什么欧洲Lisp研讨会想要将Javascript描述为Lisp,显然他们想要借助Javascript的流行,因为Javascript的程序员数量是列表中所有其他Lisp方言总和的很多倍。不是一种“方言”。我在70年代学习了LISP,从那以后就没有使用过它,但当我最近学习JavaScript时,我发现自己觉得它就像LISP一样。我认为这是由两个因素造成的:(1)JSON是一个类似列表的关联结构,(2)JS的“对象”似乎本质上就是JSON。因此,即使您不像在列表中编写LISP那样用JSON编写JS程序,您也几乎可以这样做
所以我的答案是,有足够的相似性,熟悉LISP的程序员在使用JavaScript时会想起它。像Java套装中的JS=LISP这样的语句只表达了这种感觉。我相信这就是它的全部。如果你调用ECMAScript Lisp,你基本上是在断言任何动态语言都是Lisp。因为我们已经有了“动态语言”,所以您将“Lisp”简化为一个无用的同义词,而不是让它有更具体的含义 Lisp应该正确地引用具有特定属性的语言 如果出现以下情况,则语言为Lisp:
- 它的源代码是树结构的数据,它有一个简单的打印符号作为nes