Modula-2:修订间差异
小 →特征 |
小 →引用 |
||
第114行: | 第114行: | ||
==引用== |
==引用== |
||
{{reflist}} |
{{reflist}} |
||
== 图书 == |
|||
*{{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |date=1988 |title=Programming in Modula-2 |edition=4th |url=https://link.springer.com/book/10.1007/978-3-642-83565-0 |location=[[Berlin]] [[Heidelberg]] |publisher=[[Springer-Verlag]] |doi=10.1007/978-3-642-83565-0 |isbn=978-0-387-96051-7}} |
|||
*{{cite book |last=King |first=K. N. |date=1 January 1988 |title=Modula-2: A Complete Guide |url=http://knking.com/books/modula2/ |location=[[Burlington, Massachusetts]] |publisher=Jones and Bartlett Publishers |isbn=978-0669110913}} |
|||
*{{cite book |last=Sutcliffe |first=Richard J. |date=2004–2005 |title=Modula-2: Abstractions for Data and Programming Structures |url=http://www.arjay.bc.ca/Modula-2/Text/ |publisher=Arjay Books |isbn=978-0-669-11091-3}} Uses ISO-standard Modula-2. |
|||
*{{cite book |last=Gleaves |first=Richard |date=1984 |title=Modula-2 for Pascal Programmers |series=Springer Books on Professional Computing |edition=1st |url=https://link.springer.com/book/10.1007%2F978-1-4613-8531-8 |location=Switzerland |publisher=Springer Nature |doi=10.1007/978-1-4613-8531-8 |isbn=978-0-387-96051-7}} |
|||
*{{cite book |last=Cooper |first=Doug |date=1 September 1990 |title=Oh My! Modula-2: An Introduction to Programming |location=[[New York City]], [[New York (state)|New York]] |publisher=[[W. W. Norton & Company]] |isbn=978-0393960099}} |
|||
== 外部連結 == |
== 外部連結 == |
2021年6月14日 (一) 11:57的版本
编程范型 | 指令式、结构化、模块化、数据和方法隐藏、并发 |
---|---|
設計者 | 尼克劳斯·维尔特 |
发行时间 | 1978年 |
型態系統 | 强,静态 |
系统平台 | Lilith(AMD 2901) |
操作系统 | 跨平台 |
文件扩展名 | .mod .m2 .def .MOD .DEF .mi .md |
主要實作產品 | |
Niklaus Wirth撰写的ETH编译器 GNU Modula-2 ADW Modula-2 | |
衍生副語言 | |
PIM2、PIM3、PIM4、ISO | |
啟發語言 | |
Modula、Mesa、Pascal、ALGOL W、Euclid | |
影響語言 | |
Modula-3、Oberon、Ada、Fortran、Lua、Seed7、Zonnon、Modula-GM |
Modula-2,是由尼克劳斯·维尔特(Niklaus Wirth)提出的通用的过程式语言,具有充分的灵活性用于系统编程,和更加广阔应用领域。特别是,它被设计用来一种直接的方式支持分离的编译和数据抽象。它的很多语法是基于了Wirth早先的周知语言Pascal。Modula-2被设计为显著的类似于Pascal,移除了一些元素和语法歧义,增补了“模块”这个重要概念,并且对多道程序有直接的语言支持。
描述
Modula-2语言允许使用一趟编译器。Gutknecht和Wirth的这种编译器大致上比早前的多趟编译器要快上四倍[1]。
下面是"Hello world"程序的源代码例子:
MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
WriteString("Hello World!");
END Hello.
Modula-2的模块(module)可以用来封装一组有关的子程序和数据结构,并限制它们对程序其他部份的可见性。模块设计以清晰的方式实现了Modula-2的数据抽象特征。Modula-2程序是由模块组成,每个模块构成自两个部份:作为接口部份的"定义模块",它只包含“导出”的那部份子系统(对其他模块可见),和“实现模块”,它包含模块内部的工作代码。
语言有严格的作用域控制。模块的作用域可以被当作是不可逾越的墙:在标准标识符之外,来自外部的对象在模块内是不可见的,除非显式的导入它;内部的模块对象在外部是不可见的,除非显式的导出它。
假定模块M1
导出对象a
、b
、c
和P
,通过列举它们的标识符于显式导出列表之中:
DEFINITION MODULE M1;
EXPORT QUALIFIED a, b, c, P;
...
然后来自模块M1
的对象a
、b
、c
和P
,在模块M1外部就叫做M1.a
、M1.b
、M1.c
和M1.P
。它们以一种有限制的方式给导出至外部(假定模块M1
是全局的)。导出的模块名字比如M1
,被用作限定符并跟随着对象的名字。
假定模块M2
包含下列IMPORT
声明:
MODULE M2;
IMPORT M1;
...
然后这意味着模块M1
导出至它所包围的程序的外部的对象,现在可以用在模块M2
内部。它们以一种限定方式来引用,也就是M1.a
、M1.b
、M1.c
和M1.P
。例如:
...
M1.a := 0;
M1.c := M1.P(M1.a + M1.b);
...
限定的导出避免了名字冲突:例如,如果另一个模块M3
也导出了一个对象叫做P
,那么我们仍可以区分这两个对象,因为M1.P
不同于M3.P
。凭借限定导出,两个对象在它们的导出模口M1
和M3
中都叫做P
是不碍事的。
存在一种可作为替代的方式,它在Modula-2编程者中广泛采用。假定模块M4
是公式化为如下:
MODULE M4;
FROM M1 IMPORT a, b, c, P;
然后这意味着模块M1
导出至外部的对象可以用在模块M4
内部,但可以用无限定方式来引用导出的标识符,也就是a
、b
、c
和P
。例如:
...
a := 0;
c := P(a + b);
...
这种无限定导入的方法,允许在其导出模块之外,以同在它们的导出模块之内一样简单的方式,来使用这些变量和其他对象。对于已经被显式允许的所有这些对象,变得与包围所有模块的墙没有关系了。当然无限定导入只在没有名字冲突时是可用的。
这些导出和导入规则看起来可能是没有必要的限制和冗余的。但是它们不只是守卫对象免于不希望的访问,而且还有一个让人愉悦的副作用,提供了在程序中定义的所有标识符的自动交叉引用:如果标识符被一个模块名字所限定,那么它的定义位于那个模块。否则如果它是无限定的出现的,简单的反向查找,将会要么遇到这个标识符的声明,要么遇到它出现在一个IMPORT
语句中,指出了它所来自的模块的名字。这个性质在尝试理解包含很多模块的大型程序时是非常有用的。
语言提供了(有限的)单处理器并发(监视器、协程和显式控制转移)和硬件访问(绝对地址、位操纵和中断)。它使用了名称类型系统。
历史
图灵奖获得者Wirth,根據其早期對Pascal、模組程式語言(Modula)或稱為Modula-1程式語言、及Alto電腦的經驗,來定義Modula-2。在1976至1977年間,Wirth在Xerox Palo Alto研究中心,與一群設計Alto電腦的工作夥伴一同工作,次年,他在瑞士聯邦理工學院資訊研究所,開始了一個Lilith個人電腦計畫。該計畫主要的原則乃是以Modula-2為Lilith的系統程式語言,而以Lilith為Modula-2的組織架構。由於不需組譯器(Assembler),該語言不僅適用於編寫高階的應用程式,也應適用於編寫低階,與機器相關的編碼程式(Machine-Dependent Coding),用裝置的操控與儲存體的配置。
該語言本身與Lilith結構之設計,都以優雅及簡單為原則,在整個Lilith計畫的生命期中(1978-1988),作業系統、繪圖套裝軟體、資料庫系統、網路協議、檔案伺服器及許多其他系統和應用模組都是藉著Modula-2發展出來的。
特征
Modula-2設計是讓其程式模組得以重複使用(Reuse)。它藉著提供一些標準程式庫,如異常處置(Exception Handling)、字串處理(String Processing)、輸入/輸出(I/O)及並行程式設計(Concurrent Programming)等,來降低語言本身的複雜度。
一個Modula-2的定義模組(Definition Module),定義抽象化資料(Data Abstraction)的介面規格。一個定義模組,是與其相對應的實作模組(Implementation Module),個別分開來編譯。一旦編譯好就不必再改變。一個定義模組(Definition Module)包含對常數、類型(Type)、變數及程序標頭的宣告。只有那些可能會被其他程式設計師引用到的程式標頭,才會被宣告在定義模組內。那些相對應的執行模組,包括區域性的常數、類型、變數宣告;以及外部程序和內部實作所需用到的程序定義。
程式是由上而下(Top-Down)的方式發展,其步驟乃是先建立若干定義模組,之後再隨著需要建立實作模組的部分。每一個實作模組,可在其被呼叫前對其區域性的資料結構設定初始值。Modula-2也需偵測在實作模組內的資料是否已過時而導致資料的不一致。
Modula-2程式語言有幾項特色,使其在電腦科學的發展過程中,有著功不可沒的功勞。首先,它所提出的電腦架構、語言和作業環境的整合概念,是一項創舉;其次,它強調程式設計師在使用者介面的設計上,至少需花費用同實作程式設計時所耗費的成本和努力。最後,它提出對抽象化資料的簡化。
參見
引用
- ^ Wirth, Niklaus. A Single-pass Modula-2 Compiler for Lilith (PDF). CFB Software. 1 May 1984 [28 January 2019].
图书
- Wirth, Niklaus. Programming in Modula-2 4th. Berlin Heidelberg: Springer-Verlag. 1988. ISBN 978-0-387-96051-7. doi:10.1007/978-3-642-83565-0.
- King, K. N. Modula-2: A Complete Guide. Burlington, Massachusetts: Jones and Bartlett Publishers. 1 January 1988. ISBN 978-0669110913.
- Sutcliffe, Richard J. Modula-2: Abstractions for Data and Programming Structures. Arjay Books. 2004–2005. ISBN 978-0-669-11091-3. Uses ISO-standard Modula-2.
- Gleaves, Richard. Modula-2 for Pascal Programmers. Springer Books on Professional Computing 1st. Switzerland: Springer Nature. 1984. ISBN 978-0-387-96051-7. doi:10.1007/978-1-4613-8531-8.
- Cooper, Doug. Oh My! Modula-2: An Introduction to Programming. New York City, New York: W. W. Norton & Company. 1 September 1990. ISBN 978-0393960099.
外部連結
- Modula-2 Internet directory(页面存档备份,存于互联网档案馆)
- The Modula-2 website ring(页面存档备份,存于互联网档案馆)
- https://web.archive.org/web/20060806030519/http://murray.newcastle.edu.au/users/staff/peter/m2/Modula2.html (英文)
- http://www.arjay.bc.ca/Modula-2/m2faq.html(页面存档备份,存于互联网档案馆) (英文)
- http://www.nongnu.org/gm2/(页面存档备份,存于互联网档案馆) GNU Modula-2 (英文)
- https://web.archive.org/web/20150722230801/http://objective.modula2.net/ Objective Modula-2 (英文)
本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。
|