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?
self-improvement
puzzles
Engenheiro Mundial
fonte
fonte
Respostas:
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?
fonte
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"?
fonte
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.
fonte
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.
fonte