语言设计者与教育者
尼克劳斯·维尔特(Niklaus Wirth,1934—2024)是瑞士计算机科学家,出生于温特图尔,长期任教于苏黎世联邦理工学院。他在伯克利完成博士研究后,先后在斯坦福和苏黎世从事教学与研究;1968年至1999年间任苏黎世联邦理工学院教授,1984年获得图灵奖。
维尔特关注的不是不断增添语言特性,而是让程序结构、语言规则和机器实现可以一起被理解。他参与推动该校计算机科学学科建设,并将研究成果带入课程。Pascal等语言因而既是系统设计工具,也是训练程序组织方法的教学材料。
Pascal与编译器的可移植性
维尔特在ALGOL传统中发展自己的语言设计。Pascal于1960年代末在苏黎世开始研制,首个面向CDC 6000系列机器的编译器在1970年投入运行,1972年已经用于编程入门课程。它追求清楚的数据和控制结构,同时考虑编译器、操作系统等系统程序的编写,并非只能用于课堂练习。
将语言带到另一台机器,不能只搬运语法说明。Pascal-P项目采用面向假想栈式机器的中间代码,通常称为P-code;新平台实现相应解释器后,便能利用共同的编译成果。这样把部分机器差异隔离在较小的实现层中,使移植不必每次重写整个编译器,但也引入中间表示及其执行层。
Modula-2与完整系统的试验
Modula研究并发活动的组织,随后发展的Modula-2把可分别编译的模块作为重要构造,并提供接近机器的受控设施。为解决Pascal的不足,维尔特没有把保持向上兼容作为不可放弃的目标。这一取舍使新语言更适合团队构建较大系统,却也意味着旧程序不能一概原样迁移。
Lilith工作站是检验这些想法的环境:硬件、微码、编译器、操作系统和编辑工具被放在同一项目中考虑,系统软件广泛使用Modula-2。维尔特承担设计和部分编程,但项目依靠助手共同完成,不能把整台工作站的全部部件都说成个人独立作品。
参考:[2]
Oberon中的简化与扩展
后来,维尔特与于尔格·古特克内希特共同开发Oberon系统,并发展了同名语言。系统与语言密切相关,却不是同一个对象:前者包含运行环境和工具,后者规定程序能够表达什么及其含义。
1990年版语言报告以类型扩展为核心新机制。一个记录类型可以在已有记录的基础上增加字段;例如报告中的CenterNode在Node之外增加名称与子节点信息,而指针类型也继承相应的扩展关系。程序因而能够保留共同结构,又表达更具体的对象。
这种扩展并非任意取消类型约束。报告规定了类型测试和类型保护的适用条件,访问较具体的数据必须符合相应规则。它说明维尔特所追求的简洁不是功能全无,而是用有限、明确的机制支撑系统演化。此处描述的是1990年版本,不把后来的Oberon修订都混成一套规则。