fbpx
维基百科

Modula-2

Modula-2,是一种通用的结构化过程式编程语言,由尼克劳斯·维尔特在1978年至1985年间于苏黎世联邦理工学院开发。它具有充分的灵活性用于系统编程,和更加广阔应用领域。特别是,它被设计为以一种直接的方式支持分离编译和数据抽象。它的很多语法基于了维尔特早先的周知语言Pascal

Modula-2
编程范型指令式结构化模块化数据和方法隐藏英语information hiding并发
语言家族Wirth Modula
設計者尼克劳斯·维尔特
发行时间1978年,​46年前​(1978
型態系統强,静态
系统平台Lilith英语Lilith (computer)AMD 2901英语AMD Am2900
操作系统跨平台
文件扩展名.mod .m2 .def .MOD .DEF .mi .md
網站www.modula2.org
主要實作產品
Niklaus Wirth編写的, GNU Modula-2, ADW Modula-2
衍生副語言
PIM2、PIM3、PIM4、ISO
啟發語言
Modula, Mesa, Pascal, ALGOL W, Euclid英语Euclid (programming language)
影響語言
Modula-3, Oberon, Ada, Fortran, Lua, Seed7英语Seed7, Zonnon英语Zonnon, Modula-GM

历史 编辑

在1976年至1977年年間,维尔特在Xerox Palo Alto研究中心,與一群設計Alto電腦的工作夥伴一同工作。1978年,维尔特在瑞士聯邦理工學院資訊研究所,根據其早期對Pascal程式語言Modula模組程式語言、及Alto電腦的經驗,定義了Modula-2語言,他還開始了一個Lilith英语Lilith (computer)個人電腦計畫。

Modula-2語言本身與Lilith結構之設計,都以優雅及簡單為原則,是以Modula-2為Lilith的系統程式語言,而不需用到組譯器,並且以Lilith為Modula-2的組織架構。為此,Modula-2語言不僅要適用於編寫高階的應用程式,也要應適用於編寫低階的與機器相關的編碼程式,用於裝置的操控與儲存體的配置。

Modula-2提供了一些標準程式庫模組,如異常處置、字串處理、輸入/輸出及並行程式設計等,通過重複使用它們來降低語言本身的複雜度。在Lilith計畫從1978年到1988年的整個生命期中,作業系統、繪圖套裝軟體、資料庫系統、網路協議、檔案伺服器,及許多其他系統和應用模組,都是藉著Modula-2發展出來的。

描述 编辑

Modula-2被设计为显著的类似于Pascal,移除了一些元素和语法歧义,增补了“模块”这个重要概念,并且对多道程序有直接的语言支持。维尔特将Modula-2看作他早期的编程语言PascalModula的后继者[1][2]。主要的概念是:

  1. 模块是分离编译的编译单元。
  2. 协程并发处理的基本建造块。
  3. 类型和过程允许访问特定于机器的数据。

Modula-2提供了(有限的)单处理器并发(监视器协程和显式控制转移)和硬件访问(绝对地址、位操纵和中断)。它使用了名称类型系统英语nominal type system。Modula-2语言允许使用一趟编译器英语One-pass compilerGutknecht英语Jürg Gutknecht和维尔特的这种编译器大致上比早前的多趟编译器英语Multi-pass compiler要快上四倍[3]

Modula-2有两种主要方言:PIM和ISO/IEC 10514-1:1996,PIM得名于Niklaus Wirth的著作《Programming in Modula-2》[4],这本书一共有四个版本,成为方言的是PIM2(1983年)、PIM3(1985年)和PIM4(1988年)。

例子代码 编辑

下面是"Hello world"程序的Modula-2源代码例子:

MODULE Hello; FROM STextIO IMPORT WriteString; BEGIN WriteString("Hello World!"); END Hello. 

语言元素 编辑

保留字 编辑

PIM版本2、3、4定义了40个保留字

AND ELSIF  LOOP REPEAT ARRAY END  MOD RETURN BEGIN EXIT MODULE SET BY EXPORT NOT THEN CASE FOR  OF TO CONST FROM OR TYPE DEFINITION IF  POINTER UNTIL DIV IMPLEMENTATION PROCEDURE VAR DO IMPORT QUALIFIED WHILE ELSE IN  RECORD WITH 

内建标识符 编辑

PIM版本3、4定义了29个内建标识符

ABS EXCL LONGINT REAL BITSET FALSE  LONGREAL SIZE BOOLEAN FLOAT  MAX TRUE CAP HALT MIN TRUNC CARDINAL HIGH NIL VAL CHAR INC  ODD CHR INCL ORD DEC INTEGER PROC 

模块 编辑

Modula-2的模块(module),可以用来封装一组有关的子程序和数据结构,并限制它们对程序其他部份的可见性。模块设计以清晰的方式,实现了Modula-2的数据抽象特征。语言有严格的作用域控制。模块的作用域,可以被当作是不可逾越的墙:除了标准标识符之外,来自外部的对象在模块内是不可见的,除非显式的导入它;内部的模块对象在外部是不可见的,除非显式的导出它。

Modula-2程序是由模块组成,其中“程序模块”包含一个Modula-2程序的主程序。所有Modula-2程序,必须有定义了执行开始之处的一个主程序。在一个单一的程序中,不能有链接在一起的两个程序模块。“局部模块”是在其他模块内声明的模块。程序模块和局部模块的起始关键字,就是单独的MODULE

定义模块与实现模块 编辑

除了程序模块之外的“全局模块”,都构成自两个部份:作为接口部份的“定义模块”,它只包含“导出”(对其他模块可见)的那部份子系统,和同名的“实现模块”,它包含模块内部的工作代码:

DEFINITION MODULE GM; ... IMPLEMENTATION MODULE GM; ... 

定义模块中可以包含不透明类型英语Opaque data type声明,它有如下形式:

TYPE name; 

它对应的实际类型,对于这个模块的用户是不可见的。这个类型名字,可以用在定义模块内的其他声明之中。对于在定义模块中声明的任何不透明类型,在对应的实现模块中,必须包含它的完全类型声明。完全类型声明,必须定义一个指针类型。

导出 编辑

假定局部模块M1导出对象abcP,可将它们的标识符列举于显式EXPORT导出列表之中:

MODULE M1; EXPORT a, b, c, P; ... 

如果加上了可选的关键字QUALIFIED,它们以一种有限制的方式给导出至外部,必须将导出的这个模块名字用作限定符,并跟随着对象的名字。这里的来自模块M1的对象abcP,在模块M1外部就叫做M1.aM1.bM1.cM1.P

PIM2在定义模块中要求显式的EXPORT子句;PIM3从定义模块中删除了EXPORT子句,因为发现了它是多余的。

导入 编辑

假定模块M2包含下列IMPORT声明:

MODULE M2; IMPORT M1; ... 

然后这意味着模块M1导出至它所包围的程序的外部的对象,现在可以用在模块M2内部。它们以一种限定方式来引用,也就是M1.aM1.bM1.cM1.P。例如:

 ... M1.a := 0; M1.c := M1.P(M1.a + M1.b); ... 

限定导出避免了名字冲突:例如,如果另一个模块M3也导出了一个对象叫做P,那么我们仍可以区分这两个对象,因为M1.P不同于M3.P。凭借限定导出,两个对象在它们的导出模块M1M3中都叫做P是不碍事的。

存在一种可作为替代的方式,它在Modula-2编程者中广泛采用。假定模块M3是公式化为如下:

MODULE M3; FROM M1 IMPORT a, b, c, P; 

然后这意味着模块M1导出至外部的对象,可以用在模块M3内部,但可以用无限定方式来引用导出的标识符,也就是abcP。例如:

 ... a := 0; c := P(a + b); ... 

这种无限定导入的方法,允许在其导出模块之外,以同在它们的导出模块之内一样简单的方式,来使用这些变量和其他对象。对于所有这些已经被显式允许的对象,包围所有模块的墙变得与它们无关了。当然无限定导入只在没有名字冲突时是可用的。

这些导出和导入规则,看起来可能是没有必要的限制和冗余的。但是它们不只是守卫对象免于不希望的访问,而且还有一个让人愉悦的副作用,提供了在程序中定义的所有标识符的自动交叉引用:如果标识符被一个模块名字所限定,那么它的定义位于那个模块。否则如果它是无限定的出现的,简单的回溯查找,将会要么遇到这个标识符的声明,要么遇到它出现在一个IMPORT语句中,指出了它所来自的模块的名字。这个性质在尝试理解包含很多模块的大型程序时是非常有用的。

參見 编辑

引用 编辑

  1. ^ Wirth, Niklaus. Pascal and its Successors. Broy, Manfred; Denert, Ernst (编). Software Pioneers: Contributions to Software Engineering. Berlin, Heidelberg: Springer-Verlag. 2002: 108–120. ISBN 978-3-642-59412-0. doi:10.1007/978-3-642-59412-0. 
  2. ^ Wirth, Niklaus. . Dr. Dobb's Journal (Informa PLC). 18 February 2005 [2021-06-15]. (原始内容存档于2021-04-10). 
  3. ^ Wirth, Niklaus. (PDF). CFB Software. 1 May 1984 [28 January 2019]. (原始内容 (PDF)存档于2021-01-24). 
  4. ^ Wirth, Niklaus. Programming in Modula-2 4th. Berlin, Heidelberg: Springer. 1988. ISBN 978-3-642-83565-0. doi:10.1007/978-3-642-83565-0.  Page 4.

图书 编辑

外部連結 编辑

  • 官方网站

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

modula, 是一种通用的结构化过程式编程语言, 由尼克劳斯, 维尔特在1978年至1985年间于苏黎世联邦理工学院开发, 它具有充分的灵活性用于系统编程, 和更加广阔应用领域, 特别是, 它被设计为以一种直接的方式支持分离编译和数据抽象, 它的很多语法基于了维尔特早先的周知语言pascal, 编程范型指令式, 结构化, 模块化, 数据和方法隐藏, 英语, information, hiding, 并发语言家族wirth, modula設計者尼克劳斯, 维尔特发行时间1978年, 46年前, 1978, 型態系統. Modula 2 是一种通用的结构化过程式编程语言 由尼克劳斯 维尔特在1978年至1985年间于苏黎世联邦理工学院开发 它具有充分的灵活性用于系统编程 和更加广阔应用领域 特别是 它被设计为以一种直接的方式支持分离编译和数据抽象 它的很多语法基于了维尔特早先的周知语言Pascal Modula 2编程范型指令式 结构化 模块化 数据和方法隐藏 英语 information hiding 并发语言家族Wirth Modula設計者尼克劳斯 维尔特发行时间1978年 46年前 1978 型態系統强 静态系统平台Lilith 英语 Lilith computer AMD 2901 英语 AMD Am2900 操作系统跨平台文件扩展名 mod m2 def MOD DEF mi md網站www wbr modula2 wbr org主要實作產品Niklaus Wirth編写的ETH编译器 GNU Modula 2 ADW Modula 2衍生副語言PIM2 PIM3 PIM4 ISO啟發語言Modula Mesa Pascal ALGOL W Euclid 英语 Euclid programming language 影響語言Modula 3 Oberon Ada Fortran Lua Seed7 英语 Seed7 Zonnon 英语 Zonnon Modula GM 目录 1 历史 2 描述 3 例子代码 4 语言元素 4 1 保留字 4 2 内建标识符 5 模块 5 1 定义模块与实现模块 5 2 导出 5 3 导入 6 參見 7 引用 8 图书 9 外部連結历史 编辑在1976年至1977年年間 维尔特在Xerox Palo Alto研究中心 與一群設計Alto電腦的工作夥伴一同工作 1978年 维尔特在瑞士聯邦理工學院資訊研究所 根據其早期對Pascal程式語言 Modula模組程式語言 及Alto電腦的經驗 定義了Modula 2語言 他還開始了一個Lilith 英语 Lilith computer 個人電腦計畫 Modula 2語言本身與Lilith結構之設計 都以優雅及簡單為原則 是以Modula 2為Lilith的系統程式語言 而不需用到組譯器 並且以Lilith為Modula 2的組織架構 為此 Modula 2語言不僅要適用於編寫高階的應用程式 也要應適用於編寫低階的與機器相關的編碼程式 用於裝置的操控與儲存體的配置 Modula 2提供了一些標準程式庫模組 如異常處置 字串處理 輸入 輸出及並行程式設計等 通過重複使用它們來降低語言本身的複雜度 在Lilith計畫從1978年到1988年的整個生命期中 作業系統 繪圖套裝軟體 資料庫系統 網路協議 檔案伺服器 及許多其他系統和應用模組 都是藉著Modula 2發展出來的 描述 编辑Modula 2被设计为显著的类似于Pascal 移除了一些元素和语法歧义 增补了 模块 这个重要概念 并且对多道程序有直接的语言支持 维尔特将Modula 2看作他早期的编程语言Pascal和Modula的后继者 1 2 主要的概念是 模块是分离编译的编译单元 协程是并发处理的基本建造块 类型和过程允许访问特定于机器的数据 Modula 2提供了 有限的 单处理器并发 监视器 协程和显式控制转移 和硬件访问 绝对地址 位操纵和中断 它使用了名称类型系统 英语 nominal type system Modula 2语言允许使用一趟编译器 英语 One pass compiler Gutknecht 英语 Jurg Gutknecht 和维尔特的这种编译器大致上比早前的多趟编译器 英语 Multi pass compiler 要快上四倍 3 Modula 2有两种主要方言 PIM和ISO IEC 10514 1 1996 PIM得名于Niklaus Wirth的著作 Programming in Modula 2 4 这本书一共有四个版本 成为方言的是PIM2 1983年 PIM3 1985年 和PIM4 1988年 例子代码 编辑下面是 Hello world 程序的Modula 2源代码例子 MODULE Hello FROM STextIO IMPORT WriteString BEGIN WriteString Hello World END Hello 语言元素 编辑保留字 编辑 PIM版本2 3 4定义了40个保留字 AND ELSIF LOOP REPEAT ARRAY END MOD RETURN BEGIN EXIT MODULE SET BY EXPORT NOT THEN CASE FOR OF TO CONST FROM OR TYPE DEFINITION IF POINTER UNTIL DIV IMPLEMENTATION PROCEDURE VAR DO IMPORT QUALIFIED WHILE ELSE IN RECORD WITH 内建标识符 编辑 PIM版本3 4定义了29个内建标识符 ABS EXCL LONGINT REAL BITSET FALSE LONGREAL SIZE BOOLEAN FLOAT MAX TRUE CAP HALT MIN TRUNC CARDINAL HIGH NIL VAL CHAR INC ODD CHR INCL ORD DEC INTEGER PROC模块 编辑Modula 2的模块 module 可以用来封装一组有关的子程序和数据结构 并限制它们对程序其他部份的可见性 模块设计以清晰的方式 实现了Modula 2的数据抽象特征 语言有严格的作用域控制 模块的作用域 可以被当作是不可逾越的墙 除了标准标识符之外 来自外部的对象在模块内是不可见的 除非显式的导入它 内部的模块对象在外部是不可见的 除非显式的导出它 Modula 2程序是由模块组成 其中 程序模块 包含一个Modula 2程序的主程序 所有Modula 2程序 必须有定义了执行开始之处的一个主程序 在一个单一的程序中 不能有链接在一起的两个程序模块 局部模块 是在其他模块内声明的模块 程序模块和局部模块的起始关键字 就是单独的 span class kr MODULE span 定义模块与实现模块 编辑 除了程序模块之外的 全局模块 都构成自两个部份 作为接口部份的 定义模块 它只包含 导出 对其他模块可见 的那部份子系统 和同名的 实现模块 它包含模块内部的工作代码 DEFINITION MODULE GM IMPLEMENTATION MODULE GM 定义模块中可以包含不透明类型 英语 Opaque data type 声明 它有如下形式 TYPE name 它对应的实际类型 对于这个模块的用户是不可见的 这个类型名字 可以用在定义模块内的其他声明之中 对于在定义模块中声明的任何不透明类型 在对应的实现模块中 必须包含它的完全类型声明 完全类型声明 必须定义一个指针类型 导出 编辑 假定局部模块M1导出对象a b c和P 可将它们的标识符列举于显式EXPORT导出列表之中 MODULE M1 EXPORT a b c P 如果加上了可选的关键字QUALIFIED 它们以一种有限制的方式给导出至外部 必须将导出的这个模块名字用作限定符 并跟随着对象的名字 这里的来自模块M1的对象a b c和P 在模块M1外部就叫做M1 a M1 b M1 c和M1 P PIM2在定义模块中要求显式的EXPORT子句 PIM3从定义模块中删除了EXPORT子句 因为发现了它是多余的 导入 编辑 假定模块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编程者中广泛采用 假定模块M3是公式化为如下 MODULE M3 FROM M1 IMPORT a b c P 然后这意味着模块M1导出至外部的对象 可以用在模块M3内部 但可以用无限定方式来引用导出的标识符 也就是a b c和P 例如 a 0 c P a b 这种无限定导入的方法 允许在其导出模块之外 以同在它们的导出模块之内一样简单的方式 来使用这些变量和其他对象 对于所有这些已经被显式允许的对象 包围所有模块的墙变得与它们无关了 当然无限定导入只在没有名字冲突时是可用的 这些导出和导入规则 看起来可能是没有必要的限制和冗余的 但是它们不只是守卫对象免于不希望的访问 而且还有一个让人愉悦的副作用 提供了在程序中定义的所有标识符的自动交叉引用 如果标识符被一个模块名字所限定 那么它的定义位于那个模块 否则如果它是无限定的出现的 简单的回溯查找 将会要么遇到这个标识符的声明 要么遇到它出现在一个IMPORT语句中 指出了它所来自的模块的名字 这个性质在尝试理解包含很多模块的大型程序时是非常有用的 參見 编辑Pascal Modula Modula 3 Oberon引用 编辑 Wirth Niklaus Pascal and its Successors Broy Manfred Denert Ernst 编 Software Pioneers Contributions to Software Engineering Berlin Heidelberg Springer Verlag 2002 108 120 ISBN 978 3 642 59412 0 doi 10 1007 978 3 642 59412 0 Wirth Niklaus History and Goals of Modula 2 Dr Dobb s Journal Informa PLC 18 February 2005 2021 06 15 原始内容存档于2021 04 10 Wirth Niklaus A Single pass Modula 2 Compiler for Lilith PDF CFB Software 1 May 1984 28 January 2019 原始内容 PDF 存档于2021 01 24 Wirth Niklaus Programming in Modula 2 4th Berlin Heidelberg Springer 1988 ISBN 978 3 642 83565 0 doi 10 1007 978 3 642 83565 0 Page 4 图书 编辑Wirth Niklaus Programming in Modula 2 4th Berlin Heidelberg Springer Verlag 1988 2021 06 14 ISBN 978 0 387 96051 7 doi 10 1007 978 3 642 83565 0 原始内容存档于2021 06 05 King K N Modula 2 A Complete Guide Burlington Massachusetts Jones and Bartlett Publishers 1 January 1988 2021 06 14 ISBN 978 0669110913 原始内容存档于2020 02 19 Sutcliffe Richard J Modula 2 Abstractions for Data and Programming Structures Arjay Books 2004 2005 2021 06 14 ISBN 978 0 669 11091 3 原始内容存档于2021 01 26 Uses ISO standard Modula 2 Gleaves Richard Modula 2 for Pascal Programmers Springer Books on Professional Computing 1st Switzerland Springer Nature 1984 2021 06 14 ISBN 978 0 387 96051 7 doi 10 1007 978 1 4613 8531 8 原始内容存档于2021 06 14 Cooper Doug Oh My Modula 2 An Introduction to Programming New York City New York W W Norton amp Company 1 September 1990 ISBN 978 0393960099 外部連結 编辑官方网站 本條目部分或全部内容出自以GFDL授權發佈的 自由線上電腦詞典 FOLDOC 取自 https zh wikipedia org w index php title Modula 2 amp oldid 78431942, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。