Java Code der sich selbst ausgibt

Kürzlich behauptete ein Freund von mir, man könne ein Programm, das sich selbst ausgibt, nur in einer Sprache mit “richtigen” Pointern schreiben. Also zum Beispiel C. Das es in Java ging bezweifelte er. Deshalb habe ich mal ein Programm in Java geschrieben, welches seinen eigenen Sourcecode ausgibt. Das müsste man eigentlich genauso in weiteren Sprachen zum Beispiel auch PHP reproduzieren können.

public class SourceOut {
	private static final String source = "public class SourceOut {\n	private static final String source = "\n	public static void main(String[] args) {\n		System.out.print(source.substring(0,64));\n		System.out.print(source.replaceAll("\\\\\\\\", "\\\\\\\\\\\\\\\\").replaceAll("\\"", "\\\\\\\\\\"").replaceAll("\\n", "\\\\\\\\n")+"\\";\\n");\n		System.out.print(source.substring(65));\n	}\n}";
	public static void main(String[] args) {
		System.out.print(source.substring(0,64));
		System.out.print(source.replaceAll("\\\", "\\\\\\\").replaceAll(""", "\\\\"").replaceAll("\n", "\\\\n")+"";\n");
		System.out.print(source.substring(65));
	}
}

Ich hoffe an dieser Stelle, dass WordPress keine unnötigen Tabs und Leerzeichen hier einbaut, damit der Code nachvollziehbar und korrekt bleibt. Für Interessierte stelle ich die Datei hier zum Download bereit.

Tags: , , ,


10 Responses to “Java Code der sich selbst ausgibt”

  1. 1
    DASPRiD Says:

    Also in PHP geht das ganze auch ein wenig kürzer:

    <?php highlight_file(__FILE__);

  2. 2
    Jakob Says:

    Das stimmt. PHP ist aber eine Interpeter Sprache. Das heißt der Source Code ist beim Ausführen sicher noch vorhanden.

  3. 3
    DASPRiD Says:

    Müsste der Java-Code übrigens nicht logischerweise in einer Rekursion enden, so wie der aufgebaut ist? ;)

  4. 4
    Jakob Says:

    Nein logischerweise gibt es, so wie er aufgebaut ist, keine Rekusion. Kannst ihn ja testen. Steht zum Download.

  5. 5
    Jakob Says:

    Programme mit der Eigenschaft sich selbst auszugeben heißen übrigens Quine.
    Auf Wikipedia findet man mehr dazu, sowie weitere Programmbeispiele:
    http://de.wikipedia.org/wiki/Quine_%28Computerprogramm%29

  6. 6
    Carsten Todt Says:

    In welchen Programmiersprachen lässt sich ein solches Quine nun erstellen? Tatsächlich in fast allen? Welche wären dann die Ausnahmen? Auf jeden Fall ist diese Möglichkeit wirklich schon interessant, obwohl ich fast bezweifle, dass man dies in der Praxis benötigen wird – ist wohl mehr eine “Spielerei unter Programmierern” … ;-)

  7. 7
    David Says:

    @Carsten:
    Die Spielereien sind dabei aber doch oftmals mit die interessantesten Aspekte an der Programmierung, wenn man sich vom grauen Programmieralltag etwas entfernen will ;)

  8. 8
    Nico Says:

    Ich lös diese Sache eher mit PHP schneller und ist aus der Suchmaschienen sicht besser als mit Java. War zumindest dies meine Erfahrung.

  9. 9
    Jochen Says:

    Nico da hast du volkommen recht, mit PHP kann man das viel schneller machen und ist auch leichter zu bedienen als mit Java.

  10. 10
    Markus Says:

    Ist eigentlich Wissenssache. Wenn man die Programiersprache gut beherst kann man eingentlich alles machen, egal ob jetzt Java oder PHP

Leave a Reply