Quine (informática)

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

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

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