有一个问题都现在没弄明白

你没看过“lisp 魔咒”?

刚去看了一下, Worse Is Better. 这个东西很无奈, 也很真实.

但是那本书对lisp的一些批判性观点有点过时了. Racket的生态不错, Clojure更是直接在JVM上面跑了. 更别说现在一大批语言争先恐后地编译到Javascript(虽然最后能打得还是只有typescript, 哈哈). 其中就不乏lisp方言(Clojurescript, Racketscript). 写个能做的项目也是可以的.

真相还是一些程序员对lisp有莫名的恐惧, 我认识一些朋友, 每次我安利lisp的时候个个谈括号色变, 视Sexp如洪水猛兽,然后写C++的继续C++, Scala的继续Scala. 结果最后剩我一人独自尴尬, 别提多丢人了.

另一方面, lisp的特性已经被很多语言吸取了(当然, 最核心的宏和sexp的配合还没被接纳)大部分人写一般的语言都觉得已经很甜了, 人毕竟还是有惰性. 你能指望他们去学一个没有短期明显好处的东西吗

linux发行版本这么多,可是流行的就只有几个,它们都有不同的设计目标,策略也各不兼容。

1 个赞

同一作者的其它文章

http://www.dreamsongs.com/WorseIsBetter.html

Worse Is Better Is Worse
Is Worse Really Better?
Back to the Future: Is Worse (Still) Better?
Back to the Future: Worse (Still) is Better!

你见的太少罢了,MetaOCaml 都可以用类型系统保证生成代码类型正确,Haskell 把 eDSL 玩出花來,Scala 早就有 Staged meta programming。

括号?以前 Apple 搞了个 GLisp 的 Common Lisp 扩展,Lisp 可以直接写成这样:

defun srVariable (var) =
	~ single valued variable on right side of a rule:  -> :x or -> ..
	~ :x can fail only if it is in a repeat

	begin
	new value :=
		if vBound?(var) then vEval(var, nil)	~ has a value
		else vSet(var, nil);			        ~ no value
	if !inRepeat and listp(value) then		    ~ [:x]*
		if !repeatCount > length(value) then	~ var exhausted
			failure(":" cat var)
		else !dest := !dest xCons value[!repeatCount]
	else !dest := !dest xCons value;		    ~ :x
	end;

生成

(defun srvariable (var)
  (prog ((value
          (cond ((vbound? var) (veval var nil))
                (t (vset var nil)))))
     (cond ((and !inrepeat (listp value))
            (cond ((> !repeatcount (length value))
                   (failure (cat ":" var)))
                  (t (setf !dest (xcons !dest (nth (- !repeatcount 1)
                                                   value))))))
           (t (setf !dest (xcons !dest value))))))
2 个赞

在我看来,你说这几个都没有宏直观。

另外抱怨括号的不是我呀,我一直坚信lisp有无限种表达方式的

很简单,理由就和有些人相信自己手动做的优化/手写的汇编能比 C 编译器做的更好一样,有些人还觉得自己手动写的展开代码能比自动生成的「更灵活」,这种想法放上古時代还沒什么问題,在编程语言有足夠的发展時还坚持这个而投入无谓的人力就有点可笑了。

http://web.cecs.pdx.edu/~sheard/staged.html

Lisp 的表现力是有限的,不然我们 Lisper 現在都用上 dependent typing 了。

说到 Lisp 的优点,我就想到了 MOP,今年下半年,中法合作的以 MOP 为核心 LiLisp 标准即將开始编写,文体两开花。我控记不记我记己。

2 个赞

不太懂,既然编译器那么厉害了,为什么硬件编程还要用c,asm这种原始控制寄存器,指针的方式呢。按你说法上高级语言一顿操作就欧了,还不脏手呢。

包括某些强计算要求的,好像还有用fortran的

戏说不是胡说,宏写不是瞎写 :joy:

1 个赞

因为学校只会教 C 和 x86,Forth 比 C 强无数倍,RISC 比 x86 强无数倍,Ada 比 C++ 强无数倍,我明知这一点,所以別人用 C 用 x86 不管我事,是別人的可悲,我只写 Forth,Ada 和 MMIX。同理就和你知道 Lisp 是好的,想安利,却不能而是一样的。首先要相信它是好的,确实地用,而后要知道为什么是好的,再能看到为什么不好。

Fortran 很强,而且现代的 Fortran 和 FORTRAN 77 这種可以说是完全不同的语言,現在的主流也是编译到 GPU 而不是 CPU。可惜编译器加上硬件太贵我一个 hobbysit 用不起。

2 个赞

恐龙比人类也强无数倍

个人感觉,语言能流行,是现实需求与语言的切合度、生产环境的语言稳定性与认可度和生态等多方面决定的,你所述的强无数倍这种命题,我不是太同意,一个语言不能只因为它的特性之类的本身能力就说比别人强无数倍,有没有经过市场验证也是一方面。

关于学校教学问题,感觉一直以来都是教学跟着市场编程环境走,虽然教学有影响市场走向,但貌似并不是学校教学决定了市场 = =。

恐龙也没成功上网聊天,反而人类成功了

咋都能扯到编程语言 :joy:
之前是觉得 Lisp 好牛逼, 别的都是辣鸡. 后来见识的多了, 发现更多奇葩语言, 觉得不懂的牛逼的东西多着呢.
现在只想踏踏实实用自己喜欢的语言, 同时多学习多接触其它语言, 吸收优点.

为什么大佬们喜欢另起炉灶, 我觉得根本上还是因为独立开发本身就是零散的.

一个项目要想集中大家的力量, 要么有个大家都敬佩的领袖, 可能项目质量还不够, 但是大家原意跟着干, 因为觉得跟着他能让项目变好.能看到希望.

要么本身足够好,没有理由找替代品. 如果项目不够好,又没有领导者, 有大佬看不下去了, 自然会另起炉灶.

1 个赞

Forth, Ada, RISC 都是「经过市场验证」的。所有已知的的 micro controller 都支持 Forth,Adacore 照样拿 GPL 的東西卖,現在的 x86_64 无非是在 RISC 跑的模拟器。

重点在于一开始学的 C, Java 不都是「听说是最好的编程语言」,学之前从未实际比较过,多数人以后也沒有什么机会接触別的 PL,所以 Ada,Smalltalk,CPL 乃直 Analytic Machine 都只是在课上听说是「美國國防部欽定」「早期OOPL之一」「C 的原始形态」「计算机的始袓」,连它们什麼样都不知道,所以不知道 Ada 一直有人用,現在都支持 dependent type 了,Smalltalk 还是图形界面编程和 IDE 的始袓。CPL 实际上沒有类型,Analytic Machine 从未被造出來。只会抱著手上的 C/C++ Java 不放。

恐龙死了,我提的编程语言都是活下來的,「据记載十分强大的」現在除了这一句话渣都不剩的 PL 更多。

3 个赞

有争议:鸟的祖先是恐龙

然而我提的编程语言都是肉食者,那些 suck 的也称不上是人,花花草草罢了。另,PL 中真正意义上的恐龙,COLBOL 現在也活得好好的,类比不过是类比,比得再像也不能改变事实。

1960 的時後就有人帮它把墓碑都刻好了,然而到現在都沒用上。

lg

http://www.computerhistory.org/collections/catalog/X572.85

COBOL ?

汉文 也活的不错

高内聚低耦合,生态强大,易于扩展。现成库多(熟语 典故)写起来比大部分语言短。

有强大灵活的类型推导机制,基于语序确定句子成分简洁优雅符合直觉。

活得不好就有鬼了

可能这论坛语言大神太多吧…要论述一下,就像某些圣战哈哈哈