ISWIM
編程範型 | 指令式, 函數式 |
---|---|
設計者 | Peter J. Landin |
面市時間 | 1966年 |
啟發語言 | |
ALGOL 60, Lisp | |
影響語言 | |
ML, SASL, Lucid |
ISWIM(如下首字母縮寫「If you See What I Mean」),是的一種抽象的計算機編程語言(或編程語言家族),由Peter J. Landin設計,並描述在他1966年於ACM通訊發表的文章《The Next 700 Programming Languages》之中[1]。
儘管沒有實現,它被證明為在編程語言開發中非常有影響力的語言,特別是對於函數式編程語言,比如ML、SASL、Miranda、Haskell和它們的後繼者,還有數據流程編程語言如Lucid。
設計
ISWIM具有由加了語法糖的lambda演算構成的函數式核心,它是增加了可變變量和賦值的指令式語言,並具有Landin的強力控制機制J算子,它能夠捕獲當前的續體(Scheme的call/cc算子有與之類似的功能)。因為基於了lambda演算,ISWIM具有高階函數和詞法作用域變量。
ISWIM的操作語義,使用Landin的SECD抽象機來定義,並且使用了傳值調用,因而是及早求值的[2]。ISWIM的目標之一,就是要看起來更像數學表示,所以Landin放棄了ALGOL的語句間分號,和begin...end
塊結構,並把它們替代為越位規則,和基於縮進的轄域。
ISWIM在表示法上的特色,是使用了where
子句。ISWIM程序是一個單一表達式,它由where
子句(包括變量間等式的輔助定義)、條件表達式和函數定義所量化。與CPL一起,ISWIM是最早使用where
子句的語言之一。
ISWIM的顯著的語義特徵,是有能力將新數據類型,定義為(可能遞歸的)乘積之和。這是使用稍顯冗餘的自然語言風格描述來完成的,但是除了表示法之外,完全等同於現代函數式語言中代數數據類型。ISWIM變量沒有明確的類型聲明,儘管在1966年論文中沒有明確的說出來,Landin好像希望這個語言是動態類型的,像LISP而不像ALGOL;但是也有可能他想要開發某種形式的類型推論。
實現和派生
沒有進行過直接實現ISWIM的嘗試,但Arthur Evans的PAL[3],和John C. Reynolds的Gedanken[4],獲取了Landin的多數概念,包括強力的控制轉移操作。這兩者都是動態類型的。Milner的ML,可以被認為等價於沒有J算子,而有類型推論的ISWIM。
從ISWIM衍生出的另一條路線,是去掉指令式特徵(賦值和J算子)而留下純函數式語言[5]。接着就有可能切換到惰性求值。這條路線導致了SASL、KRC、Hope、Miranda、Haskell、Clean。
引用
- ^ Landin, P. J. The Next 700 Programming Languages (PDF). Communications of the ACM (Association for Computing Machinery). March 1966, 9 (3): 157–165 [2021-08-28]. S2CID 13409665. doi:10.1145/365230.365257. (原始內容 (PDF)存檔於2022-03-23).
- ^ Gordon Plotkin. Call-by-Name, Call-by Value and the Lambda Calculus (PDF) (報告). 1975 [2020-04-26]. (原始內容 (PDF)存檔於2020-02-01).
- ^ Arthur Evans. PAL: a language designed for teaching programming linguistics. Proceedings ACM National Conference. ACM National Conference. Association for Computing Machinery. 1968.
A. Evans. PAL -- A Reference Manual and a Primer (PDF) (報告). Department of Electrical Engineering, Massachusetts Institute of Technology. February 1968 [2021-09-09]. (原始內容 (PDF)存檔於2022-03-06).
A. Evans. Appendix 2.1. The Complete Syntax for PAL (PDF) (報告). February 1968 [2021-09-10]. (原始內容 (PDF)存檔於2022-03-06).
J. M. Wozencraft, A. Evans. Notes on Programming Linguistics (PDF). M.I.T. Department of Electrical Engineering. 1971 [2021-09-11]. (原始內容 (PDF)存檔於2022-03-06). - ^ John C. Reynolds. GEDANKEN: a simple typeless language which permits functional data structures and co-routines (PDF) (報告). Argonne National Laboratory. September 1969 [2021-09-09]. (原始內容 (PDF)存檔於2021-09-09).
John C. Reynolds. Definitional interpreters for higher-order programming languages. ACM '72: Proceedings of the ACM annual conference - Volume. August 1972 [2022-11-19]. doi:10.1145/800194.805852. (原始內容存檔於2022-11-27). - ^ Ivanović, Mirjana; Budimac, Zoran. A definition of an ISWIM-like language via Scheme. ACM SIGPLAN Notices. April 1993, 28 (4): 29–38. S2CID 14379260. doi:10.1145/152739.152743.