Quine (informática)
Este artigo ou secção contém uma lista de referências no fim do texto, mas as suas fontes não são claras porque não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. |
Em informática, um quine é um programa que produz seu código fonte como sua saída única, ou seja, a resultado de um programa quine é o próprio código fonte do programa. Por diversão, alguns hackers tentam desenvolver programas quine o mais curtos possíveis, já que pode ser feito um quine em qualquer linguagem de programação.
História
[editar | editar código-fonte]Os quines se chamam assim por Willard Van Orman Quine, que fez um estudo extensivo de autoreferência indireta e sugeriu um caso famoso de paradoxo sem autoreferência direta.
A ideia do primeiro "quine" apareceu no livro "Computer Recreations; Self-Reproducing Automata" de Bratley, Paul e Jean Millo, Editora Practice & Experience, Vol. 2 (1972). pág. 397-400. Bratley foi o primeiro a se interessar por programas que se auto-reproduziam após ter sabido primeiramente tal programa escrito em linguagem Atlas Autocode da Universidade de Edimburgo, Escócia na década de 1960 pelo professor e investigador Hamish Dewar.
Construindo um Quine
[editar | editar código-fonte]Um quine pode ser escrito em diversas linguagens de programação, por exemplo, em linguagem C:
char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c";main() {printf(f,34,f,34,10);}
Em linguagem Python:
d = ['d = ', 'd[0] = d[0] + repr(d)', 'for i in d: print i'] d[0] = d[0] + repr(d) for i in d: print i
Ou mais curto:
a='a=%r;print a%%a';print a%a
Em linguagem Perl:
$a='$a=%c%s%c;printf($a,39,$a,39,10);%c';printf($a,39,$a,39,10);
Em linguagem Javascript:
unescape(q="unescape(q=%22*%22).replace('*',q)").replace('*',q)
Em linguagem Tcl:
proc Quine {} { set n [lindex [info level 0] 0] append s [list proc $n [info args $n] [info body $n]] \n [list $n] puts $s } Quine
Referências
[editar | editar código-fonte]- QuineProgram pelo Portland Pattern Repository Wiki.