[bitc-dev] Question for the group re: OO
Michal Suchanek
hramrach at centrum.cz
Sat Mar 20 13:44:39 PDT 2010
On 20 March 2010 06:18, Jonathan S. Shapiro <shap at eros-os.org> wrote:
> On Fri, Mar 19, 2010 at 5:50 PM, Michal Suchanek <hramrach at centrum.cz> wrote:
>> I don't see where these are defined, certainly not at
>> http://www.bitc-lang.org/docs/bitc/spec.html#ty_object
>
> Very sorry - I'm spinning back up too, and I forgot that DEFCAPSULE
> got renamed to DEFOBJECT. So you want to look at:
>
> http://www.bitc-lang.org/docs/bitc/spec.html#ty_object
> http://www.bitc-lang.org/docs/bitc/spec.html#ty_method
>
> We don't currently have virtual methods, but given the way that
> objects are fabricated, it isn't immediately clear that we need them.
> What's really missing here is subtyping.
>
The object really looks like interface, it specifies the methods and
it can be applied to structures which have additional methods about
which it does not care as far as I understand.
The subtyping/merging cannot be expressed with them, though.
The question is if that is really necessary.
It does not matter if one interface is subset of other. If you want an
interface you specify what you want and are done with it.
Still I wonder how do you express extensions in terms of these BitC objects.
Take these for example:
interface Ordered [:type] {
require <=>: [:type] : :numeric
assert ( sgn(self.<=> other) == -sgn(other.<=>self) )
assert ( ((self.<=> other) == 0 ) || (self != other)
def >: [other :type] : :bool { (self.<=> other) > 0 }
def <
def <=
def >=
}
interface Enumerable [:type] {
include Ordered
require succ: :type
assert ( succ > self )
}
integer {
implements Enumerable
def <=>[other:integer] { self - other}
def succ { self + 1 }
}
Here the extension feature is significant, the Enumerable would grow
significantly if replicating the Ordered code was required.
Thanks
Michal
More information about the bitc-dev
mailing list