MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | SYNOPSIS |
| 2 | void replace_program(); |
| 3 | void replace_program(string program); |
| 4 | |
| 5 | BESCHREIBUNG |
| 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 | |
| 39 | BEMERKUNGEN |
| 40 | Raeume benutzen replace_program automatisch. Es ist nicht sinnvoll |
| 41 | oder notwendig, replace_program selbst ohne Konsultaton mit einem |
| 42 | Erzmagier einzusetzen! |
| 43 | |
| 44 | BUGS |
| 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 | |
| 50 | AENDERUNGEN |
| 51 | LDMud 3.2.9 liess zu, dass das Argument <program> weggelassen wird, |
| 52 | wenn nur ein Inherit existiert. |