2012-04-28 158 views
1

因此,我刚刚在维基百科上遇到了Quine这个词,并且无法弄清楚它意味着什么。我对此感到困惑不解。它有真实世界的用途吗?奎因意味着什么?

回答

3

奎因在本质上是输出自己的源代码的命令。没有真的没有任何实际用途。

2

不,它不是一个有用的东西,这只是风格的锻炼,一些程序员喜欢...

1

甲喹在以下情况下是有用的:

  • 编程汇编

目标代码可以直接序列化到磁盘,尽管它有预先考虑到前一个cookie和版本。但是在运行时编译Scheme时,您需要一个Scheme值:例如编译过程。出于这个原因,以免打破抽象,狡诈定义了一个假的语言在塔的底部:

Value 

编译到值对象的装载代码到一个程序中,并唤醒沉睡巨人。

也许这种奇怪可以用例子来解释:编译文件默认编译为目标代码,因为它产生的目标代码必须存在于Guile运行时之外的荒芜世界中;但编译默认值编译为值,因为它的产品重新进入Guile世界。

事实上,编译的过程可以无限期地通过这些不同的世界传播,如由以下奎因:

((lambda (x) ((compile x) x)) '(lambda (x) ((compile x) x))) 
  • 安全检查:

在Omniture的如果攻击者需要在cookie中添加奎因,然后使用cid的新值强制使用eval

使用精心制作的gzip文件(附件是一个自解压的quine),可以通过tar(1)调用gzip压缩器的无限链,直到运行tar(1)的机器上的所有内存都已经在耗尽或另一资源限制踢腿。

  • 自转化

从本质上讲,其直观(有效)的含量是,程序可以使用其自己的源作为一个变量,即,添加到编程语言的能力为pr操纵自己(它的源代码)不会增加其表现力。所以存在一个压缩自己的列表的程序;存在一个它打印自己的MD5校验和(这比找到一个程序要容易得多 - 实际上任何文件 - 一个包含它的MD5校验

  • 自包含两层体系结构

如果您的数据和数据库的代码不存储在同一个地方,你可能会失去一个轨道,使其他无用的。

  • 自我保存

的TW是一款实用奎因的一个不寻常的例子:它是这种能力产生它自己的源代码的副本位于在的TW的独立更改保存到它自己的心脏。

  • 证明

如果“喹”是指“自动机使用其自己的源代码作为输入”,然后哥德尔使用喹,或多或少,以证明他的不完备性定理,图灵使用一个来证明暂停问题是不可信的,汤普森用一个来表明对所有软件和编译器的源代码的访问不足以在其中找到后门,Steve Russell通过编码McCarthy的Lisp quine发明了函数式编程语言进入(709?)集会,约翰冯诺依曼预言,一般自我复制生命形式的结果将成为奎因斯,并且随着DNA的发现被证明是正确的。因此,如果奎因斯负责生命的存在,哥德尔的不完备性定理,停止问题的无可置疑性的证明以及函数式编程语言的存在,那么我将它们提名为所有历史上最重要的程序类别。

  • 非结构化循环

穆里尔已经没有传统的控制结构。相反,Muriel有一个命令,用一个给定的字符串替换当前运行的Muriel程序,然后运行它。这导致了一种编程方法,程序必须自行执行以执行任何类型的循环。

参考