术语“ Lisp”(或“类似Lisp”)是许多不同语言(例如Common Lisp,Scheme和Arc)的保护伞。其他语言社区也有类似的碎片,例如ML。
但是,Ruby和Python都设法避免了这种命运,因为创新更多地在实现上发生(例如PyPy或YARV),而不是对语言本身进行更改。
Ruby和Python社区是否做了一些特殊的事情来防止语言碎片化?
术语“ Lisp”(或“类似Lisp”)是许多不同语言(例如Common Lisp,Scheme和Arc)的保护伞。其他语言社区也有类似的碎片,例如ML。
但是,Ruby和Python都设法避免了这种命运,因为创新更多地在实现上发生(例如PyPy或YARV),而不是对语言本身进行更改。
Ruby和Python社区是否做了一些特殊的事情来防止语言碎片化?
Answers:
Ruby和Python 都有仁慈的独裁者。它们是深深植根于务实关注的语言。这些可能是抑制碎片化的最重要因素。另一方面,Lisp和ML更像是出于理论目的在学术界构思的“按委员会设计”语言。
Lisp最初是由约翰·麦卡锡(John McCarthy)设计的,用于计算机程序的实用数学符号。他从未将其实现为实际的编程语言。第一个实现是由史蒂夫·罗素(Steve Russell)开发的,但他不是仁慈的独裁者。随着时间的流逝,出现了许多不同的Lisp实现。Common Lisp试图将它们标准化。
Lisp更像是语言的“家族”。ML也是如此,它遵循与Lisp类似的进化路径。
一个可能的因素仅仅是年龄。Lisp和ML比Python和Ruby要老很多:
Lisp:1958年
ML:1973
Python:1991年
红宝石:1995年
Lisp和ML显然已经看到了硬件功能的巨大变化,计算机科学的更多趋势,以及越来越多的博士生正在寻找可以从事的工作。
它们本质上都是实现定义的语言
当很容易创建与现有代码在很大程度上兼容的语言的新实现时,黑客就是黑客,他们就会继续努力。每个人都在某个时候编写一个Lisp实现。在语言设计中,ML编译器对于研究生几乎是必不可少的-语言毕竟有很好的文献记载。
另一方面,我们有即席和实现定义的语言。或者说语言是如此复杂,以至于阻碍了产生可行的替代实现的重大障碍:
这看似不利的一面-难以产生可行替代方案的语言具有巨大的上行空间:稀缺的开发人员资源集中在一个真正的实现上。
作为历史记录,Haskell社区中的一些人积极追求合并和开发人员工作的集中,认识到开发人员社区的任何分裂都将意味着我们不会成功。GHC被选中并获得冠军。
cabal
工具不是好用的工具,很容易破解:甚至Yesod也承认这一点:yesodweb.com/blog/2012/04/cabal-meta Python和Ruby在软件包管理方面要好得多。
我要说的一个因素是定义平台。对于Haskell,该平台是Haskell标准和GHC(我可以想象)。对于Ruby而言,是Ruby on Rails“定义”了Ruby开发平台。对于C语言,它是Unix。
与Lisp相比,在Lisp上,没有原始的kick-ass平台来定义语言的样子。如果我没记错的话,根据型号和制造商的不同,每台Lisp机器都有细微的差别。Common Lisp由于某种原因未定义。可能是因为竞争激烈,并且不愿意迁移到另一个平台。
当然,这完全是我的猜测。这个想法来自对Harvey的回答的评论。但是,似乎定义平台有很多形状,但是共同的特性似乎是它从中获得了普及。
别忘了权衡驱动语言发展的文化
我还要强调一个事实,那就是在公共场所积极进行python / php的开发。您有一组人确定了任何人/所有人都可以免费获得的标准规范。
就像W3C使用HTML / CSS标准一样。您有一小群有上进心的人,他们控制着该语言要完成的工作的细节。在将所有内容发布给公众之前,所有内容都会进入明确定义的规范。
OTOH,LISP之类的语言被教授或其他个人闭门造车,他们真诚地认为他们对语言“最佳使用”的看法是正确的。因为某些实现在某些方面很出色,所以它们可能同时同时是非。虽然没有什么是最好的。
这不一定是一件坏事,因为多样性孕育了创新。像LISP这样的语言一直并且将继续是学习和研究的出色语言,因为它们突破了理解的界限。
但是,为创新创造良好环境的质量不一定对稳定有利。相反,使环境对稳定有利的品质不一定对创造力有利。
当发展基于积极的协作时,有时个人为了更大的整体利益而不得不屈服。对研究不利/对一致性有利。
事实是,我们仍然生活在编程语言开发的狂野西部。设计“理想语言”的问题是如此之大,以至于尽管做出了巨大的努力,但没人能接近解决它。
在研究/学术界,仍有很大的改进和创新空间。在商业领域,实际应用中使用的软件呈指数增长,其驱动力是简单性和一致性。
有些语言专门针对前者,有些专门针对后者。那些试图同时专注于这两个方面的人通常做得都不好而死掉。
两者都是指VB / C#/ Java之类的整体语言。现在说还为时过早,但我想看看十年后C#和Python的样子。按照目前的速度,C#的功能和不一致性正在以越来越快的速度增长。即使拥有出色的文档,也很难记住该语言中包含的所有细微细节和怪癖。这对于单个开发人员来说非常好,但是一旦您招募了更多具有独特风格的开发人员,代码库中的不一致就会增加,质量会受到损害,并且没有人赢。我认为从Perl在生产环境中遇到的困难中可以学到很多东西。
我认为说Python和Ruby之类的语言没有零碎是不正确的。我们已经开始看到一些碎片效应。例如,Python 3并不完全与Python 2向后兼容,因此两个版本都需要维护,许多现有代码仅适用于Python2。还有一些Python衍生产品,包括PyPy。
另一个因素是语言的年龄。受到最多支离破碎的语言是较旧的语言,因此要承受发展和修订的压力。Lisp是几十年前发明的,因此有足够的时间来采纳它的一些思想并将其纳入新的语言中。C是片段化语言的另一个示例。尽管C对该语言本身只有一个真正的重大修订(从K&R到ANSI),但有许多衍生产品,包括C ++,Not Quite C和所有其他共享类似C语法的语法。
Ruby本身是以前语言的“碎片”(如果您愿意)。由于它融合了C,Smalltalk和Perl(以及其他)的思想,因此它是目前进行碎片处理的语言。我不明白为什么我们将来可能看不到Ruby与其他语言的进一步融合。
类似Lisp的语言过于基础和理论性,无法进行重大更改。语法上的更改(我并不意味着仅更改命令的名称)就不适合它们背后的功能编程理论。
但是,存在像 lisp 这样的语言这一事实表明,无论如何,已经对lisp进行了“更改”。换句话说,有些语言是受Lisp或其背后的理论启发而创作的,并创造了一种类似的新语言。
还有许多受Python启发的语言。例如,Julia,CoffeeScript等将形成自己的对空格敏感的面向对象语言家族。
我认为,像Python这样的语言的基础知识永远不会真正改变。Python是面向对象的,因此与C ++和Java有相似之处,但它是动态的,因此也与许多脚本语言相似。
那么谁真正在乎语言呢?重要的是目的:法语与拉丁语相似,但懂法语的女孩更热;)