web-dev-qa-db-ja.com

Quinesはプログラミングパズル以上のものとして役立ちますか?

Quinesは、出力の一部またはすべてとして独自のコードを生成するプログラムであり、プログラミングパズルのすてきなアイデアです。しかし、それ以上の用途はありますか?

9
World Engineer

クインの実用的な使い方を聞いたのは、ケントンプソンが nixログインプログラムでトロイの木馬を隠す を使用したときだけです。

このトロイの木馬は、if (login == "Trojan") login();(おそらく適切なCで記述されている)のようなもので構成されていましたが、そのようなものはコードではあまりにも明白です。それで彼がやったことは、それをクインに埋め込み、Cコンパイラのバイナリに隠すことでした。

クインの自己複製プロパティは、ソースコードにこのバックドアの痕跡がない場合でも、CコンパイラがUnixのlogin()関数に遭遇するたびに効果的にコンパイルされることを保証するのに十分でした。

私はその論文を読むことからより明確な説明が得られると思います。いい紙です。

参照: Ken Thompsonのコンパイラハックはまだ脅威ですか?

8
rahmu

キンを使って、デジタル生物シミュレータ Tierra を種付けし、それから生命を進化させました。第一世代が生存可能な子孫を生み出すことを保証したので、クワインが使用されました。

進化により、寄生生物や共生生物、さらにはメタ寄生虫など、多くの興味深い結果がもたらされました。それは「有用」であると考えられるだろうか?

4
Alex Feinman

いくつかのグーグルの後、驚くべき答えは、明らかに、コードを自己修復するためにそれらを使用するために、少なくともいくつかの理論的 学術的努力 があるということです。

私の検索用語の1つは、「遺伝的プログラミング」でした。誰かがさらに詳しく知りたければ、それは私が考えることができる唯一の潜在的に有用な関連プログラミング領域です。

編集-クインの使用をゴデルの定理の 数学的証明の英語の概要 (ロンマイモンの答え)で見つけました。

4
psr

私は過去にWebページでクインのようなテクニックを使用しました。念のために言っておきますが、これは1998-99年のことです...

現在「Webアプリ」と呼ばれているCGI-BINプログラムのセットがあり、その一部はメインフレームとの時間のかかる対話を実行していました。時間のかかる部分を2回実行することを節約するために、元のページをフォームに書き直すJavaScriptを一緒に送信して、「将来のスポットを予約する」ために事前に計算された情報を返送しました。当時のJavaScriptの解釈にどのような特殊性が必要であったかは思い出せませんが、「将来のスポットを確保する」HTMLおよび関連するJavaScriptの、Quineのようなエンコードと出力時のデコードが必要になりました。

1
Bruce Ediger