Date: 05 Jun 2003 16:06:16 +0100 From: Doug Rabson <dfr@nlsystems.com> To: Paul Richards <paul@freebsd-services.com> Cc: current@freebsd.org Subject: Re: VFS: C99 sparse format for struct vfsops Message-ID: <1054825575.32554.28.camel@builder02.qubesoft.com> In-Reply-To: <20030605145111.GF76193@survey.codeburst.net> 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> <20030605145111.GF76193@survey.codeburst.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2003-06-05 at 15:51, Paul Richards wrote: > 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. What has build time got to do with anything? At build time, you have no idea what interfaces are available either. Besides modules can be built at a different time from the rest of the kernel. > > > 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 :-) Its still slower and wastes more memory and bloats the code for every call site. I have a better approach in mind which I will be trying out soonish.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1054825575.32554.28.camel>