Quines除了编程难题外还有用吗?


9

Quines是一种程序,它们生成自己的代码作为部分或全部输出,这是编程难题的一个好主意。但是,它们还有其他用途吗?


2
我没有一个实际的应用程序。
罗伯特·哈维

Answers:


8

我唯一听说奎因丝有任何实际用途的时候是Ken Thompson用它在Unix登录程序中隐藏特洛伊木马的时候

该特洛伊木马由类似的东西if (login == "Trojan") login();(更可能是用适当的C语言编写)组成,但是类似的东西在代码中太明显了。因此,他要做的就是将其嵌入一个quine并将其隐藏在C编译器的二进制文件中。

quine的自我复制属性足以确保即使在任何源代码中都没有这个后门的痕迹,每次C编译器遇到Unix login()函数时,它都可以有效地进行编译。

我认为更清晰的解释可能来自阅读本文。这是一篇好论文。

另请参阅:Ken Thompson的编译器黑客仍然是威胁吗?


2
这也是我的理解。藜的唯一实际用途是在恶意软件中。
JohnFx 2011年

4

奎奴亚藜被用作种子Tierra(一种数字生物模拟器)的种子,然后从中进化出生命。之所以使用该奎因,是因为它保证了第一代将产生可行的后代。

进化导致了许多有趣的结果,包括寄生和共生的生命形式,甚至是亚寄生虫。可能被认为是“有用的”吗?


4

经过一番谷歌搜索之后,令人惊讶的答案是,至少有一些理论上的学术努力使用它们使代码进行自我修复。

我的搜索词之一是“遗传编程”,如果有人想进一步了解的话,这是我能想到的唯一可能有用的相关编程领域。

编辑-刚在Godel定理的数学证明(Ron Maimon的答案)的英语大纲中发现了Quines 的用法


1

过去,我在网页中使用过类似Quine的技术。请注意,这是1998-99年...

我有了我们现在所说的“ Web应用程序”,这是一组CGI-BIN程序,其中一些程序与大型机进行了一些耗时的交互。为了省去两次耗时的工作,在某些情况下,我会附带发送JavaScript,该JavaScript可以将原始页面重新编写为一种形式,以发送回预先计算的信息以“保留将来的位置”。我不记得当时JavaScript解释有什么特殊性,但是必须使用Quine式的编码和“将来保留位置” HTML以及相关JavaScript的输出解码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.