由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 为什么说Javascript 是披着C 外衣的Lisp?
相关主题
周末上点有用的信息perl 怎样检测一个strig是否是valid的JSON string
看了一下Meteor很不错JS就应该杜绝OOP
TypeScript看起来不错额:为Javascript增加静态类型, 类, 继承等ECMAScript 6 太猛了
CoffeeScript, TypeScript 能否在将来顶替 JavaScript?clojure这语言真不错
大家讨论过了node.js了吗?今天跟公司confirm了,没有人用Scala
学了这么多语言发现还是coffeescript最好用现在还在“学”脚本语言的,都弱爆了
aspx网页现在到底流行不? (转载)俺最近写lisp写得很开心
metaprogramming太子还是挺厉害的:我为什么选择scala.js
相关话题的讨论汇总
话题: lisp话题: js话题: javascript话题: string话题: eval
进入Programming版参与讨论
1 (共1页)
p*****2
发帖数: 21240
1
到了该澄清一下的时候了。
披着C 外衣,我信。但是为什么是Lisp呢?
m*******l
发帖数: 12782
2
functional

【在 p*****2 的大作中提到】
: 到了该澄清一下的时候了。
: 披着C 外衣,我信。但是为什么是Lisp呢?

c******o
发帖数: 1277
3
dynamic functional with a little oo
p*****2
发帖数: 21240
4

functional就是lisp吗?

【在 m*******l 的大作中提到】
: functional
p*****2
发帖数: 21240
5

什么叫dynamic functional? 就是dynamic + functional吗?Ruby算吗?
LISP的a little OO是怎么体现的呀?
我觉得LISP最有特点的是code is data,这个我在JS上没看到呀。今天想了半天也没明
白这两个语言怎么像。要说functional的语言可多了。

【在 c******o 的大作中提到】
: dynamic functional with a little oo
f**********3
发帖数: 295
6
如果非要说这个的话,js有eval

【在 p*****2 的大作中提到】
:
: 什么叫dynamic functional? 就是dynamic + functional吗?Ruby算吗?
: LISP的a little OO是怎么体现的呀?
: 我觉得LISP最有特点的是code is data,这个我在JS上没看到呀。今天想了半天也没明
: 白这两个语言怎么像。要说functional的语言可多了。

p*****2
发帖数: 21240
7

eval只能处理string吧?

【在 f**********3 的大作中提到】
: 如果非要说这个的话,js有eval
f**********3
发帖数: 295
8
code = string = data...

【在 p*****2 的大作中提到】
:
: eval只能处理string吧?

p*****2
发帖数: 21240
9

lisp的data是list吧?

【在 f**********3 的大作中提到】
: code = string = data...
f**********3
发帖数: 295
10
是的,我只是说js里也可以data=code而已... 如果硬要说js和lisp像的话

【在 p*****2 的大作中提到】
:
: lisp的data是list吧?

相关主题
学了这么多语言发现还是coffeescript最好用perl 怎样检测一个strig是否是valid的JSON string
aspx网页现在到底流行不? (转载)JS就应该杜绝OOP
metaprogrammingECMAScript 6 太猛了
进入Programming版参与讨论
n*w
发帖数: 3393
11
是有人说javascript/ECMAScript是lisp的一个方言。我个人意见倒不认同。
看这个页面 http://www.european-lisp-symposium.org/
p*****2
发帖数: 21240
12

我觉得不是一回事。JS里至少data应该是JSON。你能把函数和JSON互相转换吗?

【在 f**********3 的大作中提到】
: 是的,我只是说js里也可以data=code而已... 如果硬要说js和lisp像的话
c*******9
发帖数: 9032
13
Lisp也可以处理JSON吧。JS data不一定是JSON吧。
觉得Lisp比Javascript更容易一层层composition。

【在 p*****2 的大作中提到】
:
: 我觉得不是一回事。JS里至少data应该是JSON。你能把函数和JSON互相转换吗?

n*w
发帖数: 3393
14
lisp数据代码用同一个notation。js不是。
p*****2
发帖数: 21240
15

那你觉得JS data是什么?就是String?

【在 c*******9 的大作中提到】
: Lisp也可以处理JSON吧。JS data不一定是JSON吧。
: 觉得Lisp比Javascript更容易一层层composition。

c*******9
发帖数: 9032
16
data可以多种什么数组之类,String也比较常用吧。

【在 p*****2 的大作中提到】
:
: 那你觉得JS data是什么?就是String?

c*******9
发帖数: 9032
17
嗯。这个notation是容易相互嵌套组合的关键。

【在 n*w 的大作中提到】
: lisp数据代码用同一个notation。js不是。
p*****2
发帖数: 21240
18

LISP也有string呀。

【在 c*******9 的大作中提到】
: data可以多种什么数组之类,String也比较常用吧。
f**********3
发帖数: 295
19
lisp的reference是有结构的,js的string是没结构的,当然也可以parse。lisp和js当
然是不同的。只不过js有code=data这种“feature”而已。data的形式当然不一样。而
且js和lisp的差别有何至于此。至于说"js是披着c外衣的lisp”这句话,我并不认同。
还是应该看看提出这个观点的人怎么说。理论上说,所有图灵完备的语言都是等价的,
还是应该看看作者提出这个观点的context是什么才有意义。
至于说json和函数转换,json就是string,
json {"code": "1+3"} lisp '(+ 1 3)
json {"int": "1"} lisp '1
parse一下,把string eval了
lisp对reference也是parse string,只不过build in了而已。reference无非就是也是
一个string,不过同时有信息说我的内容(type)是“代码”。而且前缀表达式使得很
多形式都统一了,比较方便而已。
【 在 peking2 (clojure) 的大作中提到: 】
p*****2
发帖数: 21240
20

有eval的语言太多了吧?为什么只有JS说自己是LISP?
另外LISP里的list是functional language最基本的数据结构,这个JS里根本就没有。
你说的String真的不算什么数据结构,算是数据类型吧。如果有个eval就可以说自己
code=data的话,那可是太多语言有这个特点了。

【在 f**********3 的大作中提到】
: lisp的reference是有结构的,js的string是没结构的,当然也可以parse。lisp和js当
: 然是不同的。只不过js有code=data这种“feature”而已。data的形式当然不一样。而
: 且js和lisp的差别有何至于此。至于说"js是披着c外衣的lisp”这句话,我并不认同。
: 还是应该看看提出这个观点的人怎么说。理论上说,所有图灵完备的语言都是等价的,
: 还是应该看看作者提出这个观点的context是什么才有意义。
: 至于说json和函数转换,json就是string,
: json {"code": "1+3"} lisp '(+ 1 3)
: json {"int": "1"} lisp '1
: parse一下,把string eval了
: lisp对reference也是parse string,只不过build in了而已。reference无非就是也是

相关主题
clojure这语言真不错俺最近写lisp写得很开心
今天跟公司confirm了,没有人用Scala太子还是挺厉害的:我为什么选择scala.js
现在还在“学”脚本语言的,都弱爆了[bssd]我给我儿子学racket了
进入Programming版参与讨论
p*****2
发帖数: 21240
21
Google了一下,就看到下边这段模棱两可的context。
Lisp in C's Clothing
JavaScript's C-like syntax, including curly braces and the clunky for
statement, makes it appear to be an ordinary procedural language. This is
misleading because JavaScript has more in common with functional languages
like Lisp or Scheme than with C or Java. It has arrays instead of lists and
objects instead of property lists. Functions are first class. It has
closures. You get lambdas without having to balance all those parens.
p*****2
发帖数: 21240
22
按照王垠的说法,貌似也就是lambda, JS跟Lisp搭边吧?可是支持lambda的语言也很
多呀。难道JS是第二个支持lambda的语言吗?
Lisp 的语法是世界上最精炼,最美观,也是语法分析起来最高效的语法。这是 Lisp
独一无二的,其他语言都没有的优点。有些人喜欢设计看起来很炫的语法,其实都是自
找麻烦。为什么这么说呢,请参考这篇《谈语法》。
Lisp 是第一个可以在程序的任何位置定义函数,并且可以把函数作为值传递的语言。
这样的设计使得它的表达能力非常强大。这种理念被 Python,JavaScript,Ruby 等语
言所借鉴。
Lisp 有世界上最强大的宏系统(macro system)。这种宏系统的表达力几乎达到了理
论所允许的极限。如果你只见过 C 语言的“宏”,那我可以告诉你它是完全没法跟
Lisp 的宏系统相提并论的。
Lisp 是世界上第一个使用垃圾回收(garbage collection)的语言。这种超前的理念
,后来被 Java,C# 等语言借鉴。
e*******o
发帖数: 4654
23
https://gist.github.com/ayosec/3121940

【在 p*****2 的大作中提到】
: 按照王垠的说法,貌似也就是lambda, JS跟Lisp搭边吧?可是支持lambda的语言也很
: 多呀。难道JS是第二个支持lambda的语言吗?
: Lisp 的语法是世界上最精炼,最美观,也是语法分析起来最高效的语法。这是 Lisp
: 独一无二的,其他语言都没有的优点。有些人喜欢设计看起来很炫的语法,其实都是自
: 找麻烦。为什么这么说呢,请参考这篇《谈语法》。
: Lisp 是第一个可以在程序的任何位置定义函数,并且可以把函数作为值传递的语言。
: 这样的设计使得它的表达能力非常强大。这种理念被 Python,JavaScript,Ruby 等语
: 言所借鉴。
: Lisp 有世界上最强大的宏系统(macro system)。这种宏系统的表达力几乎达到了理
: 论所允许的极限。如果你只见过 C 语言的“宏”,那我可以告诉你它是完全没法跟

p*****2
发帖数: 21240
24

没看到有提javascript

【在 e*******o 的大作中提到】
: https://gist.github.com/ayosec/3121940
e*******o
发帖数: 4654
25
讲的是 macro 的牛逼之处。
javascript,perl 与lisp的距离是一样的啊。

【在 p*****2 的大作中提到】
:
: 没看到有提javascript

p*****2
发帖数: 21240
26

是。回头好好研究一下。macro确实还没好好领悟呢。

【在 e*******o 的大作中提到】
: 讲的是 macro 的牛逼之处。
: javascript,perl 与lisp的距离是一样的啊。

e*******o
发帖数: 4654
27
我觉得macro 这个东西是过度抽象,牛逼的程序员可以自己玩。大家一起玩,还是java
好。哈哈。

【在 p*****2 的大作中提到】
:
: 是。回头好好研究一下。macro确实还没好好领悟呢。

p*****2
发帖数: 21240
28

java
macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起
来不如python, ruby什么的有意思。

【在 e*******o 的大作中提到】
: 我觉得macro 这个东西是过度抽象,牛逼的程序员可以自己玩。大家一起玩,还是java
: 好。哈哈。

c*******9
发帖数: 9032
29
LISP方便把代码quote 成string,处理后在反向quote成代码。js怎么做到这点?

【在 p*****2 的大作中提到】
:
: java
: macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起
: 来不如python, ruby什么的有意思。

c*******9
发帖数: 9032
30
对没有相关数学基础的人来说monad确实抽象了些。不过不认同王垠对monad的批判,照
他的说法,什么语音都不用封装,直接全局变量岂不是更方便。

【在 p*****2 的大作中提到】
:
: java
: macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起
: 来不如python, ruby什么的有意思。

相关主题
这么多人讨论 FP, 大牛推荐门语言吧看了一下Meteor很不错
最近系统深入的学了haskell 困惑不少 收获不多TypeScript看起来不错额:为Javascript增加静态类型, 类, 继承等
周末上点有用的信息CoffeeScript, TypeScript 能否在将来顶替 JavaScript?
进入Programming版参与讨论
m******t
发帖数: 635
31
Javascript只是被承认是FP,重来没有被承认是Lisp或者scheme,在wikipedia上JS和
Ruby, Python等一票属于被Lisp影响的语言。
http://en.wikipedia.org/wiki/Lisp_%28programming_language%29
我个人认为能否被认为是否Lisp的关键是下面这句:
The interchangeability of code and data also gives Lisp its instantly
recognizable syntax. All program code is written as s-expressions, or
parenthesized lists.
这条在Javascript是不成立的,JS的改版CoffeeScript也不是。但是ClojureScript是
可以的。

and

【在 p*****2 的大作中提到】
: Google了一下,就看到下边这段模棱两可的context。
: Lisp in C's Clothing
: JavaScript's C-like syntax, including curly braces and the clunky for
: statement, makes it appear to be an ordinary procedural language. This is
: misleading because JavaScript has more in common with functional languages
: like Lisp or Scheme than with C or Java. It has arrays instead of lists and
: objects instead of property lists. Functions are first class. It has
: closures. You get lambdas without having to balance all those parens.

e*******o
发帖数: 4654
32
monad 抽象。
macro 理念好理解,但是写起来,和看别人写的,比较蛋疼。

【在 p*****2 的大作中提到】
:
: java
: macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起
: 来不如python, ruby什么的有意思。

b***e
发帖数: 1419
33
Lisp's expressiveness power is the strongest among the programming languages
. It is so close to lambda calculus such that everything and anything can
be encoded. JS is almost like that, where the only counter part that is not
found is the powerful macro system. "eval" is in fact very weak as
compared to macros. Not everything can be serialized and put in a string
that fits eval. If you turn to the help of variables in eval, then you lose
static binding. Not even mentioning the possibility of nested macros, e.g.
code generation in code generation, in Lisp.

and

【在 p*****2 的大作中提到】
: Google了一下,就看到下边这段模棱两可的context。
: Lisp in C's Clothing
: JavaScript's C-like syntax, including curly braces and the clunky for
: statement, makes it appear to be an ordinary procedural language. This is
: misleading because JavaScript has more in common with functional languages
: like Lisp or Scheme than with C or Java. It has arrays instead of lists and
: objects instead of property lists. Functions are first class. It has
: closures. You get lambdas without having to balance all those parens.

p*****2
发帖数: 21240
34

这个是我觉得最靠谱的。跟我理解类似 。

【在 m******t 的大作中提到】
: Javascript只是被承认是FP,重来没有被承认是Lisp或者scheme,在wikipedia上JS和
: Ruby, Python等一票属于被Lisp影响的语言。
: http://en.wikipedia.org/wiki/Lisp_%28programming_language%29
: 我个人认为能否被认为是否Lisp的关键是下面这句:
: The interchangeability of code and data also gives Lisp its instantly
: recognizable syntax. All program code is written as s-expressions, or
: parenthesized lists.
: 这条在Javascript是不成立的,JS的改版CoffeeScript也不是。但是ClojureScript是
: 可以的。
:

c*******9
发帖数: 9032
35
Macro虽强,但不是Lisp的最突出特征,很多语言都有很强的macro系统。lisp还是强在
s表达式的扩展性,也让eval在lisp中更有用。和macro比哪个更有用不好说,但楖念上
lisp的eval更完美。code生成code生成code用eval也能做到吧。

languages
not
lose
g.

【在 b***e 的大作中提到】
: Lisp's expressiveness power is the strongest among the programming languages
: . It is so close to lambda calculus such that everything and anything can
: be encoded. JS is almost like that, where the only counter part that is not
: found is the powerful macro system. "eval" is in fact very weak as
: compared to macros. Not everything can be serialized and put in a string
: that fits eval. If you turn to the help of variables in eval, then you lose
: static binding. Not even mentioning the possibility of nested macros, e.g.
: code generation in code generation, in Lisp.
:
: and

c*******9
发帖数: 9032
36
更外你说说什么可执行语句不能引用为string。

languages
not
lose
g.

【在 b***e 的大作中提到】
: Lisp's expressiveness power is the strongest among the programming languages
: . It is so close to lambda calculus such that everything and anything can
: be encoded. JS is almost like that, where the only counter part that is not
: found is the powerful macro system. "eval" is in fact very weak as
: compared to macros. Not everything can be serialized and put in a string
: that fits eval. If you turn to the help of variables in eval, then you lose
: static binding. Not even mentioning the possibility of nested macros, e.g.
: code generation in code generation, in Lisp.
:
: and

c*******9
发帖数: 9032
37
更外你说说什么可执行语句不能引用为string。

languages
not
lose
g.

【在 b***e 的大作中提到】
: Lisp's expressiveness power is the strongest among the programming languages
: . It is so close to lambda calculus such that everything and anything can
: be encoded. JS is almost like that, where the only counter part that is not
: found is the powerful macro system. "eval" is in fact very weak as
: compared to macros. Not everything can be serialized and put in a string
: that fits eval. If you turn to the help of variables in eval, then you lose
: static binding. Not even mentioning the possibility of nested macros, e.g.
: code generation in code generation, in Lisp.
:
: and

b***e
发帖数: 1419
38
For instance, you want to generate code:
var f = ...;
var code = "f (1)";
Then at some other point you want to call:
eval(code);
You lose the static binding of f at the call point. Variable f will be
evaluated in the dynamic context at call point.
In general, it is difficult to inline a non serializable value, such as a
function closure in to "code", which is just string in JS.

【在 c*******9 的大作中提到】
: 更外你说说什么可执行语句不能引用为string。
:
: languages
: not
: lose
: g.

1 (共1页)
进入Programming版参与讨论
相关主题
太子还是挺厉害的:我为什么选择scala.js大家讨论过了node.js了吗?
[bssd]我给我儿子学racket了学了这么多语言发现还是coffeescript最好用
这么多人讨论 FP, 大牛推荐门语言吧aspx网页现在到底流行不? (转载)
最近系统深入的学了haskell 困惑不少 收获不多metaprogramming
周末上点有用的信息perl 怎样检测一个strig是否是valid的JSON string
看了一下Meteor很不错JS就应该杜绝OOP
TypeScript看起来不错额:为Javascript增加静态类型, 类, 继承等ECMAScript 6 太猛了
CoffeeScript, TypeScript 能否在将来顶替 JavaScript?clojure这语言真不错
相关话题的讨论汇总
话题: lisp话题: js话题: javascript话题: string话题: eval