ISWIM(如下首字母缩写“If you See What I Mean”),是的一种抽象的电脑编程语言(或编程语言家族),由Peter J. Landin设计,并描述在他1966年于ACM通讯发表的文章《The Next 700 Programming Languages》之中[1]

ISWIM
编程范型指令式, 函数式
设计者Peter J. Landin
发行时间1966年,​58年前​(1966
启发语言
ALGOL 60, Lisp
影响语言
ML, SASL, Lucid

尽管没有实现,它被证明为在编程语言开发中非常有影响力的语言,特别是对于函数式编程语言,比如MLSASLMirandaHaskell和它们的后继者,还有数据流程编程语言如Lucid

设计

ISWIM具有由加了语法糖的lambda演算构成的函数式核心,它是增加了可变变量和赋值的指令式语言,并具有Landin的强力控制机制J算子英语J operator,它能够捕获当前的续体Schemecall/cc英语call-with-current-continuation算子有与之类似的功能)。因为基于了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英语John C. Reynolds的Gedanken[4],获取了Landin的多数概念,包括强力的控制转移操作。这两者都是动态类型的。MilnerML,可以被认为等价于没有J算子,而有类型推论的ISWIM。

从ISWIM派生出的另一条路线,是去掉指令式特征(赋值和J算子)而留下纯函数式语言[5]。接着就有可能切换到惰性求值。这条路线导致了SASLKRCHopeMirandaHaskellClean

引用

  1. ^ 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). 
  2. ^ Gordon Plotkin英语Gordon Plotkin. Call-by-Name, Call-by Value and the Lambda Calculus (PDF) (报告). 1975 [2020-04-26]. (原始内容 (PDF)存档于2020-02-01). 
  3. ^ 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). 
  4. ^ John C. Reynolds英语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英语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). 
  5. ^ 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. 

本条目部分或全部内容出自以GFDL授权发布的《自由在线电脑词典》(FOLDOC)。