# ALPHA-TEST release of LambdaMOO version 1.8.0alpha2

Pavel Curtis (pavel@parc.xerox.com)
Mon, 11 Dec 1995 20:40:08 PST

- Messages sorted by:[ date ][ thread ][ subject ][ author ]

    I have made another *alpha-test* release of version 1.8.0 of the LambdaMOO
    server in the usual place:

    	ftp://ftp.parc.xerox.com/pub/MOO/LambdaMOO-1.8.0alpha2.tar.Z

    This is still an ALPHA TEST release of the server and, although a number of
    nasty bugs from the previous release have been fixed, there are almost
    certainly some more server-crashing, database-losing bugs remaining, so please
    DO NOT USE THIS RELEASE IN A PRODUCTION SETTING!

    Please continue to send your bug reports to the main MOO-Cows mailing list so
    that everyone can stay informed and we can perhaps thereby cut down on useless
    duplication of bug reporting.

    I still expect to make more test releases before the final, production-approved
    one.  For particularly nasty reported bugs, I will either make another test
    release containing the fix or else send out a patch; announcements of new test
    releases will be made to MOO-Cows-Announce, but all test-release patches will
    just be posted to the main MOO-Cows list, to reduce the amount of noise on the
    -Announce list.

    Here's the ChangeLog.txt entry for this release:
    -------------------------------------------------------------------------------
    Version 1.8.0alpha2, 11 December 1995
    -- Added an optional argument to `connected_players()'; if provided and true,
       this now includes *all* active connections in the returned list, including
       outbound or un-logged-in ones.
    -- Fixed checkpoint timing to test for overflow when adding $dump_interval to
       the current time; when this happens, it pretends that $dump_interval = 3600.
       This should fix the problem someone found where setting $dump_interval to
       $maxint caused continuous checkpointing.
    -- Fixed `make clean' to remove a few more derived files that aren't part of
       the distribution, including `Makefile' itself.
    -- Added two new DB-settable options:
          $server_options.name_lookup_timeout
    	   is the maximum number of seconds the server will wait for a response
    	   to a hostname <--> IP address lookup before giving up.
          $server_options.outbound_connect_timeout
    	   is the maximum number of seconds that a server will hang waiting for
    	   an outbound network connection attempt to succeed; after that, it
    	   gives up.
    -- Added new built-in function `resume(TASK_ID [, VALUE])', where TASK_ID is
       the task ID of an existing suspended task and VALUE defaults to zero.  If
       the programmer is a wizard or owns the specified task, the task is made
       immediately runnable; when it runs, its call to `suspend()' will return
       VALUE.  Raises E_PERM if the programmer does not own the specified task and
       E_INVARG if TASK_ID does not specify an existing suspended task.
    -- Made the argument to `suspend()' be optional; if omitted, the suspension is
       effectively forever.  Such eternally suspended tasks can only be made
       runnable again with the new `resume()' function.
    -- Verbs that have not yet been programmed are now completely equivalent to
       those with the empty program.  In particular, they are no longer invisible
       to normal verb-calls.
    -- Added new built-in function `task_stack(TASK_ID [, LINE_NUMBERS_TOO])',
       where TASK_ID is the task ID of an existing suspended task and
       LINE_NUMBERS_TOO defaults to false.  Returns a value like that returned by
       `callers()', but covering all of the stack frames of the specified task.
    -- It is now possible to make specific built-in properties readable only by
       wizards.  For a built-in property `foo', if $server_options.protect_foo
       exists and has a true value, then any attempt by a non-wizard to read the
       value of the `foo' property of any object will raise E_PERM.  For example,
       if $server_options.protect_location existed with the value 1, then the
       `location' property of all objects would only be readable by wizards.
    -- Added OUTPUTPREFIX and OUTPUTSUFFIX as synonyms for the built-in PREFIX and
       SUFFIX commands.  I'm told that this would make the MOO compatible with some
       other servers, allowing the same somewhat fancy clients to be used with
       both.
    -- Added new built-in function `object_bytes(OBJECT)', where OBJECT is a valid
       object and the result is the number of bytes of memory required to represent
       that object and all of its verbs and properties.  Raises E_PERM if called by
       a non-wizard.  [There's a surprising amount of difference between this very
       accurate count and the one returned by the rough-guess :object_bytes() verb
       I wrote long ago, which is still used as the basis of most byte-based quota
       implementations.  In particular, the vast majority of objects are, in fact,
       smaller than the rough guess, sometimes by substantial amounts.  For
       example, the $player object in LambdaCore-1Oct94.db is farthest off, being
       43,260 bytes smaller than :object_bytes() guessed.  The majority though,
       including Mr. Spell, are within about 5,000 bytes of the guess, which isn't
       too bad, eh?  It would appear that the guesses were most wrong for verb
       code, which isn't very surprising.]
    -- Added the syntax `$vname(...)' as an abbreviation for `#0:vname(...)', by
       analogy to the `$' notation for properties on #0.
    -- Fixed a server-crashing bug in which the resumption value of suspended tasks
       was not properly saved and restored after reboot.  (Thanks to Jin-su Ahn for
       pointing this out.)
    -- Fixed a bug in which forked tasks were written out incorrectly in checkpoint
       files.  (Thanks to Jin-su Ahn for noticing the problem.)
    -- Fixed a server-crashing bug in the new decompiler.  (Thanks to Jin-su Ahn
       for discovering the bug.)
    -- Made it possible to rename properties.  If the third argument to
       set_property_info(OBJECT, NAME, INFO) has a third element that is a string,
       NEW, and the property NAME is defined on OBJECT (not merely inherited), and
       NEW names neither a built-in property nor an existing property on OBJECT or
       any of its ancestors or descendants, then "OBJECT.NAME" is renamed to
       "OBJECT.NEW".  This more-or-less parallels the way verb renaming works.
    -- Traceback lists, returned by callers() and task_stack() and also made
       available in the try-except-endtry construct, now include entries for
       built-in functions that have made MOO verb calls.  Such entries have the
       same form as normal entries, but the THIS, PROGRAMMER, and VERB-LOC fields
       (elements 1, 3, and 4) are all set to #-1, the VERB-NAME field (element 2)
       is set to the name of the built-in function, and the LINE-NUMBER field
       (element 6), if any, is set to an index used internally to determine the
       current state of the built-in function.  The simplest safe test for a
       built-in function entry is
    	(VERB-LOC == #-1  &&  PROGRAMMER == #-1  &&  VERB-NAME != "")
       This combination was not previously possible.  I leave it to the interested
       reader to discover the previously possible circumstances under which any
       weaker test might fail...
    -------------------------------------------------------------------------------