[
https://issues.apache.org/jira/browse/CLOWNFISH-12?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nick Wellnhofer updated CLOWNFISH-12:
-------------------------------------
Fix Version/s: (was: 0.6.0)
0.7.0
> Clownfish interfaces
> --------------------
>
> Key: CLOWNFISH-12
> URL: https://issues.apache.org/jira/browse/CLOWNFISH-12
> Project: Apache Lucy-Clownfish
> Issue Type: New Feature
> Components: Core
> Reporter: Nick Wellnhofer
> Priority: Minor
> Fix For: 0.7.0
>
>
> 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 was sent by Atlassian JIRA
(v6.3.4#6332)