软硬件的无缝交互:Lilith项目和Modula-2编程语言

本文将讨论Nicklaus Wirth,他的项目Lilith和语言Modula-2。对于这个项目,Wirth在1984年获得了Alan Turing奖。艾伦·图灵奖(Alan Turing Prize)是诺贝尔计算机科学奖的类似物,成立于1966年,由于计算机科学领域的杰出成就而每年由计算机工程协会颁发。自2007年以来,“图灵奖”由Google和英特尔共同赞助,总额为25万美元。英特尔退出赞助商之后,巨型Google已将付款金额提高了四倍,达到100万美元。



“ Wirth一直想制造飞机,他需要最好的工具。这就是为什么他设计了许多计算机语言和微型计算机的原因……”

Nicklaus Wirth是举世闻名的科学家,工程师,研究员,电气工程和计算机科学博士学位,苏黎世联邦理工学院的教授,我们知道他是Oberon Pascal编程语言的创建者。1934年2月,即2月15日,他出生在温特图尔(瑞士)的一个老师家庭。父母之家里有一个大图书馆,从小就对维尔斯的铁路,涡轮机和电报书感兴趣。他着迷于技术,他从事飞机建模,不仅梦想着飞行,而且实现了这个梦想,即征服空域的梦想。还在上学时,沃思在学校地下室“装备”了一个秘密实验室,在那里他从事建模工作。


苏黎世瑞士联邦理工学院

维尔图(Virtu)18岁时,他和另外两架苏黎世飞机模型从英格兰收到了这种期待已久的无线电设备。对建模的这种热情,以及后来远程控制的发展,可以说确定了伟大思想的命运。 1954年,Worth进入苏黎世瑞士联邦理工学院电子学院,获得电气工程学士学位。此后,维尔斯于1960年在加拿大拉瓦尔大学的魁北克大学学习,并获得了硕士学位。他应邀赴美国加州大学伯克利分校就读,并于1963年在哈里·赫斯基(Harry Husky)教授的指导下获得电气工程和计算机科学博士学位,为有关使用Lisp开发Algol的论文辩护。在上世纪60年代中期,IFIP(国际信息处理联合会)向一些计算机科学家提供了参与Algol-60继任者开发和创建新编程语言的提议。

Nicklaus Wirth是受邀者之一,他参与了Algol-W语言项目的创建,但是IFIP拒绝了他的项目,转而支持Algol-68语言项目。直到1967年,沃斯都曾在斯坦福大学任助教,同年他回到祖国瑞士苏黎世大学。他在自己的祖国有一个创造像斯坦福大学的想法。成为计算机科学教授后,他不仅“创造并创造了”,而且还从事组织活动。 ETH校园已经非常让人联想到著名的斯坦福大学。

从1982年到1984年以及从1988年到1990年,Wirth两次担任ETH计算机科学学院院长,并于1990年成为ETH计算机系统研究所所长。

Virta对新的Algol语言或当时已经使用的语言不满意,因为他认为它们的属性和结构通常无法逻辑地解释。他没有将编程语言准确地视为一种语言,而是将其视为人与计算机之间进行交流的一种媒介,但他认为该语言主要是用于构建计算机设备的抽象工具。

“据我所知,编程语言是一个错误选择的术语,会误导许多人。术语程序标记会更合适。”

这就是创建著名的Pascal的道路。首先,开发了它的第一个版本,然后是编译器的第一个版本,并在1971年对新语言进行了描述。它的主要特征是简单性,它基于“ ...结构编程的清晰原则,由Edsger Dijkstroy提出,在Anthony Hoar奠定的美丽数学基础上,以及Nicklaus Wirth实施的Algol-W思想的出色建筑体现。”

从技术上讲,他很有趣,因为他的编译器是他自己对高级语言的第一个实现。两年后,开发了带有特殊P代码(字节代码)的Pascal机器(P机器)。解释方法解决了将Pascal编译器移植到不同平台的问题。顺便说一下,James Gosling在Java语言和体系结构的构造中使用了P机的概念。

关于Pascal和P代码的观点:
, , , . , . P-… Pascal- P . , P-.

Pascal被许多人视为教授学生编程的工具。根据沃思本人的话,成为教学“材料”并不是帕斯卡语言的主要目标,而是“……在所希望的和有效的之间做出合理的折衷”。毕竟,您在培训期间无法成功地应用一种不适合解决任何实际问题的语言。

尽管如此,让我们来谈谈关于尼克劳斯·沃思命运的转折点的这篇文章的关键主题。

Virtu“……厌倦了编程语言,并且需要为现有计算机编写好的编译器。人们渴望用我们自己的双手来创造新事物,而这是未知的。”


施乐奥拓

1977年,Wirth在帕洛阿尔托的施乐研究中心度假期间,进行了一个严肃的技术项目-创建一种结构化编程语言,旨在构建大型和复杂的系统,其功能是将单位与已编译的单位分开表达。系统组件称为模块。这是一年的教授假期,每七年向“该行业的代表”提供一次,因此有足够的时间为该项目做准备。在研究中心,一个真正的个人工作站出现在他的眼前,该工作站配有垂直显示器,鼠标和自己的Xerox Alto磁盘。这种现成的实现方式推动了早在Wirth头脑中建立自己的计算机的想法的实施,甚至是语言编译器的实现,它比Pascal复杂得多。为用户和开发人员创建具有特定语言的个人工作站的集成计算机系统,是Wirth焕然一新的动力。

Lilith Modula-2




必须从头开始构建自己的计算机系统,其中包括硬件,微代码,编译器,操作系统以及各种服务程序。有必要创建一种紧凑的通用语言来解决系统和应用程序编程的问题。 1977年,计算机是带有分时系统的大型主机,可以通过终端和远程卫星进行访问。强大的个人工作站是当时的革命性想法。沃思了解到,开发专注于旧计算环境的软件没有任何意义。问题是必须设计和创建一个新的计算环境,即功能强大的个人工作站。因此开始着手创建Lilith工作站。



尼克劳斯·沃思(Nicklaus Wirth):

“我有机会了解PARC开发的Mesa语言,这种语言具有这种设计。我认为,如果帕斯卡(Pascal)的优雅后代被创造为一种非常经济的语言,它可以通过他的祖先的精神进行新的尝试。他的名字Modula-2在我们看来证明了模块概念的统治地位,而这个名字的选择是-不幸的是,不是Pascal ++。

Wirth和他的一群志同道合的人同时从事新硬件和新软件的创建和开发工作,他们致力于创建新的编程语言及其编译器,基本的OS,实用程序和第一个应用程序。

Modula-2语言被认为是简单且通用的,用于所有Lilith软件。 Wirth使用了区分语言的可移植(应用)部分和不可移植(系统)部分的方法,引入了SYSTEM伪模块,该模块容纳了所有低级编程工具(包括类型转换功能)。

有必要明确提出模块的概念,并将其实现为单独编译的一种手段。

正如Wirth所写:“ ...模块化是决定性的属性,它使您能够组合冲突的要求:通过检查冗余性和提供可访问特定计算机的各个设计功能的低级工具的可用性,确保高级抽象的可靠性。这使程序员可以将低级工具的使用本地化。系统的一小部分,从而防止了不可预见的复杂性。”

具有导入和导出标识符的显式列表的模块的概念是从Mesa语言中提取的,符号文件的概念是作为编译器有关相应模块导出的对象的特殊信息而借用的。Lilith的操作系统是应开发人员要求可以扩展或收缩的唯一模块层次结构。
基于程序元素导出/导入的原理以及对单独编译的支持,模块化已成为新语言的主要特征。与Modula-2中的Modula语言不同,支持多种编程的方法已进入库级别。

1979年,基于PDP-11的编译器,第一个Modula编译器开始运行。最初,它由7个通道组成,每个通道都生成中间代码并将其写入2 MB磁盘,后来通道的数量减少到5。在第一个通道中,词法分析器(扫描器)生成了令牌字符串和标识符哈希表,第二个通道是解析器)执行解析,第三遍解决类型检查问题,第四遍和第五遍代码生成。

最初的实验是在具有64 KB内存的传奇PDP-11(数字)计算机上进行的。


集群式多塔PDP-11大型机

尼克劳斯·沃思(Nicklaus Wirth)和理查德·奥兰(Richard Oran)从事Lilith的第一个版面设计。电子专家理查德·奥兰(Richard Oran)希望参加高级软件课程并为自己的论文辩护; Wirth邀请他参加Lilith项目。该项目的工作使Oran感到非常困惑,以至于他甚至忘记了自己的论文,他的所有思想都被P代码和P机器所带走。有必要设计一种最适合解释M代码(紧凑代码)的架构,M代码相当于相应的Pascal P代码的Modula等效形式。代码的紧凑性是在小型工作站上实现复杂系统的最重要因素。通过使用不同的地址和操作数长度来实现紧凑性,所有指令参数的70%的值都在0到15之间操作数与操作代码打包在一个字节中。对于中间结果,组织了一个堆栈(实现为16字快速SRAM存储器-一小部分快速双极性寄存器)。由于堆栈和灵活的寻址方案,包括操作代码和数据在内的平均指令长度为10位。 M代码不包含寄存器号,因为它们已被堆栈方案覆盖。
为了进行比较:

“ M机的代码比PDP-11和i8086的代码少三到四倍,比Motorola 68000的代码少两到三倍,比National Semiconductor 32000的代码少一倍半到二倍。”

Lilith是一台带有4个Am2901处理器集的计算机,该计算机在板上执行,旨在与16位字一起工作,而M代码则针对字节流。内存大小为216个字(128 Kb)。布局由4K * 1位芯片构建。 Lilith处理器通过64位总线访问内存,以支持矢量图形,字体,复制块存储功能以及提高浮点运算的准确性,Lilith处理器使用了其他固件。



一项创新是高分辨率的光栅显示。最初是768 * 592像素的显示器,后来是704 * 928像素的垂直显示器,频率约为30 MHz。使用的驱动器是容量为10 MB的Honeywell-Bull D-120。开发了三键鼠标(可惜的是,我没有找到这种特殊鼠标的直观示例)。


因此,当时用于Xerox Star的三键计算机鼠标看起来就像


是EU-1840 / EC-1841型家用PC上的Kolobok图形操纵器的一个例子,

与此同时,Christian Jacobi也实现了对显示和图形窗口的软件支持。这成为了第一个应用程序的基础,例如带有下拉菜单的文本编辑器。

Modula-2在实施后已成为一种有效的语言。 80年代末,在犹他州发布了一系列试用版的Lilith个人工作站(20件)。

1984年下半年,为Modula-2开发了新的编译器。

“ ...我认为,如果可以使用当前可用的内存量,则编译的许多部分可以更轻松,更高效地完成(按当今的标准,我们使用的内存量非常适中。)Lilith的内存为64 Kslov,其内存容量很高。代码的紧凑性使得实现单遍编译器成为可能。这意味着大大减少了占用大部分编译时间的磁盘操作,实际上,编译器的编译时间从4分钟减少到只有45秒但是,新的编译器保留了对任务的细分,但不是每个任务都设置自己的路径-顺序将输入和输出到磁盘,而是在其中分配了具有最通用的过程接口的特殊模块。人物是在单独的数据描述模块中定义的,该模块由(几乎)所有其他模块导入。这些模块是扫描器,解析器,代码生成器和符号文件处理器。当新编译器的开发完成时,几乎不可能抵制对语言进行一些更改的诱惑。因此,在这种情况下,进行了一些改进和更改,这些更改和更改反映在该语言的修订说明中。唯一重要的更改与接口模块(或更确切地说,与模块的接口部分)有关。此更改假定将导出前端中描述的所有标识符,从而无需导出列表。”代码生成器和符号文件处理程序。当新编译器的开发完成时,几乎不可能抵制对语言进行一些更改的诱惑。因此,在这种情况下,进行了一些改进和更改,这些更改和更改反映在该语言的修订说明中。唯一重要的更改与接口模块(或更确切地说,与模块的接口部分)有关。此更改假定将导出前端中描述的所有标识符,从而无需导出列表。”代码生成器和符号文件处理程序。当新编译器的开发完成时,几乎不可能抵制对语言进行一些更改的诱惑。因此,在这种情况下,进行了一些改进和更改,这些更改和更改反映在该语言的修订说明中。唯一重要的更改与接口模块(或更确切地说,与模块的接口部分)有关。此更改假定将导出前端中描述的所有标识符,从而无需导出列表。”唯一重要的更改与接口模块(或更确切地说,与模块的接口部分)有关。此更改假定将导出前端中描述的所有标识符,从而无需导出列表。”唯一重要的更改与接口模块(或更确切地说,与模块的接口部分)有关。此更改假定将导出前端中描述的所有标识符,从而无需导出列表。”

连接所有工作站的网络的存在导致需要服务器(第一个是连接到佳能LBP-10激光打印机的打印机服务器,第二个是文件服务器)。顺便说一下,Lilith是欧洲第一台充分利用激光打印的计算机。在整个时期内,总共释放了60台计算机。在1990年,它们停产了。

“ Lilith项目已证明开发单语言系统不仅是可能的,而且具有多个优势。从字面上看,一切从设备驱动程序开始,以图形编辑器和文本编辑器结束,都是用相同的语言编写的。对于与操作系统相关的模块以及与用户程序的模块没有不同的方法。实际上,这种差异几乎消失了,并且与之一起,我们摆脱了千篇一律的常驻程序块,每个人都很高兴没有它,但是每个人都被迫使用它。”

Wirth一直为和谐,硬件和软件组件的有机统一而努力,而他的坚韧不拔的才干无疑为计算科学的发展做出了不可估量的贡献。据信,他的Modula-2语言是Ada语言的紧凑而有效的替代方法。诸如OS / 400 for IBM AS / 400的系统也在Modula-2上实现,而Digital Corporation基于相同的Modula-2作为实现其内部项目的基础创建了语言Modula-3。为个人计算机PC,Apple II,Lisa,Macintosh,SIRIUS / VICTOR 9000,SAGE II,Amiga,Atari ST,IBM RS / 6000工作站,惠普(MOCKA),Sun SPARC(爱丁堡),IBM大型机创建了编译器(WATCOM),SGI和VAX(MOCKA),数字Alpha(ModulaWare)。

沃思创建了Oberon操作系统Oberon和Oberon-2语言(与H. Messenbock教授一起)。

就像在1984年文章开头提到的那样,尼克劳斯·沃思(Nicklaus Wirth)荣获了艾伦·图灵奖(Alan Turing Prize),1989年获得了麦克斯·皮蒂皮埃尔(Max Petitpierre)奖和IBM欧洲科学与技术奖。



有趣的是,许多人不知道Java和C#是基于Wirth的思想的。最好的Wirth语言-Modula-2和Oberon-几乎从未使用过,尽管用它们编写的程序仍然可以使用。

伟大的科学家,工程师和灿烂的科学总是为简单而奋斗,为此他呼吁所有人。

尼克劳斯·沃思(Nicklaus Wirth)最喜欢用的短语是“使它尽可能简单”,这使人想起一台完美的计算机应该只有两个命令:RPM和MAKEIT。

RPM-阅读程序员的思想。

MAKEIT-做吧。

Niklaus Wirth的项目


尼克劳斯·沃思奖



“ Wirth在寻求可接受的系统编程形式的过程中,从NELIAC开始,从Algol-60到Euler和Algol-W,Pascal,Modula-2以及最终到Lilith的语言,充满了令人印象深刻的发现和令人惊奇的结果。”



得益于与苏联编程先驱安德烈·彼得罗维奇·埃尔绍夫(Andrei Petrovich Ershov)的友好关系和个人关系(在1965年访问美国之后),尼克劳斯·沃思分别于1990年,1996年和2005年多次来到Akademgorodok。这在我国普及Wirth的语言和系统方面发挥了重要作用。在俄罗斯科学院西伯利亚分校昆虫研究所的Pottosin小组中,出现了一个想法,即重复进行Wirth实验并实现面向高级语言的架构的处理器(SOCRAT项目)。



苏联部长理事会采用了Modula-2语言作为开发车载系统软件的基本语言。2005年,Wirth再次访问了Akademgorodok,并把他的Lilith计算机作为礼物赠与,但由于海关扣留了“有价值的货物”,因此无法赠送。

Source: https://habr.com/ru/post/zh-CN391821/


All Articles