SYNOPSIS
        void replace_program()
        void replace_program(string program)

DESCRIPTION
        Substitutes a program with the inherited program <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.

HISTORY
        LDMud 3.2.9 allowed to omit the argument if only one inherit
        exists.
