CLU
CLU是在1974年到1975年由麻省理工学院(MIT)的芭芭拉·利斯科夫和她的学生创造的一门编程语言。虽然它没有被广泛使用,但它引入了许多现在广泛使用的特性,并被视为面向对象(OOP)编程发展的重要一步。
多范式: 面向对象, 过程式 | |
設計者 | 芭芭拉·利斯科夫和她的学生 |
實作者 | 麻省理工学院 |
1975年 | |
穩定版本 | |
型態系統 | 强类型 |
網站 | www |
主要實作產品 | |
Native CLU,[1] Portable CLU,[2] clu2c[3] | |
啟發語言 | |
ALGOL 60, Lisp, Simula | |
影響語言 | |
Ada, Argus, C++, Lua, Python[4], Ruby, Sather, Swift[5] |
主要贡献包括抽象資料型別[6],传需求调用,迭代器,多值返回(并行赋值形式),参数化类型,和不定型別。值得注意的是它使用了类与构造器和方法,但没有继承。
聚簇
CLU的语法基于了ALGOL,这是多数新语言设计的起点。关键增补是“聚簇”(cluster)概念,它是CLU的类型扩展系统和语言名字的根源(CLUster)[7]。聚簇一般对应于面向对象语言中“类”的概念。例如,下面是CLU用来实现复数的语法:
complex_number = cluster is add, subtract, multiply, ... rep = record [ real_part: real, imag_part: real ] add = proc ... end add; subtract = proc ... end subtract; multiply = proc ... end multiply; ... end complex_number;
聚簇是封装了除了那些在“is”子句中显式命名的成员之外的所有成员的一个模块。这些成员对应于现在面向对象语言中一个类的公开成员。聚簇还定义了可以在聚簇之外命名的一个类型(在这个案例中是“complex_number”),但是它的表示类型(rep)对于外部客户是隐藏的。
聚簇名字是全局的,不提供名字空间机制来组织聚簇或允许它们在其他聚簇内部被“局部”创建。
CLU不进行隐式类型转换。在聚簇中,显式类型转换“up”和“down”在抽象类型和表示之间进行改变。有一个全体类型“any”,和一个过程“force[]”来检查一个对象是否是一个特定类型。对象可以是可变的或不可变的,后者是基础类型,比如整数、布尔值、字符和字符串[7]。
影响
CLU的异常处理机制影响了后来的语言如C++和Java[9]。
Sather、Python和C#包含了迭代器,它最早出现在CLU中。
参考资料
- Curtis, Dorothy. . Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Massachusetts Institute of Technology. 2009-11-06 [2016-05-26]. (原始内容存档于2016-06-02).
- Curtis, Dorothy. . Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Massachusetts Institute of Technology. 2009-11-06 [2016-05-26].
- Ushijima, Tetsu. . clu2c. woodsheep.jp. [2016-05-26]. (原始内容存档于2016-03-04).
- Lundh, Fredrik. . effbot.org. [21 November 2017]. (原始内容存档于2019-11-23).
replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model.
- Lattner, Chris. . Chris Lattner. 2014-06-03 [2014-06-03]. (原始内容存档于2018-12-25).
The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
- Liskov, Barbara; Zilles, Stephen. . : 50–59. 1974. doi:10.1145/800233.807045.
- Liskov, B.; Snyder, A.; Atkinson, R.; Schaffert, C. . Communications of the ACM. August 1977, 20 (8): 564–576. doi:10.1145/359763.359789.
- Stroustrup, Bjarne. . Bjarne Stroustrup's homepage. 2004-09-08 [2020-09-21]. (原始内容存档于2019-05-14).
- . Mindview.net. [2011-12-15]. (原始内容存档于2002-04-05).
- Ierusalimschy, R.; De Figueiredo, L. H.; Celes, W. . (PDF): 2–1–2–26. 2007 [2020-09-21]. ISBN 978-1-59593-766-7. doi:10.1145/1238844.1238846. (原始内容存档 (PDF)于2020-08-17).
- . Appfolio Engineering. 2019-11-08 [2019-11-15]. (原始内容存档于2019-11-14).
Matz feels that blocks are the greatest invention of Ruby (I agree.) He got the idea from a 1970s language called CLU from MIT, which called them 'iterators'...
- . docs.python.org. [2020-05-25]. (原始内容存档于2012-10-24).
外部链接
- 官方网站
- A History of CLU (pdf)
- clu2c页面存档备份,存于: a program to compile CLU code to C
- Dictionary of Programming Languages页面存档备份,存于
- CLU页面存档备份,存于 comparison at '99 bottles of beer' multi-language demo algorithm site
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.