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.
FEHLER
Wenn ein ersetzendes Programm virtuell geerbte Variablen enthaelt,
muss dieses Programm als erstes geerbt werden. Ohne diese
Einschraenkung ueberleben die falschen Variablen den
Ersetzungsprozess.
GESCHICHTE
LDMud 3.2.9 liess zu, dass das Argument <program> weggelassen wird,
wenn nur ein Inherit existiert.
|