Lisp相对“现代”语言,它的优势正在消失吗?


#22

你直接看Reference当然看不懂。

感兴趣的话可以先看 https://beautifulracket.com/stacker/intro.html 入门

然后再看 Racket Guide https://docs.racket-lang.org/guide/languages.html

另外,你要的 1 + 9 * 6 在Racket Guide里就有实现 https://docs.racket-lang.org/guide/hash-reader.html


#23

多谢 多谢 多谢


#24

感觉中国人不应该钻研这些邪教,elisp就行了,饭都吃不饱,学那么多没用的东西干吗


#25

乔布斯说过 饭不能吃太饱 人也不能太聪明


#26

elisp 就不是邪教了吗🌚


#27

最近又发现一个Lisp的优势,即所谓命名优势

我发现很多语言对Naming Convention有限制,比如:

大部分语言的名字都不允许带hyphen(这是因为中缀语法需要处理减号的问题),而Lisp允许。不要小看这一点命名上的优势,它给编程带来很大便利。

比如:Java的包名要求小写,但不能用hyphen。如果你的包名里包含两个单词组成的短语,则会要求写成驼峰式,很难看。

另一个极端的例子是 C#,它的Naming Convention要求:类名大写、方法名大写。这很容易造成类名和方法名重名的情况,从而要你不得不换名字。


#28

lisp可以以数字开头创造symbol,别全数字就行,比如124abc

Go语言甚至强制导出所有大写字母开头的符号 :joy:


#29

是的,这一点很方便。

不仅如此,Lisp的包名管理也优于Java和C#。

Java和C#这类有名字空间管理的语言,类名和包名和文件名和路径对应,这导致文件名和路径开头不能是数字。从而无法排序。

你只能定义:

Test1.cs,

Test2.cs,

Test3.cs

而无法定义:

1-Test.cs

2-Test.cs

3-Test.cs

注意:前者只能Test开头(否则无法排序),而后者在数字后面可以跟不同的概念名字。


#30

可以用文件的第一行注释做排序的

写个脚本挺简单的

不仅可以排序 还可以分类 归纳关键字

至于用–做分割符 和__也没什么区别呀


#31

我说的排序不是在treemacs里,而是在任何地方。

比如:在github上浏览的时候可以很清楚的看到文件的先后次序。


#32

看到文件的先后顺序,我也有这样的想法

可是发现 文件之间很多的时候是一颗树 而不是一个列表 也就没有了所谓的先后


#33

即使文件是一棵树,每个节点的 children 仍然是一个列表。

树可以用目录代替,一个目录下的 子目录的名字 和 文件的名字 都可以有先后关系。


#34

我感觉这完全不是优势, 过度的自由不一定是好事, 有可能会砸到自己的脚.

golang做了很多限制, 初衷是让人少犯错误, 效果还不错, 现在已经习惯了. 相对于c++里的public和private, 大写开头更容易辨识, 否则像c++还要看下头文件或者文档才知道. python也有下划线开头的约定.


#35

缩进是好的,py强制缩进是坏的。如果不小心打了大写开头的呢?意外导出了怎么办。就像py不小心多缩一下就debug半天一样。

那你觉得没有泛型,只有interface based OO,也是大道至简吗


#36

不小心打了大写开头, 对我自己来说完全不可能, 可能已经形成本能反应了.

不是, 这个实践中感觉挺痛苦的. 不过官方已经在考虑增加泛型. 语言一开始从最少特性和严格限制, 到后面根据用户反馈和实践经验慢慢增加新特性, 这种比较可控一点, 会慢慢进化得更好, 如果一开始就全放开, 后面将很难控制. 就像c++, 可以存在多种风格, 学习周期漫长, 让人很头疼.


#37

没啥好不好的,两种语言的目地不同,可以说各有取舍,不然为什么要在造一个语言?golang放开也就不是golang,C++做限制也就不是C++了。


#38

IMG_0326

想当然的翻译害人不浅。


#39

你有沒有想过这个先后关系在不同情境下可以是不同的?是可以基于文件大小,创建时间这类全然和文件名无关的信息的。

说实话这不见得有多大好處,反而让这些写 parser 和 code analysis 的人很难做。


#40

不只是 Lisp,而是动态类型语言的优势正在消失,一些新出现的静态类型语言在表达能力上取得了长足进步。

从软件工程的角度来说,为了可维护性我们应该精确定义问题、以及解决方案,从而不再需要动态性、灵活性,而且会把代码中出现的动态性、灵活性当成一个信号:我们可能还没有想清楚要解决什么问题。然后我们会做一些重构,甚至重新设计,以便消除动态性和灵活性。

Lisp 是最好的动态类型语言,但是因为它松散的组织形式,很难成为普及最广的动态语言,它可能会像 Smalltalk 语言之于 OOP,成为思想的源泉。Lisp 有一个杀手级应用 Emacs,所以 Lisp 会成为我个人手中的瑞士军力,而不是 Javascript 或 Python。

语言中有很多独特的东西令人怀念,比如 C++ 的RAII,Lisp 的 S 表达式,Python 的缩进。但是这些就像美女嘴角的痣,在她的美丽年华里看到它会令人心动,当她老去我们就只剩怀念,对于新一代的人来说,他眼中看到的可能是一颗肉瘤。


#41

现代的动态语类型言都有虚拟机 也有字节码

你觉得Scala是动态类型的 还是静态类型的?