| 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. |