ISWIM

ISWIMPeter J. Landin设计并描述于他在1966年于ACM通讯中出版的文章《The Next 700 Programming Languages》中的抽象计算机编程语言(或编程语言家族)。名称是如下首字母缩写“If you See What I Mean”。

ISWIM
指令式, 函数式
設計者Peter J. Landin
1966年1966
啟發語言
ALGOL 60, Lisp
影響語言
ML, SASL, Lucid

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

设计

ISWIM是带有由加了语法糖的lambda 演算组成的函数式核心的指令式语言,它增加了可变变量和赋值,和强力控制机制Landin的J算子,它能够捕获当前的续体(Schemecall/cc算子是简化版本的Landin的J算子)。因为基于lambda演算,ISWIM有高阶函数词法辖域变量。

ISWIM的操作语义是使用Landin的SECD抽象机定义的,并且使用了传值调用因而是及早求值的。ISWIM的目标之一就是看起来更像数学表示,所以Landin放弃了ALGOL的语句间分号和begin...end块结构并把它们替代为越位规则和基于缩进的辖域。

ISWIM的一个概念上的特色是使用了where子句。ISWIM程序是由where子句(包括变量间等式的辅助定义),条件表达式和函数定义所量化的一个单一表达式。与CPL一起,ISWIM是最早使用where子句的语言之一。

显著的语义特征是有能力定义新数据类型为(可能递归的)乘积之和,这是使用了稍微冗余的自然语言风格描述来完成的,但是除了表示法之外完全等同于现代函数式语言中代数数据类型。ISWIM变量没有明确的类型声明,Landin好像(尽管在1966年论文中没有明确的说)希望这个语言是动态类型的,像LISP而不像ALGOL;但是也有可能他想要开发某种形式的类型推论

实现和派生

没有尝试过ISWIM的直接实现,但Art Evan的PAL和John Reynold的Gedanken捕获了Landin的多数概念,包括强力控制转移操作。这两者都是动态类型的。Milner的ML可以被认为等价于没有J算子和有类型推论的ISWIM。

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

引用

  • P. J. Landin The Next 700 Programming Languages页面存档备份,存于. CACM 9(3):157–65, March 1966.
  • Art Evans. PAL — a language designed for teaching programming linguistics. Proceedings ACM National Conference 1968.
  • J. C. Reynolds. GEDANKEN: a simple typeless language which permits functional data structures and co-routines. Argonne National Laboratory September 1969.
  • Gordon Plotkin (1975). Call-by-Name, Call-by Value and the Lambda Calculus页面存档备份,存于.
  • Mirjana Ivanović, Zoran Budimac. A definition of an ISWIM-like language via Scheme. ACM SIGPLAN Notices, Volume 28, No. 4 April 1993.

本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。

参见

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.