pascal语言难还是python语言_lisp语言代替python_Lisp 语言优点那么多,为什么国内很少运用?...-程序员宅基地

技术标签: pascal语言难还是python语言  

为什么Lisp没有流行起来

本文探讨的是为什么Lisp语言不再被广泛使用的。

很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面。现在,它很少被用到,这一切并不是因为古老,类似古老的语言却被广泛应用.

其他类似的古老的语言有 FORTRAN, COBOL, LISP, BASIC, 和ALGOL 家族,这些语言的唯一不同之处在于,他们为谁设计,FORTRAN是为科学家和工程师设计的,他们在计算机上编程的目的是是为了解决问题.COBOL是为了商业设计的,最好的体现在于让商人们可以利用电脑时代.LISP是了计算机科学研究设计的,最突出的体现在计算机基本原理研究.BASIC是为初学者设计的.最后,ALGOL语言是有计算机程序员修改,演变成其他流行的语言,如C,Pascal和Java的一个庞大的家族。

上面提到的某些语言已经不像当初那么流行了。我们在这里可以把它们称作“失败”。问题是它们为什么失败?第一站出来的是COBOL. 很不幸,它以面向商业人员的很好的可读性就是它的失败点。商业人员发现,他们可以雇佣程序员去管理他们的系统。程序员自然会偏向于为他们设计的语言,而不是他们的老板。所以随着时间推移,越来越多的商业功能都使用例如VB, C, C++ 和JAVA实现了。现在,只有很少一部分软件仍通过COBOL语言编写。

BASIC却有不同的命运。他是为入门人员设计的。那些在微机上学习编程,他们会使用内置的BASIC语言作为起点。随着时间推移,微机被运行微软操作系统的个人电脑,或者MacOS的苹果电脑所代替。这种语言逐渐被VB所取代。虽然他是面向初级程序员,它有一段时间代替了COBOL。为什么要耗费这么多的资源在昂贵的编译器上,而便宜的解释器在我们的电脑上已经存在?最近,微软以迁移到.NET框架上,让VB跟在后面。它的替代者, C#就是ALGOL家族中的一员,跟Java相近。

这些年FORTRAN的使用起起伏伏。在某一阶段,差不多所有科学方面的代码是用它来写的。它的优点是这门语言中没有指针,并且不允许存在递归。这意味着所有数据的引用位置都可以在编译时确定。FORTRAN编译器利用这些额外的信息使程序运行格外地迅速。不幸的是,随着时间的推移,固定大小的数组这种数据结构变得过时了。现在,科学要处理任意形状的风格,甚至表述更为复杂的真实世界。这需要在语言中额外地加入指针。这些情况发生的时间段里,FORTRAN逐渐走向没落。现在,它被转移到高性能计算工作,其中新的并行矩阵和矢量运算最近添加到这门语言中,仍然使它拥有性能优势。

ALGOL语言家族取得了成功。其原因是,这些语言是由程序员为程序员写的。随着时间的推移,这些与系统和应用相关的语言成为了现在最常用的语言。它的优点是越多地程序员使用,这门语言就能得到更多地改进,并且越来越多地程序是用它们来写就的。这提供了一个良性循环,更多的程序员们又被聘请在己编写的程序上工作。这是一个网络效应的例子。一个系统的“价值”是它的用户数目的平方,在于以此速率增长的用户之间的交互作用。

那么为什么Lisp语言家族会站在失败者一边呢?有些人认为是语法的错。Lisp因为它的括号而臭名昭著。我并不认为是这个理由。许多用户说良好的格式可以让他们跟上这些括号。同时,Lisp语言被发明不久后,有一个叫“super-bracket”的语法可以让人快速表示出任意数量的回括号")"。这个特性在今天已经很少有人使用了。最后,优秀的编辑器解决了大多数的语法问题。

另一些人经常抱怨Lisp是一门函数式语言。这是失败的理由吗?自然,跟早期的语言相比,只有Lisp算是函数式的。但事实上,我认为没有这么简单。Lisp也有命令式语言的特性,ALGOL系列语言也可以被当作一门纯正的函数式语言来用。 如果有人想选择一种特定的编程范式来写代码,一些特定的语言可以让这个选择更容易的实现。然而,现代语言已经足够灵活,它们能支持多种编程范式,近乎完全命令式的Lisp没有理由不存在。

或许lisp的问题在于他使用了垃圾回收?在那个时候,只有lisp作为计算机语言采用了这个特性。诚然,垃圾回收会占用大量的计算资源,而早期计算机在该方面的不足足以组织lisp大展拳脚了。但是,我认为这仍然不是主要的原因。lisp是用来写那些复杂度相当高的程序的,而这些程序在事实上都必须带有一个垃圾回收模块,如果你用其他的语言来写……大概很难比lisp实现的要好吧?众所周知的事实是,任何一个如此复杂的程序,如果用其他语言写的话都不可避免的戴上一个比lisp垃圾回收臃肿不少的功能模块……

lisp的失败,恰恰是因为他太成功,这让他的目标变得模糊。lisp相对与早期的语言实在是非常灵活,灵活到足以改变自身形式以适应需求。对于其他的语言来说,如果想要完成一个庞大的任务,就需要把这个任务打碎成一小块一小块的然后完成。如果是一个更大的呢?甚至连编译都需要分步完成了。但是lisp不是这样的,由于他强大的能力,程序员可以将lisp改造成特定领域的专门工具——顺手的工具将顺手的解决问题——任务轻松完成了。由于语言的正交性(译者注:这里可能应该理解为“自洽”),我们改造过的lisp仍然可以使用原有的编译器,解释器运行。

那么建立特定领域的语言来作为一个问题的解决方案,它会出现什么问题呢?结果是它非常高效。然而,这种做法会使语言分化。这导致许多子语言都略有不同。这是Lisp代码对其他人而言可读性差的真正原因。在其他语言中,相对来说比较简单就能臆测出一段给定代码的作用。有着超强的表达力的Lisp,由于一个给定的符号(symbol)可能是一个变量,函数或操作,需要阅读大量代码才能找出它。

Lisp失败的原因是因为它的碎片化,并且它的碎片化是因为其语言天性与特定领域方案的风格造成的。而网络效应则恰恰相反。越来越少的程序员使用相同的方言,因此它相对与ALGOL语言家族的总价值下降。

如果有人现在设计一种语言,该如何避免这种问题呢?如果语言的表达性是我们的目标,那么它必须以某种方式加以调整。这门语言必须要有特意的限制,来保证所编写代码的可读性。Python是一门成功的语言,它已经做到了这些,其中某些限制是硬编码的,而另一些则是以约定成俗的方式存在。

不幸的是,这么久过去了并且发明了这么多Lisp的变种语言,在其之上建立的其它新语言大概并不是所要的答案。根本不会有足够多的用户使它与众不同。也许解决的办法是,慢慢加入类似Lisp的语言功能到ALGOL语言家族中。幸运的是,这似乎是正在发生的事。新的语言(C#,D,Python等)趋向于拥有垃圾回收机制。他们也往往比旧的语言更具正交性。在未来,最终会有行为很像Lisp的一种流行语言。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39949297/article/details/114354828

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文