blob: 4812d4ecfdeb0ac59e861cdc446f9d952923cb9a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
2 void replace_program();
3 void replace_program(string program);
4
5BESCHREIBUNG
6 Ersetzt ein Programm mit dem geerbten Programm (inherit) <program>.
7 Das Argument <program> kann weggelassen werden, wenn nur ein Programm
8 geerbt wird. In diesem Fall waehlt der Treiber automatisch dieses eine
9 geerbte Programm.
10
11 Diese Efun ist nuetzlich, wenn es um Leistung und Speicherverbrauch
12 des Treibers geht. Ein Programm, welches keine zusaetzlichen Variablen
13 oder Funktionen braucht (ausser waehrend der Erstellung), kann
14 replace_program() aufrufen, um die Trefferquote des Treibers auf den
15 Funktionen-Caches zu erhoehen. Dies verringert die Anzahl Programme
16 im System.
17
18 Raeume sind ein gutes Beispiel fuer die Anwendung dieser Funktion, da
19 viele Raeume nur aus einem Inherit und einer Konfigurationsfunktion
20 bestehen. Jedes Objekt kann replace_program() aufrufen, verliert dabei
21 jedoch alle Variablen und Funktionen, die nicht im geerbten Programm
22 definiert sind.
23
24 Wenn replace_program() angewendet wird, werden Shadows vom Objekt
25 entfernt, in dem replace_program() stattfindet. Dies ist so seit
26 3.2@166.
27
28 Es ist nicht moeglich, replace_program() aufzurufen, wenn es an das
29 Objekt gebundene (Lambda-) Closures gibt. Hingegen ist es moeglich,
30 zuerst das Programm des Objekts zu ersetzen und dann Lambdaclosures
31 daran zu binden.
32
33 Das Ersetzen des Programms findet erst statt, wenn das Objekt
34 vollstaendig abgearbeitet wurde, nicht schon beim Aufruf der Funktion
35 replace_program(). Das kann dazu fuehren, dass Closures auf inzwischen
36 verschwundene Lfuns des Objekts referenzieren. Das stellt allerdings
37 kein Problem dar, solange diese Referenzen nicht ausgefuehrt werden.
38
39BEMERKUNGEN
40 Raeume benutzen replace_program automatisch. Es ist nicht sinnvoll
41 oder notwendig, replace_program selbst ohne Konsultaton mit einem
42 Erzmagier einzusetzen!
43
44BUGS
45 Wenn ein ersetzendes Programm virtuell geerbte Variablen enthaelt,
46 muss dieses Programm als erstes geerbt werden. Ohne diese
47 Einschraenkung ueberleben die falschen Variablen den
48 Ersetzungsprozess.
49
50AENDERUNGEN
51 LDMud 3.2.9 liess zu, dass das Argument <program> weggelassen wird,
52 wenn nur ein Inherit existiert.