Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Jun 2003 15:51:11 +0100
From:      Paul Richards <paul@freebsd-services.com>
To:        Doug Rabson <dfr@nlsystems.com>
Cc:        current@freebsd.org
Subject:   Re: VFS: C99 sparse format for struct vfsops
Message-ID:  <20030605145111.GF76193@survey.codeburst.net>
In-Reply-To: <1054734198.32568.23.camel@builder02.qubesoft.com>
References:  <26877.1054676171@critter.freebsd.dk> <20030603.160943.102571653.imp@bsdimp.com> <1054594801.1641.49.camel@cf.freebsd-services.com> <200306041001.07145.dfr@nlsystems.com> <20030604122445.GB68108@survey.codeburst.net> <1054730025.32554.15.camel@builder02.qubesoft.com> <20030604131628.GE68108@survey.codeburst.net> <1054734198.32568.23.camel@builder02.qubesoft.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jun 04, 2003 at 02:43:20PM +0100, Doug Rabson wrote:
> On Wed, 2003-06-04 at 14:16, Paul Richards wrote:
> > On Wed, Jun 04, 2003 at 01:33:46PM +0100, Doug Rabson wrote:
> > 
> > > Interfaces actually can be added at runtime. Existing objects (i.e.
> > > objects instantiated before the new interface was added) will continue
> > > to work as before. If methods from the new interface are called on old
> > > objects, the default method will be called.
> > 
> > How can you add an interface at runtime?
> 
> By loading a kernel module. If I load e.g. the agp kernel module, I add
> the agp_if interface to the kernel.

Yes, I know that you can load a pre-compiled interface at runtime
and thereby add that interface, but you can only "create" interfaces
at build time because each method in the interface is uniquely
identified by a kobjop_desc struct, which is what I was referring to.

> The code which is doing the method dispatch has no real idea what
> methods (or what interfaces for that matter) that the object's class
> implements. You can't use the classes method table layout for the ops
> table since the caller has no way of knowing that layout (and the layout
> will be different for almost every class in the system).
> 
> One possible way of making this slightly simpler might be to make the
> class point at a table indexed by interface ID, each entry of which is a
> table indexed by a method ID from that interface. This sounds fine in
> theory but in practice, it would end up slower due to the two memory
> accesses.

That's along the lines of what I suggested at the start of the thread :-)

-- 
Tis a wise thing to know what is wanted, wiser still to know when
it has been achieved and wisest of all to know when it is unachievable
for then striving is folly. [Magician]



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030605145111.GF76193>