newLISP
newLISP是作為Lisp方言的腳本語言。它由Lutz Mueller設計和開發[4]。newLISP是在GNU通用公共許可證版本3及以後版本下發行的自由及開放原始碼軟體。
編程範型 | 多范型 |
---|---|
語言家族 | Lisp |
設計者 | Lutz Mueller |
實作者 | Lutz Mueller |
面市時間 | 1991年 |
當前版本 |
|
作用域 | 動態 |
系統平台 | IA-32, x86-64 |
作業系統 | 跨平台: Unix, 類Unix, Windows |
許可證 | GPLv3+ |
網站 | www |
啟發語言 | |
C, Common Lisp, Perl, Scheme |
哲學
編輯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上的共享庫中導入函數。
框架
編輯引用
編輯- ^ 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].