MOO-cows Mailing List Archive


ALPHA-TEST release of LambdaMOO version 1.8.0alpha2

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

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

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:
	   is the maximum number of seconds the server will wait for a response
	   to a hostname <--> IP address lookup before giving up.
	   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
-- 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...

Home | Subject Index | Thread Index