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
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
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
-- 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...
Subject Index |