Quine (computing)


A quine is a computer program which takes no input and produces a copy of its own source code as its only output. The standard terms for these programs in the computability theory and computer science literature are "self-replicating programs", "self-reproducing programs", and "self-copying programs".
A quine is a fixed point of an execution environment, when the execution environment is viewed as a function transforming programs into their outputs. Quines are possible in any Turing complete programming language, as a direct consequence of Kleene's recursion theorem. For amusement, programmers sometimes attempt to develop the shortest possible quine in any given programming language.
The name "quine" was coined by Douglas Hofstadter, in his popular science book Gödel, Escher, Bach, in honor of philosopher Willard Van Orman Quine, who made an extensive study of indirect self-reference, and in particular for the following paradox-producing expression, known as Quine's paradox:

"Yields falsehood when preceded by its quotation" yields falsehood when preceded by its quotation.

History

The idea of self-reproducing automata came from the dawn of computing, if not before. John von Neumann theorized about them in the 1940s. Later, Paul Bratley and Jean Millo's article "Computer Recreations: Self-Reproducing Automata" discussed them in 1972.
Bratley first became interested in self-reproducing programs after seeing the first known such program written in Atlas Autocode at Edinburgh in the 1960s by the University of Edinburgh lecturer and researcher Hamish Dewar.
The "download source" requirement of the Affero General Public License is based on the idea of a quine.

Examples

Constructive quines

In general, the method used to create a quine in any programming language is to have, within the program, two pieces: code used to do the actual printing and data that represents the textual form of the code. The code functions by using the data to print the code, but it also uses the data, processed in a simple way, to print the textual representation of the data itself.
Here are three small examples in Python3 :
a='a=%s%s%s;print,a,chr))';print,a,chr))
b='b=;print,b,chr))';print,b,chr))
c='c=%r;print';print
  1. note that %r will quote automatically

In Python 3.8:

exec

The following Java code demonstrates the basic structure of a quine.
public class Quine

The source code contains a string array of itself, which is output twice, once inside quotation marks.
This code was adapted from an original post from c2.com, where the author, Jason Wilson, posted it as a minimalistic version of a Quine, without Java comments.

Eval quines

Some programming languages have the ability to evaluate a string as a program. Quines can take advantage of this feature. For example, this Ruby quine:
eval s="print 'eval s=';p s"

"Cheating" quines

Self-evaluation

In many functional languages, including Scheme and other Lisps, and interactive languages such as APL, numbers are self-evaluating. In TI-BASIC, if the last line of a program is value returning, the returned value is displayed on the screen. Therefore, in such languages a program containing a single digit results in a 1-byte quine. Since such code does not construct itself, this is often considered cheating.


In some languages, particularly scripting languages but also C, an empty source file is a fixed point of the language, being a valid program that produces no output. Such an empty program, submitted as "the world's smallest self reproducing program", once won the "worst abuse of the rules" prize in the International Obfuscated C Code Contest. The program was not actually compiled, but used cp to copy the file into another file, which could be executed to print nothing.
Other questionable techniques include making use of compiler messages; for example, in the GW-BASIC environment, entering "Syntax Error" will cause the interpreter to respond with "Syntax Error".

Ouroboros programs

The quine concept can be extended to multiple levels of recursion, originating "ouroboros programs", or quine-relays. This should not be confused with [|Multiquines].

Example

This Java program outputs the source for a C++ program that outputs the original Java code.


  1. include
  2. include
using namespace std;
int main


public class Quine

Such programs have been produced with various cycle lengths:
David Madore, creator of Unlambda, describes multiquines as follows:

"A multiquine is a set of r different programs, each of which is able to print any of the r programs according to the command line argument it is passed.."

A multiquine consisting of 2 languages would be a program which:
A biquine could then be seen as a set of two programs, both of which are able to print either of the two, depending on the command line argument supplied.
Theoretically, there is no limit on the number of languages in a multiquine,
a 5-part multiquine has been produced with Python, Perl, C, NewLISP, and F#
and there is also a 25-language multiquine.

Radiation-hardened

A radiation-hardened quine is a quine that can have any single character removed and still produces the original program with no missing character. Of necessity, such quines are much more convoluted than ordinary quines, as is seen by the following example in Ruby:

eval='eval$q=%q#\47##\47
",:eval,:instance_,"||=9"]1 1 if 121