[Gllug] Introduction (not really relevant to anything, just saying hello)
Russell Howe
rhowe at siksai.co.uk
Thu Jun 24 12:13:55 UTC 2004
Nix wrote:
> On Wed, 23 Jun 2004, Russell Howe moaned:
>
>>It'd be like having a network-enabled IDE driver - not necessary when
>>a higherlevel abstraction lets you do what you need to (nbd). In this
>>case, esd/aRts/... are the higher (userspace) level abstraction.
>
>
> This would be a reasonable position if the higher-level abstraction didn't
> throw most of the capabilities away :(
Always the problem with abstract interfaces - how to hide the dirty work
of the underlying implementation whilst still allowing the callers to
make use of desirable implementation-specific features. How to
generalise without becoming so general as to be useless? Does
abstraction have to amount to generalisation at all?
Just out of interest, what methods do people know of for doing this?
Surely it has to be one of the classic design problems in programming?
These are the ones which I can come up with off the top of my head:
* Do nothing. Provide an abstraction of common functionality, with
possibly a way to interface directly to the implementation underneath
for those callers who want to do more.
* Make your abstraction have an extendible method of advertising
extensions to the common feature set. I think IMAP has a way for a
client to ask the server "What commands do you support?". Does this
really differ from the above?
* Make your abstraction the superset of all implementations, and where
an implementation is lacking, emulate the functionality. Things like
graphics libraries spring to mind - software emulation for features not
present in hardware.
Things like DirectX and OpenGL spring to mind as examples of the latter,
but I know that OpenGL (at least) also has some aspects of the former,
whereby you can get a list of supported extensions.
These 3 (2?) methods seem quite obvious, and each leads to problems -
the first one leads to callers needing to know about proprietary
implementation-specific details, possibly with multiple implementations
having similar extensions, all doing a similar thing in different ways.
The latter method can be seen as limiting functionality to only that
which is defined in the original abstraction, which could lead to the
spec. being considered too limiting and be seen as encouraging
proprietary solutions.
The second method could be seen as different to the first if it involved
some kind of standards body, which oversaw extensions to the
abstraction, allowing for the abstraction to evolve gradually as new
requirements appeared.
Sorry about the number of times I said abstraction, but I wanted to keep
it, well, abstract. I didn't want to say "protocol" or "API", since this
kind of problem can probably be seen in many places, and the solutions
are probably mostly generally applicable.
This must've been a problem before computers were around, so does anyone
know of any 'classic' solutions to this? "Back in Plato's day, when I
were a lad..."
--
Russell Howe
rhowe at siksai.co.uk
--
Gllug mailing list - Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug
More information about the GLLUG
mailing list