跳转到内容

newLISP

维基百科,自由的百科全书

newLISP
编程范型多范型
语言家族Lisp
设计者Lutz Mueller
实作者Lutz Mueller
发行时间1991年,​33年前​(1991
当前版本
  • 10.7.5(2019年5月12日;稳定版本)[1]
编辑维基数据链接
作用域动态
系统平台IA-32, x86-64
操作系统跨平台: Unix, 类Unix, Windows
许可证GPLv3+
网站www.newlisp.org
启发语言
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运行的操作系统包括:BSDLinuxmacOSSolarisWindows[2]。它支持MYSQLSQLiteODBC数据访问,通用网关接口(CGI)、简单邮件传输协议(SMTP)、邮局协议(POP)3、文件传输协议(FTP)和XML远程过程调用XML-RPC)。它能以服务器模式运行为守护进程

语言特征

上下文

newLISP支持叫做“上下文”的命名空间,它们可以被赋值给变量并传递给函数,但是它们关联着全局唯一的符号,限制了它们作为头等对象的使用。在newLISP中基于原型面向对象风格的编程是可行的,可使用上下文作为原型来构造对象。在上下文内的变量不会干扰在其他上下文内同名的变量,但是在上下文内部,变量的行为遵守动态作用域规则。

作用域

newLISP使用动态作用域。当一个函数被调用的时候,这个函数可以见到它的调用者的所有变量,上至在相同的上下文或命名空间内的调用者的调用者,以此类推。它支持显式的和隐式的定义局部动态变量,遮蔽英语Variable shadowing外部环境的同名变量,从而防止意外使用或变更来自调用者环境的变量。被调用函数的形式参数变量自动的遮蔽调用者的调用环境。在全局上,变量可以组织在独立的空间内。

内存管理

newLISP使用了不同于传统垃圾回收方案的一种自动内存管理方法,称为仅有一处引用(one reference only:ORO)。每个变量只被它的上下文引用,而每个上下文都是全局引用的。

在newLISP中不支持在对象间的子对象共享、环状结构、或多个变量指向相同的对象。在存储于数据结构,或传递给除了特定内建函数之外的函数的时候,对象会被复制。例外的是符号和上下文,它们是共享的而不会被复制,因而可以用于间接寻址。符号和上下文是全局性命名和显式删除的;删除一个符号或上下文,会扫描所有对象来将到它的引用替代为nil

GUI选项

newLISP图形用户界面(GUI)服务器(newLISP-GS),是提供图形编程接口的一个基于Java互联网协议族(TCP/IP)服务器。在newLISP二进制发行中,能获得到基于newLISP-GS的开发环境,并能获得GTK-server英语GTK-serverOpenGL和基于Tcl/Tk的编程接口。

独立二进制执行

任何newLISP版本都允许建造可执行文件,和自包含而不需要安装就可部署的可移植应用

交互于共享库

newLISP拥有导入函数,允许用它从Windows API Win32上的动态链接库(DLL),或者Linux或Unix上的共享库中导入函数。

框架

newLISP能获得的Web应用框架包括Dragonfly[7]和Rockets[8]

引用

  1. ^ http://www.newlisp.org/downloads/newLISP-10.7.5-Release.html.
  2. ^ 2.0 2.1 newLISP. [2018-11-20]. (原始内容存档于2022-04-17). 
  3. ^ work in progress. [2022-05-08]. (原始内容存档于2020-10-21). 
  4. ^ Walling, Rob. An Interview with Lutz Mueller, Creator of newLISP. Softwarebyrob.com. [2018-11-20]. (原始内容存档于2017-06-20). 
  5. ^ Category:newLISP. Rosetta Code. [2018-11-20]. (原始内容存档于2022-04-30). 
  6. ^ Lazar, Alexandru. A look at newLISP. OSNews. 5 January 2009 [2018-11-20]. (原始内容存档于2018-12-11). 
  7. ^ Slepak, Greg; Hildmann, Marc. Dragonfly web framework. AppTruck. [2018-11-20]. (原始内容存档于2016-03-03). 
  8. ^ Reimer, Jeremy. The newLISP on Rockets 2.0 Blog. Rocket Man. [2018-11-20]. 

外部链接