news 2026/7/24 21:29:46

Modula-3编程语言全记录:诞生、发展、多版本实现与发行情况揭秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Modula-3编程语言全记录:诞生、发展、多版本实现与发行情况揭秘

目录

- 致谢
- 引言
- 语言设计时间线
- 实现与发行版本
- 库
- 应用程序
- 开发支持
- 资源

致谢

感谢Marc H. Brown、Luca Cardelli、Michel Dagenais、Dave Detlefs、John DeTreville、Amer Diwan、Jim Donahue、Allan Heydon、Tony Hosking、Bill Kalsow、Al Kossow、Rustan Leino、Eliot Moss、Eric Muller、Farshad Nayeri、Mika Nyström、John Polstra、Klaus Preschern和Olaf Wagner提供的帮助、建议和/或资料。本网站献给Modula-3及其前身语言的设计者,以及所有用Modula-3编写库和应用程序的开发者。

引言

Modula-3是一种在20世纪80年代后期由Luca Cardelli、Jim Donahue、Mick Jordan、Bill Kalsow和Greg Nelson设计的编程语言(定义报告由Lucille Glassman和Greg Nelson撰写)。它旨在为广泛的系统和应用程序编程提供安全且高效的解决方案,涵盖从设备驱动程序等底层代码到程序开发工具,再到科学或商业应用程序等多个领域。安全性意味着程序的运行时状态能保证符合语言语义。在实现这些目标的前提下,设计者力求让语言尽可能简单,其语言定义仅超出50页预算六行文本,外加语法摘要。该语言的特性包括接口、对象、泛型、线程、不安全代码隔离、垃圾回收、异常处理和子类型化。到2025年,其中许多特性已变得更为普遍,但在1990年 [Nelson1991] 时,这些特性并不常见,尤其是在支持非堆分配数据结构的语言中。

Modula-3的诞生源于Maurice Wilkes向Niklaus Wirth提出的建议,即对Modula-2+进行修订并将其标准化为Modula-3。(Modula-2+在Xerox PARC之前使用Mesa和Cedar的经验基础上,为Wirth的Modula-2增加了线程、垃圾回收和异常处理功能。详见 [软件保护](../) > [Mesa](../mesa/) 和 [Modula-2+](../modula2+/)。)由Digital Equipment Corporation Systems Research Center(Cardelli、Kalsow和Nelson)和Olivetti Research California(Donahue和Jordan)组成的委员会于1988年8月发布了最初的Modula-3设计 [Cardelli1988a],随后两个实验室都开始了相关实现工作。在使用Modula-3编写Modula-3编译器的过程中积累的经验,促使在1989年11月对设计进行了一些修订和扩展 [Cardelli1989a]。最终的修订于1990年12月完成 [Nelson1990]。1991年,《Systems Programming with Modula-3》一书将该语言介绍给了更广泛的受众 [Nelson1991]。

[Nelson1991]的第1章(“引言”)提供了关于设计过程历史和语言特性的更多细节。第8章(“语言特性的由来”)是一篇虚构对话,揭示了设计者面临的诸多问题。

语言设计时间线

1984 - 1986年

DEC SRC开展Modula-2+开发工作 [Rovner1985, Rovner1986]。

1986年12月

SRC/ORC联合代表团前往ETH拜访Wirth [Donahue1989]。

1987年1 - 3月

就目标和范围进行早期讨论 [Donahue1989]。

1987年4月

正式开始设计工作 [Donahue1989]。

1987年11月

完成第一份完整草案 [Donahue1989]。

1988年8月

发布《Modula-3 Report》[Cardelli1988a]。两个实验室均开始实现工作 [Donahue1989, Nelson1991]。

1989年1月

基于实现经验进行修订:“主要变化包括引入带标签的引用类型,要求不透明类型必须带标签,允许不透明超类型,以及在揭示不透明类型信息方面提供了新的灵活性” [Cardelli1989c]。

1989年10月

ORC Modula-3首次公开发布 [Donahue1989]。

1989年11月

发布修订版《Modula-3 Report》[Cardelli1989c]。

1989年12月

SRC Modula-3首次公开发布 [Kalsow2021]。

1990年12月

“十二项更改”:增加泛型,改进与IEEE 754浮点数的兼容性,将RAISES默认为 {},区分方法声明和重写,通过语法糖在NEW时进行方法重写,允许在常量表达式中使用顶级过程常量,允许T.m作为过程常量和方法默认值,放宽不透明对象类型的NEW操作,要求不透明类型的揭示超类型必须完全有序,对EXTERNAL进行更改,将TYPECODE的返回类型改为无符号而非有符号,对CHAR、TEXT和数字字面量进行更改 [Nelson1990]。

1991年

首次发布最终语言定义,见 [Nelson1991, Nelson1991errata]。

1992年

发布《Modula-3 Language Definition》[Cardelli1992]。

约1996年

发布最终 [网络版本](archive/DEC_SRC/release-3.6-html/m3defn/html/m3.html)。

实现与发行版本

- Olivetti Modula3
- DEC SRC Modula-3
- UMass Amherst GNU Modula-3
- Caltech Modula-3D
- Princeton M3
- Klagenfurt M3/PC
- M3forDOS
- Modula-3 for OS/2
- Critical Mass CM3
- Polytechnique Montréal PM3
- University of Washington SPIN Modula-3
- Purdue Persistent M3
- Cambridge CAM3
- EZM3
- Elego Software Solutions Modula-3
- Github Modula-3

M3编译器家族树:

在最初的语言定义发布后,两家公司立即开始了实现工作。Olivetti Modula-3在Olivetti内部使用了一段时间,但在1991年2月Olivetti Research California突然关闭后逐渐停止使用。除了马萨诸塞大学阿默斯特分校一个短暂存在的GNU项目外,所有后续的Modula-3开发工作都基于DEC SRC Modula-3。

Olivetti Modula-3

Olivetti Modula-3由Mick Jordan、Trevor Morris、David Chase、Steve Glassman和Marion Sturtevant实现 [Jordan1990, Nelson1991]。该编译器基于一种名为M3AST的通用抽象语法树(AST)机制。基于M3AST的工具包括编译器前端(解析器、语义分析器和控制模块)、生成C源代码的代码生成器、预链接器(处理全局信息,如确定模块初始化顺序和检查接口与模块编译的一致性)以及“pickle”(对象序列化/反序列化)存根生成器 [Jordan1990]。1989年10月首次公开发布 [Donahue1989]。1991年2月Olivetti Research California(ORC)关闭后,Mick Jordan和Steve Glassman转至DEC SRC,Jordan还带去了基于AST的工具包。

源代码

- 版本2.2:包含在DEC SRC Modula-3版本2.11中。[未打包](archive/DEC_SRC/release-2.11-unpacked/m3tk/)
- 版本未知:包含在DEC SRC Modula-3版本3.5.3的 `m3/m3tk` 目录中。[m3.tar.gz](archive/DEC_SRC/release-3.5.3/m3.tar.gz)
- 版本未知:包含在DEC SRC Modula-3版本3.6的 `m3/m3tk` 目录中。[m3.tar.gz](archive/DEC_SRC/release-3.6/m3.tar.gz)
- 当前cm3仓库中的m3tk:

DEC SRC Modula-3 [![我爱 M3](I_Heart_M3-tshirt.jpg)](I_Heart_M3-tshirt.jpg) [![我爱 M3](I_Heart_M3-badge.png)](I_Heart_M3-badge.png)

SRC Modula-3由Bill Kalsow和Eric Muller实现 [Nelson1991]。它基于SRC现有的Modula-2+语言和编译器进行引导开发。最初版本生成C代码并调用GCC进行编译,但从3.0版本开始,它被修改为生成一种中间语言,可驱动不同的后端。最常用的后端是一个小程序,它读取中间语言的文本版本并调用GCC代码生成库。更多详细信息请参阅 [Kalsow 1994, 1995a, 2021]。1995年7月,Bill Kalsow离开SRC,该编译器在SRC的开发工作转向维护模式。不过,除了Olivetti编译器外,所有后续的Modula-3编译器和发行版本都基于SRC Modula-3代码库,并得到了许多人的贡献。

源代码

如需了解从1.0到3.5.3版本的完整发布历史(3.6版本是对3.5.3版本的小修改),请参阅 [Heydon1997]。

版本日期发布说明来源在线未打包
1.51990年7月23日[PDF](archive/DEC_SRC/release-1.5/release15.pdf)[http://mail.digiater.nl/openvms/decus/lt90b2/m3/](http://mail.digiater.nl/openvms/decus/lt90b2/m3/)[在线](archive/DEC_SRC/release-1.5/)[未打包](archive/DEC_SRC/release-1.5-unpacked/)
2.051992年3月13日[PDF](archive/DEC_SRC/release-2.05/doc-2.05.pdf)2.11版本doc目录中的newdoc.dvi--
2.071992年7月20日[PDF](doc/Kalsow_Muller-SRC_Modula-3_Version_2_07-1992.pdf)2.10版本doc目录中的doc.ps--
2.09未知-Klagenfurt的M3/PC[在线](archive/Klagenfurt/m3pc/)[未打包](archive/DEC_SRC/release-2.09-unpacked/)
2.101992年11月-Bill Kalsow的TK50卡带[在线](archive/DEC_SRC/release-2.10/m3.2.10-1992_10.tgz)-
2.111993年1月7日[PDF](archive/DEC_SRC/release-2.11-unpacked/doc/doc.pdf)[通过archive.org获取的Prime Time Freeware for UNIX 3.1B版](https://archive.org/details/PTF-F4U31)[在线](archive/DEC_SRC/release-2.11/)[未打包](archive/DEC_SRC/release-2.11-unpacked/)
3.1未知-Klaus Preschern的M3forDOS[在线](archive/M3forDOS/)[未打包](archive/DEC_SRC/release-3.1-M3forDOS-unpacked/)
3.5.31995年6月-[通过ftp.zx.net.nz访问gatekeeper.dec.com](ftp://ftp.zx.net.nz/pub/archive/gatekeeper.dec.com/pub/DEC/SRC/Modula-3)[在线](archive/DEC_SRC/release-3.5.3/)-
3.61996年9月-[通过ftp.zx.net.nz访问gatekeeper.dec.com](ftp://ftp.zx.net.nz/pub/archive/gatekeeper.dec.com/pub/DEC/SRC/Modula-3/)[在线](archive/DEC_SRC/release-3.6/)[文档](archive/DEC_SRC/release-3.6-html/modula-3/html/srcm3.html)
GNU Modula-3和Persistent Modula-3(马萨诸塞大学阿默斯特分校)

20世纪80年代后期,马萨诸塞大学阿默斯特分校的Eliot Moss对将编程语言和数据库功能集成产生兴趣,他计划通过为编程语言数据类型添加持久性来实现这一目标。他和他的研究团队设计了Mneme持久对象存储,随后用它来开发Persistent Smalltalk和Persistent Modula-3的原型 [Moss1990]。

Persistent Modula-3 [Hosking1990] 基于一个新的Modula-3编译器,因为他们在DEC SRC Modula-3发布之前就开始了开发工作 [Hosking1991]:

“我们选择GNU C编译器作为开发基础,它的可移植性满足了我们的首要需求,其优化阶段让我们能够解决性能问题。我们的实现工作包括构建一个Modula-3编译器前端,以及对后端进行必要修改,以支持持久性和垃圾回收。”

该编译器生成汇编语言和表格,以便本地开发的垃圾回收器能够精确找到所有可回收对象 [Diwan1992, Hudson1991]。

Caltech Modula-3D

加州理工学院的Mosaic C多计算机基于具有二维互连的单芯片节点 [Seitz1993]。Rustan Leino为他的硕士论文设计了Modula-3D,这是Modula-3的一个分布式扩展版本,用于Mosaic多计算机 [Leino1992, 1993]:

“我记得(Mosaic)有256个核心(也可能这是最终目标),每个核心有64 KB的按字寻址(16位字)RAM。我的运行时系统,包括垃圾回收器、进程间通信和网络对象,每个核心使用32 KB的内存。” [Leino,个人通信,2021]

文档和论文

[Leino1992]
plaintext
K. Rustan M. Leino. Extensions to an object-oriented programming language for programming fine-grain multicomputers. Technical Report, Caltech-CS-TR92-26, California Institute of Technology, 1992.

[Leino1993]
plaintext
K. Rustan M. Leino. Multicomputer Programming with Modula-3D. Master's thesis, California Institute of Technology, 4 June 1993. <https://doi.org/10.7907/Z9F18WSP>

摘要:在本文中,我们扩展了一种面向对象语言,以支持细粒度多计算机编程。新的构造具有简单的语义,为编写分布式程序提供了一种很好的方式。这些构造的语义与程序的分布方式无关。我们还展示了一组简单的条件,在这些条件下,即使程序的执行结果也与控制和数据的分布方式无关。我们展示了该编程模型的优缺点,并描述和评估了我们对该语言的实现。

[Seitz1993]
plaintext
Charles L. Seitz, Nanette J. Boden, Jakov Seizovic, and Wen-King Su. The design of the Caltech Mosaic C multicomputer. In _Proceedings of the 1993 Symposium on Research on Integrated Systems_. MIT Press, Cambridge, 1993, pages 1–22.

源代码

- Modula-3D发行版:基于大约1992年(3.0版本之前)的SRC Modula-3版本。[m3d.tgz](archive/Leino/m3d.tgz) / [未打包](archive/Leino/m3d/)

Princeton M3

Mary F. Fernandez研究了Modula-3的不透明类型与单独编译之间的交互所导致的额外间接开销问题。她开发了链接时优化技术来避免这种开销:

“我们描述了Modula-3链接时优化的机会,并提出了两种链接时优化技术。数据驱动简化是一种新技术。它利用程序的类型层次结构,完全弥补了不透明类型的成本,并降低了方法的运行时开销。它还揭示了其他优化机会,如常量和类型传播、过程内联和克隆。基于分析的优化使用分析数据来转换那些从数据驱动简化所带来的优化中受益最大的过程。此外,我们的技术使得优化库中的过程和应用程序中的过程一样容易。” [Fernandez1995b]

为了测试这些想法,她在DEC SRC Modula-3 2.11修改版上运行基准测试,该版本的后端生成C源代码。她使用自己的mlcc和mld,这是一个与机器无关的C编译器和一个可重定向的优化链接器。她只需要对Modula-3编译器进行适度修改,添加了87行新代码。通过运行基准测试,她发现:

“mld的优化简单而有效。数据驱动简化最多可将执行的指令总数减少11%,并将多达79%的间接调用转换为直接调用。基于分析的优化最多可将执行的指令总数减少14%,并将执行的加载次数减少19%。” [Fernandez1995b]

文档和论文

[Fernandez1994]
plaintext
Mary F. Fernandez. Simple and Effective Link-Time Optimization of Modula-3 Programs. Technical Report TR–474–94, Princeton University, November 1994. [Online at www.cs.princeton.edu](https://www.cs.princeton.edu/research/techreps/174)

[Fernandez1995a]
plaintext
Mary F. Fernandez. The Implementation of mlcc and mld: A Machine-Independent Compiler and a Retargetable, Optimizing Linker. Technical Report TR–490–95, Princeton University, May 1995. [Online at www.cs.princeton.edu](https://www.cs.princeton.edu/research/techreps/190)

[Fernandez1995b]
plaintext
Mary F. Fernandez. Simple and effective link-time optimization of Modula-3 programs. In _Proceedings of the ACM SIGPLAN 1995 Conference on Programming Language Design and Implementation (PLDI '95)_. Association for Computing Machinery, New York, June 1995, 103–115. [ACM Digital Library](https://doi.org/10.1145/207110.207121)

[Fernandez1996]
plaintext
Mary F. Fernandez.Link-Time Optimization for Modula-3. _Threads: A Modula-3 Newsletter_, Issue 2, Fall 1996. [HTML at modula3.org](https://www.modula3.org/threads/2/#linkTimeOptimization)

Klagenfurt M3/PC

“这是 [Modula-3](https://web.archive.org/web/19970801174000/http://www.ifi.uni-klu.ac.at/Modula-3/html/modula-3/html/home.html) 在普通DOS-PC上运行的一个版本。它主要面向本科编程课程的学生和其他Modula-3编程初学者。它由 [克拉根福大学信息学系](https://web.archive.org/web/19970813041239/http://www.ifi.uni-klu.ac.at/) 开发。我们将其用于编程入门课程。该系统实现了Digital Systems Research Centers [Modula-3](https://web.archive.org/web/19970813041239/http://www.ifi.uni-klu.ac.at/Modula-3/html/modula-3/html/home.html) 实现的2.09版本。...
贡献者
- Klaus Preschern首次将Modula-3移植到PC上。
- Carsten Weich重写了Klaus Preschern移植的部分代码,并编写了m3shell。
这些项目由Laszlo Boszormenyi指导。” [Weich1996]
---
“我从DEC工作站交叉编译到 [DJ Delorie的DOS扩展器](https://en.wikipedia.org/wiki/DJGPP),这是MS-DOS上GNU C编译器的一个平台。” [Preschern2026]

源代码

- 最初来自 `gatekeeper.dec.com/pub/dec/SRC/Modula-3/contrib/m3pc`,1995年1月3日。[在线](archive/Klagenfurt/m3pc/)
- 镜像:[ftp://ftp.zx.net.nz/pub/archive/gatekeeper.dec.com/pub/DEC/SRC/Modula-3/contrib/m3pc](ftp://ftp.zx.net.nz/pub/archive/gatekeeper.dec.com/pub/DEC/SRC/Modula-3/contrib/m3pc)

Klaus Preschern / M3forDOS

Klaus Preschern于1992年在DEC SRC与Bill Kalsow实习。离开克拉根福大学后,他开发了一个名为EX32的替代Modula-3 PC系统。他的第一个版本于1994年3月27日发布,基于SRC M3 2.11版本 [Preschern2026]。最终版本基于SRC M3 3.1版本:

plaintext
EX32(“DOS的32位扩展”)是一个用于在DOS上开发和执行32位应用程序的环境。
EX32是一组DOS程序(驱动程序 + 内核)。它为在保护模式下执行的应用程序提供服务。它进行进程管理、虚拟内存管理、通过管道进行进程间通信,并提供一个支持32字符文件名的文件系统。
EX32可在MS-DOS 5.00、6.00和6.02上运行。你需要一个i386/i387(需要协处理器)或更高版本(i486、奔腾)的处理器。EX32支持DOS XMS内存(但不支持EMS、VCPI或DPMI)。不支持i286处理器。你至少应该有4 MB内存(建议8 MB或更多)。整个软件包解压和展开后大约占用44 MB的磁盘空间。
EX32附带GNU C++(2.4.5版本)、**SRC Modula-3(3.1版本,包括线程)**、两个C库、一个用于VGA的图形库和一些命令(如ls、cp、rm、mkdir、make等)。

[[Preschern, README.1st, 1996年6月

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 21:24:38

移动POS终端工控主板怎么选?安全加密与移动支付接口要点

在零售商超、餐饮门店、移动摆摊、票务核销等场景中&#xff0c;移动 POS 终端是实现移动支付、订单核销、会员管理、收银结算的核心商用设备&#xff0c;而工控主板(又称 POS 终端工业主板、工业主控板、支付终端核心控制板、商用收银嵌入式主板)作为移动 POS 终端的核心硬件底…

作者头像 李华
网站建设 2026/7/24 21:23:18

Windows Defender彻底移除方案:三模式深度优化与安全风险管控

Windows Defender彻底移除方案&#xff1a;三模式深度优化与安全风险管控 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirr…

作者头像 李华
网站建设 2026/7/24 21:22:52

关于4G/5G网络光路中断或者RRU/AAS故障远程控制中断的问题深度分析与系统性解决方案

在4G/5G网络运维中,当光路中断或者远端射频单元(RRU)或有源天线系统(AAS)出现故障,而网管中心的指令无法远程下达,只能依赖现场代维人员处理时,这通常意味着BBU与远端设备之间的控制通道已中断。这种情况严重影响了故障的远程处理效率,是网络维护中的典型难题。 一、故…

作者头像 李华
网站建设 2026/7/24 21:20:26

临床预测+医学RAG=结构化EHR建模能力+医学大模型应用能力(三)

第五篇 特征工程 —— 从原始时序到模型输入 5.1 特征工程在 EHR 预测中的地位与设计原则 5.1.1 数据决定上限,特征逼近上限 在机器学习界有一句流传甚广的箴言:“数据和特征决定了模型性能的上限,而算法只是在逼近这个上限。” 这句话在电子健康记录(EHR)分析中尤其真…

作者头像 李华