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: 1337, Coding, Geek, Java
Juni 29th, 2011 at 5:04 pm
Also in PHP geht das ganze auch ein wenig kürzer:
<?php highlight_file(__FILE__);
Juni 29th, 2011 at 5:05 pm
Das stimmt. PHP ist aber eine Interpeter Sprache. Das heißt der Source Code ist beim Ausführen sicher noch vorhanden.
Juni 29th, 2011 at 5:08 pm
Müsste der Java-Code übrigens nicht logischerweise in einer Rekursion enden, so wie der aufgebaut ist?
Juni 29th, 2011 at 5:23 pm
Nein logischerweise gibt es, so wie er aufgebaut ist, keine Rekusion. Kannst ihn ja testen. Steht zum Download.
Juli 2nd, 2011 at 4:12 pm
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
August 19th, 2011 at 7:34 pm
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” …
September 28th, 2011 at 12:09 pm
@Carsten:
Die Spielereien sind dabei aber doch oftmals mit die interessantesten Aspekte an der Programmierung, wenn man sich vom grauen Programmieralltag etwas entfernen will
Dezember 16th, 2011 at 1:11 am
Ich lös diese Sache eher mit PHP schneller und ist aus der Suchmaschienen sicht besser als mit Java. War zumindest dies meine Erfahrung.
Dezember 16th, 2011 at 2:25 am
Nico da hast du volkommen recht, mit PHP kann man das viel schneller machen und ist auch leichter zu bedienen als mit Java.
Januar 27th, 2012 at 8:41 pm
Ist eigentlich Wissenssache. Wenn man die Programiersprache gut beherst kann man eingentlich alles machen, egal ob jetzt Java oder PHP