[1755] Old Days

Title Text:Lot of drama in those days, including constant efforts to force the “Reflections on Trusting Trust” guy into retirement so we could stop being so paranoid about compilers.<

Origin:https://xkcd.com/1755/

https://www.explainxkcd.com/wiki/index.php/1755:_Old_Days

舊時光

Lot of drama in those days, including constant efforts to force the &quot;Reflections on Trusting Trust&quot; guy into retirement so we could stop being so paranoid about compilers.

https://xkcd.tw/1755

这部漫画展示了(年轻)Cueball和(旧)Hairbun之间关于计算机编程的对话,特别是编译器。 Cueball,对过去有多困难和拜占庭式编程的“过去”有一个微弱的想法,要求Hairbun启发他的具体细节。 Hairbun迅速抓住机会拧他的头。

虽然她最初同意代码需要针对多种架构进行编译是正确的,但是Hairbun的说法很快变得荒谬,以至于从C到C ++的改进是C ++最终支持软盘而只是在它们上打孔而不是使用穿孔卡“像C一样使用“。

Hairbun告诉Cueball一个关于过去有多难回归的故事,听起来好像今天使用的一些编程语言(C,C ++)是用穿孔卡写的,你必须把你的代码邮寄到一个计算机公司(在这种情况下是IBM)来编译你的代码,这需要四到六周的时间。如果出现简单错误,则必须再次发送以进行其他编译。

这实际上是不正确的,但对于那些没有知识或背景来挑战它的人来说似乎是合理的,类似于Snipe狩猎,或者其他一些文化神话讲述了像Tooth Fairy这样的事情。从Cueball的最后哇可以清楚地看出他为此而堕落。然后,她继续从过去的日子里解释越来越多令人难以置信的所谓事实。

她说的是真实的,因为在实际上长时间使用的穿孔卡上进行编程是艰难而缓慢的。然而,在Hairbun的其他故事中,很少有准确的,除了在发明软盘时它是一个大问题。

关于在软盘上打孔的评论是真的。然而,这种方式打孔的性质和目的与打卡有很大不同;通常在5.25“和3.5”软盘上打孔以增加计算机可以访问它们的存储空间,而不是在打孔的情况下打孔几个孔本身就是编程的行为。目前还不清楚这是巧合,还是故意将读者视为幽默,而不是那些将历史视为虚假海洋中被误解的真相的读者。

在标题文本中,Hairbun继续在旧的编译器时代进行思考,并指出当时有很多戏剧性事件。具体来说,她参考了由UNIX共同创建者Ken Thompson撰写的1984年着名论文“信任信任的思考”,其中他描述了一种通过C编译器中的第二个后门隐藏UNIX登录代码中几乎无法检测到的后门的方法。使用他的论文中的技术,通过检查登录或编译器本身的官方源代码来发现被黑客入侵是不可能的。肯·汤普森实际上可能已经将这个后门包含在早期版本的UNIX中,未被发现。 Ken Thompson的论文表明,在功能上不可能证明任何软件都是完全值得信赖的。

Hairbun声称,她提到的戏剧之一是人们试图迫使肯·汤普森退休,所以每个人都可以不再对编译器这么偏执。实际上,任何编写第一版编译器(或类似关键组件)的编码人员都可以在软件中注入类似的后门,因此这将是错误的安全性。即使没有其他人想到这一点,汤普森的论文也是为了让未来的黑客能够看到。虽然问题是(声称是)解决了David A. Wheeler博士论文“通过多样化双重编译(DDC)完全打击信任信任”。

在这部漫画发行前九年,兰德尔制作了一部名为303:Compiling的漫画。 1756年之后的下一部漫画:我和她在一起,是在2016年美国总统大选前一天发布的。在那个漫画中,一个带有剑的Cueball在办公椅上就像在旧的编辑漫画中一样。兰德尔在一段时间内准备好了政治上喜剧的漫画,并且在找到并决定使用那个旧版本的Cueball时,他可能已经受到启发,可能会在过去制作这部关于编辑的漫画。

陈述表[编辑]

声明

使用的概念

说明

编译不同处理器的东西

编译器将代码从人类可读的编程语言转换为可由计算机处理器直接执行的二进制代码。许多流行的现代编程语言要么被解释 – 意味着它们直接从源代码运行 – 要么编译成中间字节码,如Java或常见的Python实现。用这种语言编写的程序可以跨处理器体系结构移植 – 例如x86到ARM。低级语言必须考虑给定处理器体系结构和操作系统上可用的功能。在此之前,程序需要为其要运行的每个处理器直接编译为本机机器语言。

本机机器语言取决于处理器架构。因此,围绕不同体系结构设计的不同处理器将不会运行相同的编译代码(除非体系结构是兼容的;例如,AMD64处理器将本地运行i386代码。)如果需要在多个体系结构上运行相同的代码,则必须单独编译对于每个支持的架构。

要编译代码,您必须将其邮寄给IBM。花了4-6周。

类似于将Kodachrome幻灯片发送到柯达开发。

虽然IBM发布了多个编译器,但他们将编译器发送给您,但您没有将代码发送给他们。但声明中有一些事实:在大型机上编程时,程序员在晚上提交源代码以便在一夜之间进行编译。当代码中出现错误时,他们没有得到它的编译版本,并且不得不重新提交他们的代码。有时会有时间段用于编辑,而在大学里,学生将不得不等待下一个时间段进行另一次尝试。

在垃圾收集之前,数据会堆积起来,直到计算机满了,你不得不扔掉它。

垃圾收集器是软件的一部分,用于清除不再用于执行程序的数据RAM。

垃圾收集是一种内存管理形式,一旦程序不再需要,它通常会破坏对象或释放内存。在没有自动内存管理的语言中,如C,程序本身必须跟踪已分配的内存,并在不再需要时释放它。如果程序没有,它最终可能会尝试使用比计算机更多的内存,并可能崩溃。然而,这是暂时的情况。在最坏的情况下,简单的重启将清除计算机的内存。

早期的编译器可以很好地处理代码,但是注释必须用汇编语言编写。

编程中的注释是用自然语言编写的文本,用于解释源代码的某些特性;它被标记为编译器将丢弃它以节省空间。汇编是一种低级编程语言。

代码中的注释是编译器忽略的一行或多行的一部分。它们通常用于解释或评论代码本身。但有时评论是以某种方式编写的,以便自动编译文档。此外,在检查编译器的输出时,通常的做法是使用带有注释的汇编代码,注释包含生成汇编代码的程序的源代码。

因此,Hairbun的评论非常奇怪,这意味着如果使用汇编来插入分隔标签,当天的编译器只能区分注释和代码。

C只能写在打卡上。你必须选择一个紧凑的字体,或者每张卡只能容纳几个字符。

C是一种编程语言。穿孔卡是存储数据的原始形式;它以二进制语言存储数据,在纸或纸板卡上有孔,其中孔意味着1,没有孔意味着0。

虽然在20世纪70年代末和80年代早期使用穿孔卡以COBOL,FORTRAN和其他早期语言输入程序和数据,但在C(或C ++)之前很久就使用了打卡和打卡机取代了文本编辑器。发展成为一种语言。这个网站演示了卡片打卡和卡片:Keypunch]。

Hairbun声称代码不是使用键盘编写的,而是通过在穿孔卡中打出字母和字符形状,计算机将以这种方式加载读取键击。简而言之,这绝不是真的。 Punch卡以二进制形式存储字符;没有涉及字体,它们存储每张卡的固定字符数限制(最常见格式为80个字符。)

C ++很大,因为它支持软盘。它仍然在它们上面打洞,但这是一个开始。

C ++是一种编程语言。软盘是磁性存储数据的一种形式。它比打卡更先进(几个数量级;一张卡可以存储大约80个字节,而不是软盘的1,474,560个字节),但与现代存储相比,它仍然过时。Hairbun说,从C到C ++的改进是C ++最终“支持软盘”,但事实证明,在C ++中,只使用软盘而不是打卡。因此,编程是在软盘上打孔,而不是打卡。这当然不是一种改进,因为软盘磁性地存储信息,而不是像打卡那样在物理上存储信息。这可能是在5.25“软盘上打孔以使其存储加倍(参见双面磁盘)的概念,或者也可以是对5.25”软盘的“索引孔”的引用(参见软盘)设计和此图像中大中心孔右侧的小孔)。 5.25“软盘一侧的凹口表示磁盘可以写入的时间。尽管许多软盘只有一面带有数据,但许多人使用打孔器来切割磁盘的另一面,允许驱动器在单面驱动器中将数据写入磁盘的另一侧.5.25“软盘还在磁盘中心孔附近有一个微小的”索引孔“。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories