PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm schreibt weiteres Programm?



Geistesblitz
11.01.2012, 08:22
Ich hab mal eine eher theoretische Frage:
Ist es in irgendeiner Programmiersprache möglich, eine Programmdatei während der Laufzeit zu schreiben und diese dann aufzurufen?
Sowas würde, denk ich mal, bei genetischen Algorithmen Sinn machen, oder? Wenn man im Verlaufe dessen versucht, ein möglichst gut arbeitendes Programm zur Erfüllung einer Aufgabe zu erhalten.
Die Frage hatte ich mir nämlich gestellt, als ich mal den "3D Virtual Creature Evolution" (http://www.stellaralchemy.com/lee/virtual_creatures.php) ausprobiert hatte. Irgendwo muss ja die Verhaltensweise der einzelnen Individuen hinterlegt sein.

Peter1060
11.01.2012, 08:36
moin,

im einfachsten Falle schon in Assembler, WENN eine http://de.wikipedia.org/wiki/Von-Neumann-Architektur vorliegt.
Bei Hochsprachen muss ein Interpreter vorhanden sein.

Mit Gruß
Peter

Calis007
11.01.2012, 08:54
Ja, von Maschinenseite ist das meist moeglich (ausser die Hardware schuetzt den Programmspeicherbereich vor Modifikationen und laesst den PC (programcounter) auch nicht aus diesem Bereich raus).
Auch selbstmodifizierender Code ist moeglich (und z.b. bei Viren beliebt, um einer einfachen Identifikation durch Scanner zu entgehen).

Praktisch ist sowas aber nur recht komliziert zu debuggen und zu warten ;)

Manche Sprachen (wie z.B. APL) sehen sogar eigene Befehle dazu vor (in APL gibts eben ein 'execute', dem ein beliebiger (Programm-)Text zur Ausfuehrung uebergeben werden kann, selbstverstaendlich auch ein zur Laufzeit generierter).

Oder etwas praktischer: Sieh dir Woas (Wiki on a Stick) an, das ist eine selbstmodifizierende XHTML-Datei. Mit einem Browser aufgerufen, kannst Du Zeug 'reintun', das ist dann automatisch in dem File drinnen - sonst wird nichts gebraucht :)

In Unix mit Shell-Scripts auch ganz leicht moeglich, LISP hat sowas (IIRC) eingebaut und PROLOG besteht sowieso nur aus einer Art ausfuehrbarer Datenbank, die sich gerne mal zur Laufzeit selbst erweitert..

Edit: etwas roboternaeher: Sieh Dir mal http://freecode.com/projects/picsuperoprimizer (netter Tippfehler in der URL) an, da werden alle moeglichen Codesequenzen (innerhalb eines relativ engen Rahmens) generiert und ausprobiert, ob eine vllt. zufaellig genau das macht, was man braucht..
Hat also durchaus auch praktische Anwendungsmoeglichkeiten (die Idee eines Superoptimizers ist ueber 20 Jahre alt).

Calis007
11.01.2012, 09:17
"Bei Hochsprachen muss ein Interpreter vorhanden sein."

Nicht notwendigerweise. Du kannst z.B. mit einem C-Programm ein File generieren, das direkt (von der Hardware) ausfuehrbar ist (macht z.B. jeder Compiler), uind das dann aufrufen. Da ist kein Interpreter involviert.
Oder erstmal ein C-Programm generieren und dann automatisch den Compiler starten und das Resultat aufrufen; klappt auch.