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