各种Lisp系语言大检阅

时间:2021-06-26 00:18:14

主要特色:

CommonLISP : lisp系集大成者, 工业化强度的大型语言. 拥有理论上最高的表达力, 非常复杂, 学习难度极大. 喜欢的人捧到天上, 觉得它是一切语言的终点, 不喜欢的人恶心死, 觉得各种混乱各种冗余, 缺失美感. (工业化语言)

Scheme: 一种以静态作用域和强制严格尾递归实现为特色, 遵从的理念是编程语言发展不该越来越复杂,不断堆叠新的功能和特色, 而是应该不断消除缺陷和限制, 以使得不再需要添加功能和特性就能达到目的. 追求数学上的美感, 跟CommonLISP在很多理念上完全相反, 相对简单,但是极端灵活. 由于缺少实用的库而长期沦为教学语言, 很少用于实用. (算法语言)

Clojure: 一种新兴的lisp, 起于jvm平台, 现在已经移植到了.Net 和 Node.js 因为根植于几个非常流行的平台,使得其具有得天独厚的优势, 市场占有率节节上升, 直追前两大lisp. 语法上充分利用了多种括号,使得括号总数减少了.同时追求工业化强度和数学美感之间的平衡. 启动时间过长是最大的缺点.

newLISP: 剑走偏锋的独特lisp, 有大量创新内容, 同时保留一些在lisp系进化过程中被抛弃的设计(可能是过于大胆或者过于灵活副作用太大等原因),这些魔鬼设计的组合形成了一个强大独特的动态脚本语言系统.最大特色是语言好小,整个只有200k.

AutoLISP:曾经作为AutoCAD软件的内置脚本而成为最多人使用的lisp,但是语法古老, 缺陷很多,性能低下,代码丑陋, 世人关于lisp的种种不实的评论很多是由它而来. 现在已经被淘汰, 新版本AutoCAD用CommonLISP.

EmacsLISP: Emacs编辑器的扩展脚本语言, 现在依然存活的最古老的lisp语法之一, 因为编辑器而为世人所知. 但是跟AutoLISP一样,是一种古老的落后的lisp语言.


各个有影响力的分支:

Scheme的分支:

Racket: 以Scheme为基础, 增加了大量实用的语法和库, 使其成为一种更实用的语言而不仅仅是教学语言, 完全兼容低版本的scheme, 大部分兼容高版本的scheme.
IronScheme: .Net上的Scheme实现, 在R6RS标准的95%之上, 增加了跟.Net库的互操作和集成, 使得其成为一种实用的嵌入.NET程序的灵活脚本语言.在ngen的帮助上, 它成为启动最快的.Net lisp.

Clojure的分支:
ClojureCLR: .NET的DLR上的Clojure,并不是对jvm版的翻译,而是根据.Net而定制的实现. 
ClojureScript: 把Clojure编译为javascript以运行在浏览器或Node.js. 是clpjure的子集


社区和文档:

CommonLISP 社区对新人很不友好, 充满歧视. 教程很多, 但是很古老,文档多但是都过于庞大, 让人望而生畏.

EmacsLISP 社区教程丰富细致

Scheme社区像大学, 文档都像论文一样

Clojure社区非常友好, 同时文档书籍以很快的速度增加着

Racket文档庞杂,社区没什么人, 并且设计者很有闭门造车的意味

newLISP社区在没落,文档不完整, 但整体方向没问题.


流行程度:

CommonLISP (30几位)  
Scheme (40几位)
Clojure (50-100位)

其他(不在前100)


各种Lisp系语言大检阅的更多相关文章

  1. BMP图像直方图均衡算法(C语言大作业)

    万丈高楼平地起 C语言大作业 一.学习笔记篇 1.学习MarkDown MarkDown注重写作本身,而非花俏的界面 编辑器:vscode 插件:Markdown,Markdown Preview 2 ...

  2. C语言大总结

    C语言大总结 一. C语言基本常识 1.语言由函数组成 2.main是程序入口 3.C语言中不能出现中文或中文字符 (凝视和字符串除外) keyword : C语言提供表示特殊含义的单词 特点 : 1 ...

  3. Atitit.dart语言的特性  编译时js语言大总结

    Atitit.dart语言的特性  编译时js语言大总结 1. 原型环境1 1.1. Dart可以编译js3 2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时 ...

  4. Java系的大网站架构-LinkedIn和淘宝

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  5. R语言︱大数据集下运行内存管理

    在实操时出现以下的问题: Error: cannot allocate vector of size 2.9GB 大神指导(http://bbs.pinggu.org/thread-3682816-1 ...

  6. OC语言大总结(上)

    根据OC学习的知识点,总结了一下,希望能帮到大家! 作者:韩俊强  未经允许,请勿转载! 关注博主:http://weibo.com/hanjunqiang 第一节类于对象   类与对象http:// ...

  7. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  8. Python、Lua和Ruby比较——脚本语言大P.K.

    译者按:Python.lua和ruby在C/C++是日渐式微的情况下,在java/.net的围歼中努力抗争的三个当红小生.在Tom Gutschmidt的著作<Game Programmng w ...

  9. Go语言大神亲述&colon;历七劫方可成为程序员&excl;

    “历劫1”:你坚信你可以用Go来做面向对象编程? 在经历了一次Go应用之旅之后,你可能就会开始思考:“怎么样才能让这种语言更像面向对象的编程语言?”因为你已经习惯了这种编程,你想要制作健壮的代码.想要 ...

随机推荐

  1. 对石家庄铁道大学网站的UI分析

    学校网站的首页面的色调用的比较好看,用深蓝色体现了严谨治学的风范.然后就是网站的首页有 1,学校概况:学校简介 现任领导 历任领导 校史沿革 2,组织机构: 机构设置 院系设置 管理机构 直属单位 其 ...

  2. A-Making the Grade&lpar;POJ 3666&rpar;

    Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4656   Accepted: 2206 ...

  3. javascript console

    javascript console console.log(object[, object, ...])在控制台输出一条消息.如果有多个参数,输出时会用空格隔开这些参数. 第一个参数可以是一个包含格 ...

  4. 微信 php 获取ticket

    <?phpheader('content-type:text/html; charset=utf8');define('TOKEN', 'youtoken'); // TOKENdefine(' ...

  5. Eclipse插件引入jar包的方法

    搞了两天,终于找到解决办法了.原来  Eclipse 插件项目引入外面的jar包不能用   build path---->add external jars的方法. 先说明两个概念:类加载器,O ...

  6. ASP&period;NET中的Response

    Response.BufferOutput=true.false  是否设置缓存 Response.Write("")   输出字符串 Response.IsClientConne ...

  7. web兼容性测试相关知识

    一.客户端兼容性 1.浏览器的兼容性测试 a.内核角度 Tridnt内核:代表作IE.腾讯.遨游.世界之窗等 Gecko内核:代表作Firefox webkit内核:代表作Safari.Chrome ...

  8. OS&period;path部分函数的介绍

    OS.path模块中的部分函数的介绍 os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix( ...

  9. 基于MFC开发的指纹识别系统&period;

    MFC-FingerPrint 基于MFC开发的指纹识别系统. 效果图如下: 在第12步特征入库中,会对当前指纹的mdl数据与databases中所有的mdl进行对比,然后返回识别结果. 一.载入图像 ...

  10. Making a view in a listview invisible android

    问题: I have a ListView that's using a custom adapter. I want to dynamically add/remove items from the ...