[MUD-Dev] Re: DevMUD: Inheritable modules
Jon Leonard
jleonard at divcom.slimy.com
Fri Oct 30 14:10:24 CET 1998
On Thu, Oct 29, 1998 at 09:00:20PM -0500, James Wilson wrote:
>
> On Thu, 29 Oct 1998, Jon Leonard wrote:
> >On Thu, Oct 29, 1998 at 06:53:29PM +0100, The Arrow wrote:
>
> >> It was something like this I thought of when I wrote the mail.
> >> The problem with interface inheritance, is how to export the interface.
> >> If the modules is written in C++ and we are using external inheritance
> >> (as described by Nicklas) the subclassing should be pretty simple. But how
> >> should the driver know what interface (and module) to use runtime?
> >
> >My current thoughts on this:
> >
> >I don't want to use C++, because it doesn't have the object model I want.
>
> can you elaborate?
More or less what I've said in other messages. You can't change the
implementation of a base class without (usually) forcing a recompile, you
can't query objects for what methods they support, you need to know object
interfaces at compile time. That sort of thing.
You can do these things in C++, but you wind up doing it in parallel with
the C++ module hierarchy. Why not do it in a language-portable way?
My thoughts on the matter would look something like:
struct func {
name *funcname, void *funcpointer, char *type_info;
};
Modules would export an array of these, more or less like this:
struct func interface[] = {
"get_message", get_message, "char*(char*,int,int,int)"
/* more like that */
NULL, NULL, NULL
};
Choose your type to name mangling to taste. There might be other elements of
struct func, like a documentation string, too.
> >An interface should have a name, and an array of function structures
> >like those exported by modules, except without the function pointers.
> >
> >We should have a source verifier that checks that the claimed interface
> >(name-mangled version of the function, or whatever) matches the prototype
> >of the function pointer.
> >
> >There should be a separate collection of defined interfaces, so a module
> >can just say "I implement interface X" (this can be verified, of course)
> >
> >This database of interfaces shouldn't be monolithic -- I don't want to have
> >to know about all interfaces that someone else might define.
> >
> >Explicit interfaces shouldn't be needed to make runnable MUDs, just
> >helpful in configuring them.
>
> did you see my proposal for how this could be done very easily in C++? the
> mapping is pretty straightforward.
The recent one with the modules full of declarations, not the earlier post
about using extern "C"? I've read all of the messages on MUD-Dev about
DevMUD (usually several times -- it's hard to remember everything reading it
only once.)
It looked plausible, but my primary point is that if we're going to invent
a different model to deal with dlopen sorts of issues, we should invent one
that works for C, C++, or nearly any other language. I prefer to write
modules in C, and if someone else writes in C++, we should interoperate.
Jon Leonard
More information about the mud-dev-archive
mailing list