Quines é útil como algo mais do que um quebra-cabeça de programação?

9

Quines, que são programas que geram seu próprio código como parte ou toda a sua saída, são uma boa idéia para um quebra-cabeça de programação. No entanto, eles têm alguma utilidade além disso?

Engenheiro Mundial
fonte
2
Não há uma aplicação prática que eu conheça.
Robert Harvey

Respostas:

8

A única vez que ouvi falar de algum uso prático para quines foi quando Ken Thompson o usou para ocultar um cavalo de Tróia no programa de login do Unix .

O Trojan consistia em algo como if (login == "Trojan") login();(provavelmente escrito em C apropriado), mas algo assim seria óbvio demais no código. Então, o que ele fez foi incorporá-lo em um quine e ocultá-lo nos binários do compilador C.

As propriedades de replicação automática do quine foram suficientes para garantir que, embora não houvesse vestígios desse backdoor em nenhum código-fonte, ele seria compilado efetivamente toda vez que um compilador C se deparasse com uma função de login () do Unix.

Eu acho que explicações mais claras podem vir da leitura do artigo. É um bom papel.

Veja também: O hack do compilador de Ken Thompson ainda é uma ameaça?

rahmu
fonte
2
Esse é o meu entendimento também. O único uso prático de uma solução é em malware.
JohnFx
4

Um quine foi usado para semear o Tierra , um simulador de organismo digital, e a vida evoluiu a partir dele. A solução foi utilizada porque garantiu que a primeira geração produziria filhotes viáveis.

A evolução levou a muitos resultados interessantes, incluindo formas de vida parasitárias e simbióticas, e até meta-parasitas. Isso pode ser considerado "útil"?

Alex Feinman
fonte
4

Depois de pesquisar no Google, a resposta surpreendente é que há pelo menos algum esforço acadêmico teórico para usá-los para tornar o código auto-reparador, aparentemente.

Um dos meus termos de pesquisa era "programação genética", se alguém quiser procurar mais - é a única área de programação relacionada potencialmente útil em que eu poderia pensar.

EDIT - Acabei de encontrar o uso de Quines em um esboço em inglês de uma prova matemática (resposta de Ron Maimon) do Teorema de Godel.

psr
fonte
1

Eu usei técnicas do tipo Quine em páginas da web no passado. Veja bem, isso foi em 1998-99 ...

Eu tinha o que chamamos agora de "aplicativo da web", um conjunto de programas CGI-BIN, alguns dos quais executavam algumas interações demoradas com os mainframes. Para economizar duas vezes a parte demorada, em alguns casos eu enviava o JavaScript que poderia reescrever a página original em um formulário para enviar informações pré-computadas para "reservar um lugar no futuro". Não me lembro de qual peculiaridade da interpretação do JavaScript era necessária no momento, mas a codificação e decodificação na saída, do tipo Quine, do HTML "reserve um lugar no futuro" e o JavaScript associado se tornaram necessários.

Bruce Ediger
fonte