SYNOPSIS void replace_program() void replace_program(string program) DESCRIPTION Substitutes a program with the inherited program . If the object inherits only one program, the argument may be omitted and the efun will automatically select the one inherited program. This efun is useful if you consider the performance and memory consumption of the driver. A program which doesn't need any additional variables and functions (except during creation) can call replace_program() to increase the function-cache hit-rate of the driver which decreases with the number of programs in the system. Rooms are a good example for the application of this function, as many rooms just consist of an inherit statement and the configure function. Any object can call replace_program() but looses all extra variables and functions which are not defined by the inherited program. When replace_program() takes effect, shadowing is stopped on the object since 3.2@166. It is not possible to replace the program of an object after (lambda) closures have been bound to it. It is of course possible to first replace the program and then bind lambda closures to it. The program replacement does not take place with the call to the efun, but is merely scheduled to be carried out at the end of the backend cycle. This may cause closures to have references to then vanished lfuns of the object. This poses no problem as long as these references are never executed after they became invalid. BUGS If the replacement program contains virtually inherited variables, it must be the first inherited program. Without this restriction, the wrong variables would survive the replacement process. HISTORY LDMud 3.2.9 allowed to omit the argument if only one inherit exists.