SYNOPSIS
        void replace_program();
        void replace_program(string program);

BESCHREIBUNG
        Ersetzt ein Programm mit dem geerbten Programm (inherit) <program>.
        Das Argument <program> kann weggelassen werden, wenn nur ein Programm
        geerbt wird. In diesem Fall waehlt der Treiber automatisch dieses eine
        geerbte Programm.

        Diese Efun ist nuetzlich, wenn es um Leistung und Speicherverbrauch
        des Treibers geht. Ein Programm, welches keine zusaetzlichen Variablen
        oder Funktionen braucht (ausser waehrend der Erstellung), kann
        replace_program() aufrufen, um die Trefferquote des Treibers auf den
        Funktionen-Caches zu erhoehen. Dies verringert die Anzahl Programme
        im System.

        Raeume sind ein gutes Beispiel fuer die Anwendung dieser Funktion, da
        viele Raeume nur aus einem Inherit und einer Konfigurationsfunktion
        bestehen. Jedes Objekt kann replace_program() aufrufen, verliert dabei
        jedoch alle Variablen und Funktionen, die nicht im geerbten Programm
        definiert sind.

        Wenn replace_program() angewendet wird, werden Shadows vom Objekt
        entfernt, in dem replace_program() stattfindet. Dies ist so seit
        3.2@166.

        Es ist nicht moeglich, replace_program() aufzurufen, wenn es an das
        Objekt gebundene (Lambda-) Closures gibt. Hingegen ist es moeglich,
        zuerst das Programm des Objekts zu ersetzen und dann Lambdaclosures
        daran zu binden.

        Das Ersetzen des Programms findet erst statt, wenn das Objekt
        vollstaendig abgearbeitet wurde, nicht schon beim Aufruf der Funktion
        replace_program(). Das kann dazu fuehren, dass Closures auf inzwischen
        verschwundene Lfuns des Objekts referenzieren. Das stellt allerdings
        kein Problem dar, solange diese Referenzen nicht ausgefuehrt werden.

BEMERKUNGEN
        Raeume benutzen replace_program automatisch. Es ist nicht sinnvoll
        oder notwendig, replace_program selbst ohne Konsultaton mit einem
        Erzmagier einzusetzen!

BUGS
        Wenn ein ersetzendes Programm virtuell geerbte Variablen enthaelt,
        muss dieses Programm als erstes geerbt werden. Ohne diese
        Einschraenkung ueberleben die falschen Variablen den
        Ersetzungsprozess.

AENDERUNGEN
        LDMud 3.2.9 liess zu, dass das Argument <program> weggelassen wird,
        wenn nur ein Inherit existiert.
