[Xotcl] re: Method inheritance on class side
Gustaf Neumann
neumann@wu-wien.ac.at
Tue, 24 Apr 2001 15:16:20 +0200
On Sunday 22 April 2001 14:02, Artur Trzewik wrote:
> Hallo
>
> By building some Xotcl Class System I have following problem.
> Consider the example
>
>
> % Class A
> A
> % A proc test {} { puts "method test" }
> % Class B -superclass A
> B
> % B test
> test
> %
>
> I would expect by calling B test to invoke A proc test and not to create
> new instance of B.
> I know this bahavior from Smalltalk. It is very usefull for building
> special creating method on class side or some method that not need a
> instance
we discussed internally this topic about forteen day ago internally.
the point is that
- "proc" is by its idea an object specific method
- the way to provide methods for other objects (in the general sense)
in xotcl is primarily the instproc mechanism;
- the preferred way to provide methods for classes
are meta classes
one can use meta-classes, or even if you want to stick with
"Class" class creation, you can combine metaclasses with instmixins
to achieve a similar behavior:
==========================================================
Class M
M instproc mt {} {puts "method meta test" }
Class instmixin M
Class A
Class B -superclass A
B mt
==========================================================
in other cases, it is appropriate to search for some base-class
an to call its proc via delegation. The per-object-philosopy
(for the "eyes" of one object only) is something which can be
desireable in some situations.
a possible solution is to distinguish between
- proc
- instproc
- classproc
where the last one is like a proc, which is intherited to subclasses.
The danger i see there is the XOTcl becomes a kind of new version
of CLOS, which allows a very elementary configuration of all
aspects of the language with tons of "modifiable language elements"
aside the basic question of conceptual cleanness of what procs are
supposed to be is the question of negative effects and compatibility.
Currently, calling a proc is very fast, the necessity to search for
another proc will cause some speed penalty. for other effects,
check the following incomplete list of further aspects:
- method chaining between procs (of classes),
- [self] of a proc is not alway the object, on which it is called,
- inheritable procs in per-object or per-class mixins
My feeling is that the number of occurances, where this inheritable
procs are needed, is rather small (maybe it is my programming style).
The issues involved are quite complex. in most (all) there is a
not-so-conveniant, but quite-clean solution for the problem. But
my opinion is quite undecided.
What is the opinion of the community? Do you need/want such
an extended "inheritable proc" or a new language-consttruct?
Did you face this problem already, and if yes, was it hard/inelegant
to solve?
best regards
-gustaf