什么是奎因的意思?

时间:2012-04-28 22:03:43

标签: language-agnostic definition self-reference quine

所以我刚刚在维基百科上遇到了Quine这个词,无法弄清楚它的含义是什么。我对此感到困惑。它是否有任何实际用途?

3 个答案:

答案 0 :(得分:3)

Quine本质上是一个输出自己的源代码的命令。并没有真正没有任何实际用途。

答案 1 :(得分:2)

不,这不是一件有用的事情,只是一种风格的练习,一些程序员喜欢......

答案 2 :(得分:1)

在以下情况下,quine非常有用:

  • 程序化编译
  

对象代码可以直接序列化到磁盘,尽管前面有一个cookie和版本。但是在运行时编译Scheme时,您需要一个Scheme值:例如,编译过程。出于这个原因,为了不打破抽象,Guile在塔底定义了一种假语言:

Value 
  

编译为值会将对象代码加载到一个过程中,并唤醒沉睡的巨人。

     

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

     

事实上,汇编过程可以无限期地在这些不同的世界中传播,如下面所示:

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

在Omniture案例中,攻击者需要在cookie中添加quine,然后使用cid的新值强制使用eval

     

使用精心设计的gzip文件(附加文件是解压缩到自身的quine),可以让tar(1)调用无限链gzip压缩器,直到运行tar(1)的机器上的所有内存都被用尽或其他资源限制开始。

  • 自我转型
  

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

  • 自包含两层架构
  

如果您的数据和数据库代码没有存储在同一个地方,您可能会失去对一个数据的跟踪,使另一个无用。

  • 自我保存
  

TiddlyWiki是一个不寻常的实际例子:它能够生成自己的源代码副本,这是TiddlyWiki独立保存更改的核心。

  • 证明
  

如果“quine”的意思是“使用自己的源代码作为输入的自动机”,那么Gödel使用或多或少的quine来证明他的不完备性定理,图灵用一个来证明停止问题是不可计算的,Thompson使用一个表明访问所有软件和编译器的源代码不足以找到其中的后门,Steve Russell通过将McCarthy的Lisp quine编码为(709?)汇编来近似发明函数式编程语言,John von Neumann预测结构一般来说,自我复制的生命形式会变成qu,并且随着DNA的发现被证明是正确的。

     

因此,如果quines对生命的存在,哥德尔的不完备性定理,停止问题的不可计算性证明以及函数式编程语言的存在负责,我将它们提名为历史上最重要的程序类别。

  • 非结构化循环
  

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

<强>参考

相关问题