ISWIM

ISWIM 是 Peter J. Landin 设计并描述于他在1966年于ACM通讯中出版的文章《The Next 700 Programming Languages》中的抽象计算机编程语言(或编程语言家族)。名称是如下首字母缩写“If you See What I Mean”。
尽管没有实现,它被证明为在编程语言特别是函数式编程语言开发中非常有影响力的语言,比如 SASL, Miranda, ML, Haskell 和它们的后继者。
ISWIM 是带有由加了糖衣的 lambda 演算组成的函数式核心的指令式语言,它增加了(i)可变变量和赋值,(ii)强力控制机制 — Landin 的 J 算子,它能够捕获当前的续体(Scheme 的 call/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 算子)而留下纯函数式语言。接着就有可能切换到惰性求值。这条路导致了 SASL, Miranda 和 Haskell。





自定义分类:
程序设计语言
 
贡献者:
无限路由
Copyright © 1999-2024 C114 All Rights Reserved | 联系我们 | 沪ICP备12002291号-4