lucy-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nick Wellnhofer (JIRA)" <j...@apache.org>
Subject [lucy-issues] [jira] [Created] (LUCY-258) Clownfish interfaces
Date Sun, 23 Jun 2013 16:50:20 GMT
Nick Wellnhofer created LUCY-258:
------------------------------------

             Summary: Clownfish interfaces
                 Key: LUCY-258
                 URL: https://issues.apache.org/jira/browse/LUCY-258
             Project: Lucy
          Issue Type: Brainstorming
          Components: Clownfish
            Reporter: Nick Wellnhofer
            Priority: Minor


Java-style interfaces would be a nice feature for Clownfish. Here's a sketch of how it could
be implemented. It's basically an adaption of the technique described by Bjarne Stroustrup
in his paper [Multiple Inheritance for C++|http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.23.4735].

If a subclass implements an interface, an additional instance variable pointing to an interface
method table is created. A pointer to this instance variable represents an interface reference.
The interface method table contains

* the offset of the pointer to the interface method table from the start of the object.
* a variable length array of method pointers to the implementations of the interface's methods.
* optionally a pointer to an Interface object for introspection.

Every subclass/interface combination needs a separate interface method table. Subclasses that
don't override any of the interface methods of a parent class can reuse the parent class's
table.

The memory layout would look like this:

{noformat}
     object
   +--------+
   | head   |
   | vtable |     itable
   | ivars  |   +---------+
-->| itable +-->| offset  |
   | ivars  |   | method1 |
   +--------+   | method2 |
                | method3 |
                | method4 |
                | ...     |
                +---------+
{noformat}

Converting an object to an interface reference is done by returning a pointer to the itable
struct member. Converting back to the object is done by subtracting the offset in the itable.
Method invocation from an interface reference is done by looking up the method pointer and
calling it with the original object.

In host languages, an interface is represented by a class with the interface's methods. Objects
of this class contain the interface reference (address of the itable instance variable).


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message