Title Text:The prereqs for CPSC 357, the class on package management, are CPSC 432, CPSC 357, and glibc2.5 or later.
Origin:https://xkcd.com/754/
https://www.explainxkcd.com/wiki/index.php/754:_Dependencies
编译器是将以特定编程语言编写的代码转换为可执行程序的程序。如果第一段的结果可能受到第二段的影响,则称一段代码依赖于第二段代码。依赖性解析是编译器设计的一部分,是研究确定和纠正依赖关系,导致依赖部分的不必要的,模糊的或不可能的定义。要求当且仅当操作已经发生时才发生操作,例如此漫画中的先决条件,是一种可能不需要的依赖。
漫画设想了一个大学计算机科学课程(CPSC432),重点是“依赖于解决方案的编译器设计”,它本身就是一个先决条件。这个笑话是前提条件是一个未解决的依赖关系,因为你必须先完成这个课程才能注册它,这个现象叫做Catch-22。
这种依赖会将设计糟糕的编译器发送到无限循环中。在现实生活中,通过允许对象满足自身作为先决条件来解决问题。这会停止编译器的无限循环,但可能无法在程序中生成所需的功能。另一层笑话可能是任何成功注册课程的学生都已经知道这个解决方案,因为他们必须使用它才能超越课程先决条件中明显的无限递归。
管理依赖性在计算机科学的其他领域中是有用的,例如,包管理。文件集合称为“包”。软件包可能要求首先安装特定的操作系统修补程序(一种类型的软件包)。该软件包可能需要安装其他软件包,依此类推。因此,程序包安装程序必须知道程序包的依赖关系,并能够在继续安装之前确定是否缺少任何所需的程序包。
标题文本设想了一个关于包管理的课程,它本身就是一个先决条件,以及编译器设计课程,主要漫画(CPSC 432)和glibc2.5或更高版本中提供了不可能的先决条件。通过查看课程编号,可以观察到CPSC 432是第四年的课程,而这个包管理课程(CPSC 357)是第三年的课程。 Glibc是Unix系统上常用的软件包,因此应该在课程中讲授。这继续这个笑话,因为这个课程有以下未解决的依赖关系:
要求该课程是自身的先决条件(CPSC 357)。
要求具有未解决依赖性的课程(CPSC 432)是先决条件,因为不能采用CPSC 432。
要求第四年的课程(CPSC 432)是第三年课程(CPSC 357)的先决条件,因为学生应该在服用第432号CPSC时进入第四年,并且在服用CPSC 357时应该是第三年。类似于需要更高编号封装的编号较低的封装。
要求学生在参加课程之前了解部分或全部课程材料(glibc2.5或更高版本),因为学生应该从课程中学习这些信息。