[Grace-core] Inheritance: what is it meant to be good for?

Marco Servetto marco.servetto at gmail.com
Wed Dec 10 19:21:54 PST 2014


The short cynic answer:
Grace want mainly to teach features present in Java/C#/C++/python.
This means that it have to be at least as bad as the union of them all :P

For the best of my understanding, the only really complex point in the
programming language design space that Grace do not have but all of
Java/C#/C++ have is type based method overloading.

Oh, yes, and there is only one supported numeric type, so no need for
conversion/cohertions here, ... however they are thinking to change it
and allow stuff like
1+Complex(1,3) happen.... thus pushing the conversion/cohertions mess
too inside grace.

On 10 December 2014 at 13:50,  <Alex.Potanin at ecs.vuw.ac.nz> wrote:
> Hello,
>
> I must have missed the discussion before, but I am just wondering - why
> inheritance? Why not have delegation or other composition mechanisms and
> omit it entirely?
>
> Thanks,
> Alex.
>
>> I thought it might be best to specify my minimum needs for inheritance,
>> leaving room for adding new things if there are good reasons.
>>
>> 1.  We need single inheritance on classes and on immutable objects, when
>> we have access to the compete definitions of the super-class/super-object.
>>  I.e., at the point of definition, we have complete knowledge of all
>> features of the superclass/object, including confidential features.  This
>> allows us to know when we are overriding existing features and (very
>> importantly) knowing when we might be (illegally) overloading features.
>>
>> It is handy to be able to inherit from newly formed objects so that we can
>> get the initialization right, but it is not part of the minimal needs for
>> inheritance in my view.
>>
>> 2.  When inheriting we can add new features (defs, vars, and methods) as
>> well as override existing methods.  I'm less sure about overriding an
>> existing (confidential) def or var by a method.  (Public defs and vars are
>> already represented by methods, so they are fine.)  Overriding other
>> features makes me nervous, but perhaps unnecessarily.
>>
>> 3.  Initialization of objects formed using inheritance (actually all are,
>> since all inherit from top object):  First the complete object is laid
>> out, with slots for defs, vars, and methods, both inherited and newly
>> defined.  Methods are then associated with their slots -- those defined in
>> the object/class can be inserted directly.  Any not overridden can be
>> inserted from the parent.  Then the initialization code from the
>> superclass/object is run, followed by the initialization code from the
>> object being defined.  The initialization code shall be run with the
>> object being defined as the value of self.  Thus if initialization code
>> (even in the superclass) executes a method that has been overridden then
>> the new version will be executed.  This of course raises the possibility
>> that a new method called from the superclass initialization code might
>> access a def or var that has not yet been initialized, but I consider that
>> the programmers responsibility to make sure that doesn't hap!
>>  pen.
>>
>> Subclasses/object may invoke superclass methods by super.m(...).  This
>> just allows the invocation of such methods in a context where self is the
>> (sub)object being defined.
>>
>> The above is necessary in order to build the kind of frameworks that i
>> need for my graphics system, where students update fixed methods that are
>> pre-wired to respond to events.
>>
>> 4.  I would like the static type system to be able to constrain
>> inheritance so that overriding one method is guaranteed not to break
>> another (inherited) method in the same class.  At the moment, I'm not sure
>> what, if any, constraints that puts on the dynamically typed system.
>>
>> 5.  Finally, inheritance should look familiar to those used to Java, C++,
>> Scala, etc.  This is necessary both to convince instructors to use it, but
>> also to make it easier to transition from Grace to one of those languages.
>>  Of course they are inconsistent with each other (e.g., with
>> initialization), but I'm sure you get my drift ...
>>
>> I'm sure I'm leaving some stuff out here, but let's take this as the start
>> of the conversation.  Questions??  Comments?
>>
>> [There are likely other things that I can be convinced should be part of
>> inheritance, but I've just tried laying out the minimum I need in order to
>> teach my intro course(s).]
>>
>>
>> Kim
>>
>>
>>
>>
>> _______________________________________________
>> Grace-core mailing list
>> Grace-core at cecs.pdx.edu
>> https://mailhost.cecs.pdx.edu/mailman/listinfo/grace-core
>>
>
> _______________________________________________
> Grace-core mailing list
> Grace-core at cecs.pdx.edu
> https://mailhost.cecs.pdx.edu/mailman/listinfo/grace-core


More information about the Grace-core mailing list