跳转到内容

ISWIM

本页使用了标题或全文手工转换
维基百科,自由的百科全书
ISWIM
编程范型指令式, 函数式
設計者Peter J. Landin
发行时间1966年,​59年前​(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]

尽管没有实现,它被证明为在编程语言开发中非常有影响力的语言,特别是对于函数式编程语言,比如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)。

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy