我不讨厌使用汇编语言,因为我已经在操作系统课程中编写了一些语言。但是显然,汇编语言缺乏抽象性,您必须更加注意细节。
汇编语言对编写TAOCP真的很重要吗?
我不讨厌使用汇编语言,因为我已经在操作系统课程中编写了一些语言。但是显然,汇编语言缺乏抽象性,您必须更加注意细节。
汇编语言对编写TAOCP真的很重要吗?
Answers:
他不仅使用MIXAL(他的MIX汇编语言),还使用MIX(一种简单计算机的模型)(例如60年代使用的模型)。这是他在某种程度上不受该领域发展影响的教学模式。
如果他使用另一种编程语言(顺便说一句,您认为哪一种适合吗?),例如NPL(漂亮的编程语言),那么他要么不得不放弃使用MIX的想法,要么引入一种选择的某种计算机语言的编译器(这比他在第一卷中要讲的要复杂得多)。这样,它就不会成为TAOCP而是TAONPLP。第一个与这种选择无关,并且由于这个原因,它是永恒的,因此很少有关于编程的书籍。第二个可能现在会被遗忘...
另外,只要计算机在原理上按照他的MIX的方式工作,如果您真的有兴趣学习如何使用它们,这是一件好事。
你们这些年轻的小鲷鱼有时会让我赞叹不已。你们常常不知道在开始上学之前发生了什么事。(我有同样的问题。从成人的角度来看,我花了很长时间才意识到15年实际上是很短的时间。这大约是从广岛到古巴导弹危机的时间。对我来说,第二次世界大战只是历史,但我父亲曾参与其中,而母亲则处于初中阶段。)
TAOCP,第一卷。1,《基础算法》第一版,于1968年首次出版。距今已有45年。在此之前,Knuth开始着手计划该系列。
供参考:英特尔8086于1978年首次出现,十年后。PASCAL语言于1971年首次出现。Jensen&Wirth的书有关该语言的第二种版本于1974年出版。C的最初开发是1969-1973年:K&R于1978年出版。
Knuth打算将该系列报道在内。他将样式THEN设置为对THEN练习者有用。他从没想过这个系列真的会成为他一生的作品,也不会指望他的作品能够跨越他最终完成的半个多世纪。
如今,汇编语言可以说没有现在那么严格,但是它仍然比大家希望的Java / C ++ / Javascript / Python / Perl专家重要得多。
现在下车我的草坪!
克努斯在序言中讨论了他的推理。我只列举一些点点滴滴:
...我需要决定是使用代数语言(例如ALGOL还是FORTRAN),还是为此目的使用面向机器的语言。也许今天的许多计算机专家会不同意我使用面向机器的语言的决定,但是由于以下原因,我已经确信这绝对是正确的选择:
- 代数语言比这里考虑的非数字问题更适合于数字问题。[...]
- 通过使用面向机器的语言进行编写,程序员将倾向于使用效率更高的方法;它离现实更近了。
- 我们需要的程序,除少数例外,都相当短...
- 对计算机非常感兴趣的人应该接受机器语言的良好教育。
- 无论如何,还是需要某种机器语言的。
尽管他没有直接指出,但我认为他提到的ALGOL和FORTRAN指出了他避免的另一个问题,这个问题可能更为重要。假设他选择了Algol(显然比Altran更适合于非数字程序)。我认为对于今天的大多数程序员来说,Algol可能比他选择的汇编语言更陌生。
在第三版中,他重新设计了MIX以使其更适合现代处理器,并且不得不为其编写代码。但是,我认为,如果他使用高级语言,重写的范围将大大增加-而且他给出的所有理由也会保留下来。
克努思(Knuth)也更新了他的基本原理:
为什么要使用机器语言?
毫无疑问,许多读者在想:``为什么Knuth用另一台机器代替MIX而不是仅仅坚持使用高级编程语言?这些天几乎没有人使用汇编程序。''
这样的人有权发表自己的意见,而不必费心阅读我书中的机器语言部分。但是,我在1960年代初编写的第一卷序言中提到的机器语言的原因在今天仍然有效:
- 我的书的主要目标之一是展示高层结构在机器中的实际实现方式,而不仅仅是展示它们的应用方式。我从头开始解释协程链接,树结构,随机数生成,高精度算术,基数转换,数据打包,组合搜索,递归等。
- 我的书中所需的程序通常太短,以至于它们的要点很容易掌握。
- 对计算机非常感兴趣的人应该至少对底层硬件的状态有所了解。否则他们编写的程序会很奇怪。
- 在任何情况下,机器语言都是必需的,这是我描述的许多软件程序的输出。
- 表达基本的方法(例如用于机器语言的排序和搜索算法)可以对缓存和RAM大小以及其他硬件特性(内存速度,流水线,多个问题,后备缓冲区,缓存块的大小,等)比较不同的方案时。
此外,如果我确实使用高级语言,应该使用哪种语言?在1960年代,我可能会选择AlgolW。在1970年代,我不得不使用Pascal重写我的书。在1980年代,我肯定会将所有内容都更改为C。在1990年代,我不得不改用C ++,然后可能改用Java。在2000年代,毫无疑问将使用另一种语言。随着语言的流行和流行,我没有时间重写我的书。语言不是我书中的重点,而是您可以使用自己喜欢的语言进行操作。我的书关注永恒的真理。
因此,我将继续使用英语作为TAOCP中的高级语言,并且我将继续使用低级语言来指示计算机的实际计算方式。如果读者只想查看使用流行语言以插件方式打包的算法,则应该购买他人的书籍。
好消息是,当RISC机器具有良好的简洁设计时,RISC机器的编程既轻松又简单。因此,我不必讨论奥秘的,琐碎的小细节而分散了要点。在这方面,MMIX将大大优于MIX。