newLISP
编程范型 | 多范型 |
---|---|
语言家族 | Lisp |
設計者 | Lutz Mueller |
實作者 | Lutz Mueller |
发行时间 | 1991年 |
当前版本 |
|
作用域 | 动态 |
系统平台 | IA-32, x86-64 |
操作系统 | 跨平台: Unix, 类Unix, Windows |
許可證 | GPLv3+ |
網站 | www |
啟發語言 | |
C, Common Lisp, Perl, Scheme |
newLISP是作为Lisp方言的脚本语言。它由Lutz Mueller设计和开发[4]。newLISP是在GNU通用公共许可证版本3及以后版本下发行的自由及开放源代码软件。
哲学
[编辑]newLISP尝试提供快速、强力、跨平台、全特征的脚本语言版本的Lisp语言,然而只使用最现代的系统资源比如数据存储(例如磁盘空间)和内存[5][6]。
它提供的Lisp特征包括:列表、符号处理、函数映射、匿名函数(lambda表达式)、S-表达式(排除不适当列表)和宏。它还提供现代脚本语言预期的功能包括:支持正则表达式、XML、Unicode(UTF-8)、通过传输控制协议(TCP)、互联网协议(IP)和用户数据报协议(UDP)联网、矩阵和数组处理,高级数学、统计和贝叶斯统计分析、数理金融和分布式计算。
newLISP运行的操作系统包括:BSD、Linux、macOS、Solaris和Windows[2]。它支持MYSQL、SQLite和ODBC数据访问,通用网关接口(CGI)、简单邮件传输协议(SMTP)、邮局协议(POP)3、文件传输协议(FTP)和XML远程过程调用(XML-RPC)。它能以服务器模式运行为守护进程。
语言特征
[编辑]上下文
[编辑]newLISP支持叫做“上下文”的命名空间,它们可以被赋值给变量并传递给函数,但是它们关联着全局唯一的符号,限制了它们作为头等对象的使用。在newLISP中基于原型面向对象风格的编程是可行的,可使用上下文作为原型来构造对象。在上下文内的变量不会干扰在其他上下文内同名的变量,但是在上下文内部,变量的行为遵守动态作用域规则。
作用域
[编辑]newLISP使用动态作用域。当一个函数被调用的时候,这个函数可以见到它的调用者的所有变量,上至在相同的上下文或命名空间内的调用者的调用者,以此类推。它支持显式的和隐式的定义局部动态变量,遮蔽外部环境的同名变量,从而防止意外使用或变更来自调用者环境的变量。被调用函数的形式参数变量自动的遮蔽调用者的调用环境。在全局上,变量可以组织在独立的空间内。
内存管理
[编辑]newLISP使用了不同于传统垃圾回收方案的一种自动内存管理方法,称为仅有一处引用(one reference only:ORO)。每个变量只被它的上下文引用,而每个上下文都是全局引用的。
在newLISP中不支持在对象间的子对象共享、环状结构、或多个变量指向相同的对象。在存储于数据结构,或传递给除了特定内建函数之外的函数的时候,对象会被复制。例外的是符号和上下文,它们是共享的而不会被复制,因而可以用于间接寻址。符号和上下文是全局性命名和显式删除的;删除一个符号或上下文,会扫描所有对象来将到它的引用替代为nil
。
GUI选项
[编辑]newLISP图形用户界面(GUI)服务器(newLISP-GS),是提供图形编程接口的一个基于Java的互联网协议族(TCP/IP)服务器。在newLISP二进制发行中,能获得到基于newLISP-GS的开发环境,并能获得GTK-server、OpenGL和基于Tcl/Tk的编程接口。
独立二进制执行
[编辑]任何newLISP版本都允许建造可执行文件,和自包含而不需要安装就可部署的可移植应用。
交互于共享库
[编辑]newLISP拥有导入函数,允许用它从Windows API Win32上的动态链接库(DLL),或者Linux或Unix上的共享库中导入函数。
框架
[编辑]newLISP能获得的Web应用框架包括Dragonfly[7]和Rockets[8]。
引用
[编辑]- ^ http://www.newlisp.org/downloads/newLISP-10.7.5-Release.html.
- ^ 2.0 2.1 newLISP. [2018-11-20]. (原始内容存档于2022-04-17).
- ^ work in progress. [2022-05-08]. (原始内容存档于2020-10-21).
- ^ Walling, Rob. An Interview with Lutz Mueller, Creator of newLISP. Softwarebyrob.com. [2018-11-20]. (原始内容存档于2017-06-20).
- ^ Category:newLISP. Rosetta Code. [2018-11-20]. (原始内容存档于2022-04-30).
- ^ Lazar, Alexandru. A look at newLISP. OSNews. 5 January 2009 [2018-11-20]. (原始内容存档于2018-12-11).
- ^ Slepak, Greg; Hildmann, Marc. Dragonfly web framework. AppTruck. [2018-11-20]. (原始内容存档于2016-03-03).
- ^ Reimer, Jeremy. The newLISP on Rockets 2.0 Blog. Rocket Man. [2018-11-20].