Scheme 48Scheme編程語言的一種方言,遵循了R5RS標準[1],這個實現使用了發送字節碼解釋器[2]。它有一個外界函數接口英語foreign function interface用於調用來C語言的函數[3],並帶有一個正則表達式(regex)[4],和一個到可移植操作系統接口(POSIX)的接口[5]。它支持可移植Scheme庫SLIB英語SLIB,並且是Scheme shell Scsh英語Scsh的基礎[2]。它已經被用於學術研究之中[6]。它是在BSD許可證下發行的自由及開放源代碼軟件

Scheme 48
編程範型多范型: 函數式, 過程式, 元編程
語言家族Lisp/Scheme
設計者Richard Kelsey, Jonathan Rees
實作者Richard Kelsey, Jonathan Rees
面市時間1987年3月,​37年前​(1987-03
當前版本
  • 1.9.2(2014年4月)
編輯維基數據鏈接
型態系統動態, 強類型, 潛在英語Latent typing
作用域詞法
操作系統跨平台
許可證BSD
網站s48.org

叫做「Scheme 48」是因為它的第一版是在1986年8月用48小時寫成的[7]

實現

編輯

Scheme 48使用了一個虛擬機來解釋字節碼,它是用叫做PreScheme的一個Scheme的受限方言寫成的,這個方言可以被轉換成C並編譯成本機二進制代碼。PreScheme或寫為Pre-Scheme,是靜態類型的Scheme方言,具有C的高效性和低層機器訪問,卻保持了多數想要的Scheme特徵[8]

Pre-scheme是非常有價值的。我確信Kelsey曾發表了一篇關於它的論文。它在可以被裝載入Scheme系統並運行代碼的意義上是Scheme。但是它是有限制的 – 它要求你以允許完全的Hindley-Milner靜態類型推論的風格來書寫程序,而所有高階過程都在編譯時間被beta-代換了,這意味你可以*直接*將Prescheme程序轉寫「自然的」C代碼而具有C水平的效率。這就是說,你可以將Prescheme看作對用於低層代碼的C的真實舒適替代者。並且在撥轉開關而轉換到C代碼之前,你可以在你選擇的交互式Scheme開發環境中調試你的Prescheme程序,因為Prescheme就是受限的Scheme。Scheme 48字節碼解釋器是用Prescheme書寫的。Prescheme差不多消亡了 – 除了他寫的那篇學術論文,Kelsey從未有時間書寫它的文檔並將它變成其他人可以使用的獨立工具(Ian Horswill在西北大學的小組是這個論斷的一個例外 – 他們已經將Prescheme用於了有價值的工作。)

——Olin Shivers,"Olin Shivers: History of T英語T (programming language)"[9]

引用

編輯
  1. ^ R5RS claim頁面存檔備份,存於網際網路檔案館
  2. ^ 2.0 2.1 Kelsey, Richard; Rees, Jonathan. Scheme 48. S48.org. [2018-12-05]. (原始內容存檔於2022-04-21). 
  3. ^ Kelsey, Richard; Rees, Jonathan; Sperber, Mike. The Incomplete Scheme 48 Reference Manual for release 1.8: Mixing Scheme 48 and C. S48.org. 10 January 2008 [2018-12-05]. (原始內容存檔於2021-11-06). , Chapter 8 in manual for version 1.8.
  4. ^ Kelsey, Richard; Rees, Jonathan; Sperber, Mike. The Incomplete Scheme 48 Reference Manual for release 1.8: Regular Expressions. S48.org. 10 January 2008 [2018-12-05]. (原始內容存檔於2021-11-04). , Chapter 5 in manual for version 1.8.
  5. ^ Kelsey, Richard; Rees, Jonathan; Sperber, Mike. The Incomplete Scheme 48 Reference Manual for release 1.8: Access to POSIX. S48.org. 10 January 2008 [2018-12-05]. (原始內容存檔於2021-11-06). , Chapter 9 in manual for version 1.8.
  6. ^ Final shift for call/cc: direct implementation of shift and reset
  7. ^ Rees, Jonathan A. JAR's Scheme 48 Page. Jonathan A. Rees. Mumble.net. [2018-12-05]. (原始內容存檔於2021-05-24). 
  8. ^ Richard Kelsey. Pre-Scheme: A Scheme Dialect for Systems Programming. 1997 [2021-11-04]. (原始內容存檔於2009-08-14). 
  9. ^ Shivers, Olin. Olin Shivers: History of T. PaulGraham.com. [2018-12-05]. (原始內容存檔於2022-10-05). 

外部連結

編輯