2012-04-28 157 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程序,然後運行它。這導致了一種編程方法,程序必須自行執行以執行任何類型的循環。

參考