newLISP是作為Lisp方言的腳本語言。它由Lutz Mueller設計和開發[4]。newLISP是在GNU通用公共許可證版本3及以後版本下發行的自由及開放原始碼軟體

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語言,然而只使用最現代的系統資源比如數據存儲(例如磁碟空間)和內存[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]. 

外部連結

編輯