|
Phantasmal Site > DGD > DGD Glossary
Glossary of DGD Terms and Concepts
- Afuns
- An Afun, short for "Auto Function", is defined in the Auto
object and behaves like an Kfun. It may override an existing
Kfun.
- Applies
- Applies are functions in the MUDLib that the DGD driver
calls. These are pretty much always in the Driver object, at
least in DGD. They're not the same as Hooks because Hooks are
called by other code in the MUDLib, not by the DGD driver binary
itself.
- Atomic Functions
- Atomic functions are very, very uncommon even in LPMUDs. DGD
is really pretty much unique in having them. An Atomic Function
is one which, if it gets an error, basically never happened. Any
variables, global data and whatnot that it played with will be
back in the same state as if the function had never run. Atomic
functions may not read or write network connections, nor read or
write files. Otherwise, they can do anything allowable in DGD
LPC.
- Auto object
- The second LPC object created. All later LPC objects,
everything except the Auto object itself and the Driver object,
inherit from Auto. Auto is a common place to override the
standard DGD Kfuns with versions tuned for your particular
MUDLib.
- Clonable
- In MUDLibs that separate Inheritable and Clonable, a Program
which may be cloned. It may have variables and other state, its
functions may be called and it may be recompiled in place. In
MUDLibs that don't separate the two, this distinction doesn't
matter, but then a reboot may be necessary to upgrade objects.
Compare Inheritable.
- Clone
- A clone is basically an "instance", in an object oriented
sense, of a master object. Every clone shares its code (called a
Program) with the master but each maintains an individual copy of
the data.
- Driver object
- The first LPC object created. It field a number of hooked
called (see Hooks) from the actual DGD driver, the real C
code.
- Driver program
- The actual binary program in C, not LPC, that starts up the
whole LPC environment and begins running the interpreted parts.
It may be extended with a variety of packages and extensions, or
be normal "vanilla" DGD. The driver implements common functions
that programs can't do for themselves and that any big program is
likely to need. See also MUDLib.
- Efuns
- Short for External Functions. Efuns are functions which are
defined or overridden by the MUDLib's auto object. Basically,
just like AFuns.
- Execution Rounds
- Execution rounds are what used to be called DGD Threads. An
execution round occurs in response to an event. Any event will be
responded to by some piece of LPC code somewhere in your MUD. One
run of that code is called an execution round. Whenever an ER
ends a bunch of stuff happens. For instance, objects are swapped
to disk, and send_message and send_datagram actually send.
Shutdowns, reboots and state dumps wait for the current ER to end
before they occur... So don't do your post-dump or post-shutdown
stuff right after your shutdown call. Wait until the current ER
has ended so you're sure shutdown has already been called.
- Hooks
- Functions which get called when certain things happen.
They're like event handlers in some languages except that, as
with Java interfaces, you don't get to pick their names, you just
supply an Object with all the right function names defined. You
register with another part of the MUDLib for a Hook -- if the
driver just does it automatically, it's an Apply instead of a
Hook.
- Inheritable
- In MUDLibs that separate Inheritable and Clonable, a Program
from which other programs may inherit. It may not be cloned, none
of its functions can be directly called and it may have no
variables nor any other kind of state. If it needs to be
dynamically upgraded, it will be destroyed rather than recompiled
in place, and it will be regenerated on demand from the new
source. This is restrictive, but without it you may need to
reboot the server to upgrade objects. Compare Clonable.
- Issue
- If you stumble into the thorny territory of writing your own
object manager, as you'll need to do in order to upgrade
(recompile) objects without rebooting for a Persistent MUD,
you'll probably need to know about Issues. An Issue of an object,
in particular of an Inheritable object, is a compiled version of
that object. Until every object inheriting from a given Issue has
been destructed or recompiled, the Issue is still there, lurking.
An object manager can be careful to destroy any old Issues when
it recompiles a new one, but that's a nontrivial undertaking. It
is easiest to keep track of issues by their object index, which
will be different for each issue. See the example object manager
code on the main page and the mailing list archives.
- Kfuns
- Kfuns are DGD Kernel Functions, not to be confused with the
Kernel MUDLib, a different beast. These are the basic things that
DGD lets your MUDLib do. The MUDLib may override them so that the
actual objects your wizards create use Kfuns different from the
ones DGD supplies. See Auto object.
- LFuns
- Lfuns are local functions, functions local to a given object
or program.
- Lightweight Object
- DGD is a disk-based MUD, and swaps out its objects regularly
(indeed, constantly) to a swap file. Little things like member
variables (including arrays and mappings), get swapped as part of
the object they're part of. If they're referenced by another
object, then instead of being shared they'll be copied into the
other object as well when the current Thead (qv) of execution
completes. LWOs have .c files that define them, but act otherwise
just like arrays and mappings -- they're part of the object that
references them, swap with it and are copied if multiple objects
reference them.
- LWO
- A Lightweight Object.
- Master
- A clone is produced from a master object using the
clone_object kfun. In some MUDLibs, the master must be a Clonable
and may not be an Inheritable.
- MUDLib
- A MUDLib is the layer of LPC on top of the Driver program
that runs the actual game or application you want. The MUDLib
implements stuff you know your wizards or other users will want
to do that not every program built on DGD will necessarily want.
This includes things like rooms, mobiles and objects. Remember,
not only do different MUDs implement these things in different
ways, but DGD can be used for pretty much any kind of network
server, not just MUDs.
- Object
- A chunk of code which may inherit from other objects. It
tracks its own data. The same thing as a Program.
- Object manager
- To have a Persistent MUD, you'll need to keep track of what
inherits and clones what so that you can recompile or destroy all
the right stuff at all the right times. There's a massive amount
of deep, confusing mailing list traffic on this deep, confusing
topic. To cut to the chase, you can try installing Geir Harald
Hansen's Object Manager from the top page's LPC Code
Examples.
- Persistent MUD
- A Persistent MUD is one that never does the usual save,
recompile, reboot routine. Instead it keeps its memory state
around and recompiles stuff in-place. This is very, very hard to
do in most languages and impossible in pretty much every other
MUD server. That's why DGD is so proud of being able to do it
well. To do this properly, you'll need a MUDLib that separates
Inheritable and Clonable objects -- nothing that's both inherited
from and cloned. See Inheritable, Clonable, and Object
Manager.
- Program
- The LPC code of an object. In many MUDLibs, it must be either
an Inheritable or a Clonable but may not be both.
- Thread
- A thread of execution -- if multiple Threads are occurring,
that means multiple things are happening more-or-less at the same
time, and maybe really at the same time if you've got
multiple processors running DGD. This is also the old, confusing,
now-obsolete term for an Execution Round (qv). Note that DGD code
always acts exactly as though it's single-threaded, even when
it's actually running multithreaded. How it does this is Deep
Voodoo, and should be questioned only by those with a profound
understanding of Atomic Functions (qv).
- Tick
- A tick is a hardware-independent abstraction of CPU usage.
DGD runs on multiple platforms, and you'd like them to have
similar behavior with respect to things like CPU quotas. So DGD
rates various operations by how processor-intensive they are, and
marks off ticks accordingly. Tick usage can be limited by the
rlimits() construct, and monitored by status(). The Kernel
Library has a quota system for ticks that prevents you using too
many at a time, or too many total.
|