[Bioperl-l] Annotation proposal

Matthew Pocock mrp@sanger.ac.uk
Wed, 11 Apr 2001 11:59:10 +0100

Ewan Birney wrote:

> On Tue, 10 Apr 2001, Matthew Pocock wrote:
>> Ewan Birney wrote:
> Re: your frame stuff/code snippets.
> Frankly it just *scares me* what you can do with Perl AUTOLOAD, a
> little bit of closure/anonymous subroutines and a hash. Is this sane?

Closures are very powerful, and in my view should be used wherever you 
want run-time implementations without exposing the actual implementation 
or creating yet one more module e.g. iterator objects. Perl is not the 
only language to have a 'do this if you don't know what to do' method. I 
think to save yourself from debugging hell, you realy have to also hide 
CAN and probably ISA so that the objects realy do subscribe to the 
interface that they implement, but this is no big deal.

> But basically you are right - I think we do want some type-safe system but
> run-time resolved mix-in something-or-other, aka Frames aka whatever other
> buzzword you want to put in it. What is the best way to allow this to
> happen? How constrained should it be by compile time language constraints?

This is realy more of an object-oriented lisp thing to do. The perl 
run-time works prety much identicaly to how my FluffyObject things do 
except that the methods hash is a symbol table bound to a package which 
also stores package-scoped variables. If you think of what you can do 
with javascript (add methods to objects as you instantiate them), or 
what you get by instantiating anonymous inner classes in Java, this is 
realy not that different. The no-1 key is that no data is exposed - all 
data access goes though methods. '42' is a function that evaluates to 
the integer 42 etc.

It all becomes much more usefull when I can have an interface defining 
foo & bar (either as a fluffy object or as a normal perl package), and 
then create a fluffy object that says it implements that interface and 
have ISA work correctly. It becomes much more useful if you can easily 
introspect the available methods (try the $obj->METHODS funciton). At 
that point, I don't think there is any danger in creating run-time 
types. Is there a utility? Probably there is for creating object 
representations of complex ontologies. It does allow fluffy and hard 
objects to be mixed together. If you have a propper query language then 
these graphs of fluffies and hards can be data-mined by fairly generic 
routines and then we can move into a new era of knowledge discovery (OK 
- a bit carried away here).

Anyway, I'm going back to Java where this sort of thing is more tricky 
to do (because Sun cocked up the Class and ClassLoader objects) but 
works out if everything is a bean and you happen to have a byte-code 
generator lying arround.