Re: eliminate EXTENSIBLE types?

From: H. v. L. <"H.>
Date: Sun, 03 Oct 2004 12:56:33 +0200

----boundary-LibPST-iamunique-1319869086_-_-
Content-type: text/plain

On Sat, 02 Oct 2004 12:46:34 +0400, Fyodor Tkachov
<fyodor.tkachov{([at]})nowhere.xy

> I would like to discuss the following simplification of our language:
> would it not be good to banish EXTENSIBLE types altogether?
> Especially that supercalls are to be eliminated.

EXTENSIBLE types or supercalls?

If I understand the proposal right it's concern is not about the type
attribute EXTENSIBLE but about EXTENSIBLE methods and supercalls.

With respect to EXTENSIBLE types (like TYPE E = POINTER TO EXTENSIBLE
RECORD ... END) I think it's a matter of choice. If a programmer wants to
use this kind of class declaration, why not, it's up to him.

Another question is EXTENSIBLE methods which always are delicate matter
because they enable supercalls. But to me this possibility is exactly the
reason for their existence. Imagine the following scenario

TYPE
        A* = POINTER TO ABSTRACT RECORD
<attributes>
                PROCEDURE (a: A) Init, NEW, EXTENSIBLE;
<other methods>
        END;
        
        B* = POINTER TO ABSTRACT RECORD (A)
<more attributes>
                PROCEDURE (b: B) Init, EXTENSIBLE;
<more methods>
        END;
        
        C = POINTER TO LIMITED RECORD (B)
<more attributes>
                PROCEDURE (c: C) Init;
<more methods>
        END;

Let each of these types be contained in a separate module. Evidently only
Type C may be instantiated. Nevertheless each of the base types has and
needs it's own Init method

        PROCEDURE (a: A) Init, NEW, EXTENSIBLE;
        BEGIN
                ...
        END;

        PROCEDURE (b: B) Init, EXTENSIBLE;
        BEGIN
                Init^;
                ...
        END;

and

        PROCEDURE (c: C) Init;
        BEGIN
                Init^;
                ...
        END;

This scenario depends on supercalls, initialization can be and is done in
a clear cut fashion, the Init methods of the base types can't be called
directly.

If you eliminate EXTENSIBLE methods from the language the same situation
looks like this

TYPE
        A* = POINTER TO ABSTRACT RECORD
<attributes>
                PROCEDURE (a: A) InitA, NEW;
<more methods>
        END;
        
        B* = POINTER TO ABSTRACT RECORD (A)
<more attributes>
                PROCEDURE (b: B) InitB; NEW;
<more methods>
        END;
        
        C = POINTER TO LIMITED RECORD (B)
<more attributes>
                PROCEDURE (c: C) InitC; NEW;
<more methods>
        END;

So what does InitC has to do? In one possible scenario the abstract
classes define their Init methods like above but InitB does not call InitA

        PROCEDURE (a: A) InitC, NEW;
        BEGIN
                ...
        END;

        PROCEDURE (b: B) InitC, NEW;
        BEGIN
                ...
        END;

and InitC has to do all the initializations, probably in a specific order

        PROCEDURE (c: C) InitC, NEW;
        BEGIN
                InitA;
                InitB;
                ...
        END;

The other scenario looks like this

        PROCEDURE (a: A) InitC, NEW;
        BEGIN
                ...
        END;

        PROCEDURE (b: B) InitC, NEW;
        BEGIN
                InitA;
                ...
        END;

        PROCEDURE (c: C) InitC, NEW;
        BEGIN
                InitB;
                ...
        END;

In this case InitC has to call InitB only because InitA is called by InitB
already.

Now imagine the author of InitC does not know about the details, that is
about initializations, and his version of InitC is

        PROCEDURE (c: C) InitC, NEW;
        BEGIN
                InitA;
                InitB;
                ...
        END;

The least harmful situation might be that the second call of InitA does
not change anything, it's only superfluous. But can you be shure of this?
There may be situations where the second call destroys some initialization
having been done by InitB and then ... up, up and away!
Of course a behaviour like this ought to be documented, but you can't be
certain everybody will always know the documentation or have it available
and again the ambiguity is there.
So my conclusion is, we need EXTENSIBLE methods and supercalls. Or is
there another way of doing the job I do not see?

Harro von Lavergne

www.lahini.de
--------------------------------------------

To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
   blackbox-request{([at]})nowhere.xy

To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.

Send any problem reports or questions related to this email list to the list owner at
   owner-blackbox{([at]})nowhere.xy

Current posting policy:

a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.

b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.


----boundary-LibPST-iamunique-1319869086_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIE9uIFNhdCwgMDIgT2N0IDIwMDQgMTI6NDY6MzQg
KzA0MDAsIEZ5b2RvciBUa2FjaG92ICBccGFyDQo8ZnlvZG9yLnRrYWNob3ZAY2Vybi5jaD4gd3Jv
dGU6XHBhcg0KXHBhcg0KPiBJIHdvdWxkIGxpa2UgdG8gZGlzY3VzcyB0aGUgZm9sbG93aW5nIHNp
bXBsaWZpY2F0aW9uIG9mIG91ciBsYW5ndWFnZTpccGFyDQo+IHdvdWxkIGl0IG5vdCBiZSBnb29k
IHRvIGJhbmlzaCBFWFRFTlNJQkxFIHR5cGVzIGFsdG9nZXRoZXI/XHBhcg0KPiBFc3BlY2lhbGx5
IHRoYXQgc3VwZXJjYWxscyBhcmUgdG8gYmUgZWxpbWluYXRlZC5ccGFyDQpccGFyDQpFWFRFTlNJ
QkxFIHR5cGVzIG9yIHN1cGVyY2FsbHM/XHBhcg0KXHBhcg0KSWYgSSB1bmRlcnN0YW5kIHRoZSBw
cm9wb3NhbCByaWdodCBpdCdzIGNvbmNlcm4gaXMgbm90IGFib3V0IHRoZSB0eXBlICBccGFyDQph
dHRyaWJ1dGUgRVhURU5TSUJMRSBidXQgYWJvdXQgRVhURU5TSUJMRSBtZXRob2RzIGFuZCBzdXBl
cmNhbGxzLlxwYXINClxwYXINCldpdGggcmVzcGVjdCB0byBFWFRFTlNJQkxFIHR5cGVzIChsaWtl
IFRZUEUgRSA9IFBPSU5URVIgVE8gRVhURU5TSUJMRSAgXHBhcg0KUkVDT1JEIC4uLiBFTkQpIEkg
dGhpbmsgaXQncyBhIG1hdHRlciBvZiBjaG9pY2UuIElmIGEgcHJvZ3JhbW1lciB3YW50cyB0byAg
XHBhcg0KdXNlIHRoaXMga2luZCBvZiBjbGFzcyBkZWNsYXJhdGlvbiwgd2h5IG5vdCwgaXQncyB1
cCB0byBoaW0uXHBhcg0KXHBhcg0KQW5vdGhlciBxdWVzdGlvbiBpcyBFWFRFTlNJQkxFIG1ldGhv
ZHMgd2hpY2ggYWx3YXlzIGFyZSBkZWxpY2F0ZSBtYXR0ZXIgIFxwYXINCmJlY2F1c2UgdGhleSBl
bmFibGUgc3VwZXJjYWxscy4gQnV0IHRvIG1lIHRoaXMgcG9zc2liaWxpdHkgaXMgZXhhY3RseSB0
aGUgIFxwYXINCnJlYXNvbiBmb3IgdGhlaXIgZXhpc3RlbmNlLiBJbWFnaW5lIHRoZSBmb2xsb3dp
bmcgc2NlbmFyaW9ccGFyDQpccGFyDQpUWVBFXHBhcg0KXHRhYiBBKiA9IFBPSU5URVIgVE8gQUJT
VFJBQ1QgUkVDT1JEXHBhcg0KXHRhYiBcdGFiIDxhdHRyaWJ1dGVzPlxwYXINClx0YWIgXHRhYiBQ
Uk9DRURVUkUgKGE6IEEpIEluaXQsIE5FVywgRVhURU5TSUJMRTtccGFyDQpcdGFiIFx0YWIgPG90
aGVyIG1ldGhvZHM+XHBhcg0KXHRhYiBFTkQ7XHBhcg0KXHRhYiBccGFyDQpcdGFiIEIqID0gUE9J
TlRFUiBUTyBBQlNUUkFDVCBSRUNPUkQgKEEpXHBhcg0KXHRhYiBcdGFiIDxtb3JlIGF0dHJpYnV0
ZXM+XHBhcg0KXHRhYiBcdGFiIFBST0NFRFVSRSAoYjogQikgSW5pdCwgRVhURU5TSUJMRTtccGFy
DQpcdGFiIFx0YWIgPG1vcmUgbWV0aG9kcz5ccGFyDQpcdGFiIEVORDtccGFyDQpcdGFiIFxwYXIN
Clx0YWIgQyA9IFBPSU5URVIgVE8gTElNSVRFRCBSRUNPUkQgKEIpXHBhcg0KXHRhYiBcdGFiIDxt
b3JlIGF0dHJpYnV0ZXM+XHBhcg0KXHRhYiBcdGFiIFBST0NFRFVSRSAoYzogQykgSW5pdDtccGFy
DQpcdGFiIFx0YWIgPG1vcmUgbWV0aG9kcz5ccGFyDQpcdGFiIEVORDtccGFyDQpccGFyDQpMZXQg
ZWFjaCBvZiB0aGVzZSB0eXBlcyBiZSBjb250YWluZWQgaW4gYSBzZXBhcmF0ZSBtb2R1bGUuIEV2
aWRlbnRseSBvbmx5ICBccGFyDQpUeXBlIEMgbWF5IGJlIGluc3RhbnRpYXRlZC4gTmV2ZXJ0aGVs
ZXNzIGVhY2ggb2YgdGhlIGJhc2UgdHlwZXMgaGFzIGFuZCAgXHBhcg0KbmVlZHMgaXQncyBvd24g
SW5pdCBtZXRob2RccGFyDQpccGFyDQpcdGFiIFBST0NFRFVSRSAoYTogQSkgSW5pdCwgTkVXLCBF
WFRFTlNJQkxFO1xwYXINClx0YWIgQkVHSU5ccGFyDQpcdGFiIFx0YWIgLi4uXHBhcg0KXHRhYiBF
TkQ7XHBhcg0KXHBhcg0KXHRhYiBQUk9DRURVUkUgKGI6IEIpIEluaXQsIEVYVEVOU0lCTEU7XHBh
cg0KXHRhYiBCRUdJTlxwYXINClx0YWIgXHRhYiBJbml0XjtccGFyDQpcdGFiIFx0YWIgLi4uXHBh
cg0KXHRhYiBFTkQ7XHBhcg0KXHBhcg0KYW5kXHBhcg0KXHBhcg0KXHRhYiBQUk9DRURVUkUgKGM6
IEMpIEluaXQ7XHBhcg0KXHRhYiBCRUdJTlxwYXINClx0YWIgXHRhYiBJbml0XjtccGFyDQpcdGFi
IFx0YWIgLi4uXHBhcg0KXHRhYiBFTkQ7XHBhcg0KXHBhcg0KVGhpcyBzY2VuYXJpbyBkZXBlbmRz
IG9uIHN1cGVyY2FsbHMsIGluaXRpYWxpemF0aW9uIGNhbiBiZSBhbmQgaXMgZG9uZSBpbiAgXHBh
cg0KYSBjbGVhciBjdXQgZmFzaGlvbiwgdGhlIEluaXQgbWV0aG9kcyBvZiB0aGUgYmFzZSB0eXBl
cyBjYW4ndCBiZSBjYWxsZWQgIFxwYXINCmRpcmVjdGx5LlxwYXINClxwYXINCklmIHlvdSBlbGlt
aW5hdGUgRVhURU5TSUJMRSBtZXRob2RzIGZyb20gdGhlIGxhbmd1YWdlIHRoZSBzYW1lIHNpdHVh
dGlvbiAgXHBhcg0KbG9va3MgbGlrZSB0aGlzXHBhcg0KXHBhcg0KVFlQRVxwYXINClx0YWIgQSog
PSBQT0lOVEVSIFRPIEFCU1RSQUNUIFJFQ09SRFxwYXINClx0YWIgXHRhYiA8YXR0cmlidXRlcz5c
cGFyDQpcdGFiIFx0YWIgUFJPQ0VEVVJFIChhOiBBKSBJbml0QSwgTkVXO1xwYXINClx0YWIgXHRh
YiA8bW9yZSBtZXRob2RzPlxwYXINClx0YWIgRU5EO1xwYXINClx0YWIgXHBhcg0KXHRhYiBCKiA9
IFBPSU5URVIgVE8gQUJTVFJBQ1QgUkVDT1JEIChBKVxwYXINClx0YWIgXHRhYiA8bW9yZSBhdHRy
aWJ1dGVzPlxwYXINClx0YWIgXHRhYiBQUk9DRURVUkUgKGI6IEIpIEluaXRCOyBORVc7XHBhcg0K
XHRhYiBcdGFiIDxtb3JlIG1ldGhvZHM+XHBhcg0KXHRhYiBFTkQ7XHBhcg0KXHRhYiBccGFyDQpc
dGFiIEMgPSBQT0lOVEVSIFRPIExJTUlURUQgUkVDT1JEIChCKVxwYXINClx0YWIgXHRhYiA8bW9y
ZSBhdHRyaWJ1dGVzPlxwYXINClx0YWIgXHRhYiBQUk9DRURVUkUgKGM6IEMpIEluaXRDOyBORVc7
XHBhcg0KXHRhYiBcdGFiIDxtb3JlIG1ldGhvZHM+XHBhcg0KXHRhYiBFTkQ7XHBhcg0KXHBhcg0K
U28gd2hhdCBkb2VzIEluaXRDIGhhcyB0byBkbz8gSW4gb25lIHBvc3NpYmxlIHNjZW5hcmlvIHRo
ZSBhYnN0cmFjdCAgXHBhcg0KY2xhc3NlcyBkZWZpbmUgdGhlaXIgSW5pdCBtZXRob2RzIGxpa2Ug
YWJvdmUgYnV0IEluaXRCIGRvZXMgbm90IGNhbGwgSW5pdEFccGFyDQpccGFyDQpcdGFiIFBST0NF
RFVSRSAoYTogQSkgSW5pdEMsIE5FVztccGFyDQpcdGFiIEJFR0lOXHBhcg0KXHRhYiBcdGFiIC4u
LlxwYXINClx0YWIgRU5EO1xwYXINClxwYXINClx0YWIgUFJPQ0VEVVJFIChiOiBCKSBJbml0Qywg
TkVXO1xwYXINClx0YWIgQkVHSU5ccGFyDQpcdGFiIFx0YWIgLi4uXHBhcg0KXHRhYiBFTkQ7XHBh
cg0KXHBhcg0KYW5kIEluaXRDIGhhcyB0byBkbyBhbGwgdGhlIGluaXRpYWxpemF0aW9ucywgcHJv
YmFibHkgaW4gYSBzcGVjaWZpYyBvcmRlclxwYXINClxwYXINClx0YWIgUFJPQ0VEVVJFIChjOiBD
KSBJbml0QywgTkVXO1xwYXINClx0YWIgQkVHSU5ccGFyDQpcdGFiIFx0YWIgSW5pdEE7XHBhcg0K
XHRhYiBcdGFiIEluaXRCO1xwYXINClx0YWIgXHRhYiAuLi5ccGFyDQpcdGFiIEVORDtccGFyDQpc
cGFyDQpUaGUgb3RoZXIgc2NlbmFyaW8gbG9va3MgbGlrZSB0aGlzXHBhcg0KXHBhcg0KXHRhYiBQ
Uk9DRURVUkUgKGE6IEEpIEluaXRDLCBORVc7XHBhcg0KXHRhYiBCRUdJTlxwYXINClx0YWIgXHRh
YiAuLi5ccGFyDQpcdGFiIEVORDtccGFyDQpccGFyDQpcdGFiIFBST0NFRFVSRSAoYjogQikgSW5p
dEMsIE5FVztccGFyDQpcdGFiIEJFR0lOXHBhcg0KXHRhYiBcdGFiIEluaXRBO1xwYXINClx0YWIg
XHRhYiAuLi5ccGFyDQpcdGFiIEVORDtccGFyDQpccGFyDQpcdGFiIFBST0NFRFVSRSAoYzogQykg
SW5pdEMsIE5FVztccGFyDQpcdGFiIEJFR0lOXHBhcg0KXHRhYiBcdGFiIEluaXRCO1xwYXINClx0
YWIgXHRhYiAuLi5ccGFyDQpcdGFiIEVORDtccGFyDQpccGFyDQpJbiB0aGlzIGNhc2UgSW5pdEMg
aGFzIHRvIGNhbGwgSW5pdEIgb25seSBiZWNhdXNlIEluaXRBIGlzIGNhbGxlZCBieSBJbml0QiAg
XHBhcg0KYWxyZWFkeS5ccGFyDQpccGFyDQpOb3cgaW1hZ2luZSB0aGUgYXV0aG9yIG9mIEluaXRD
IGRvZXMgbm90IGtub3cgYWJvdXQgdGhlIGRldGFpbHMsIHRoYXQgaXMgIFxwYXINCmFib3V0IGlu
aXRpYWxpemF0aW9ucywgYW5kIGhpcyB2ZXJzaW9uIG9mIEluaXRDIGlzXHBhcg0KXHBhcg0KXHRh
YiBQUk9DRURVUkUgKGM6IEMpIEluaXRDLCBORVc7XHBhcg0KXHRhYiBCRUdJTlxwYXINClx0YWIg
XHRhYiBJbml0QTtccGFyDQpcdGFiIFx0YWIgSW5pdEI7XHBhcg0KXHRhYiBcdGFiIC4uLlxwYXIN
Clx0YWIgRU5EO1xwYXINClxwYXINClRoZSBsZWFzdCBoYXJtZnVsIHNpdHVhdGlvbiBtaWdodCBi
ZSB0aGF0IHRoZSBzZWNvbmQgY2FsbCBvZiBJbml0QSBkb2VzICBccGFyDQpub3QgY2hhbmdlIGFu
eXRoaW5nLCBpdCdzIG9ubHkgc3VwZXJmbHVvdXMuIEJ1dCBjYW4geW91IGJlIHNodXJlIG9mIHRo
aXM/ICBccGFyDQpUaGVyZSBtYXkgYmUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgc2Vjb25kIGNhbGwg
ZGVzdHJveXMgc29tZSBpbml0aWFsaXphdGlvbiAgXHBhcg0KaGF2aW5nIGJlZW4gZG9uZSBieSBJ
bml0QiBhbmQgdGhlbiAuLi4gdXAsIHVwIGFuZCBhd2F5IVxwYXINCk9mIGNvdXJzZSBhIGJlaGF2
aW91ciBsaWtlIHRoaXMgb3VnaHQgdG8gYmUgZG9jdW1lbnRlZCwgYnV0IHlvdSBjYW4ndCBiZSAg
XHBhcg0KY2VydGFpbiBldmVyeWJvZHkgd2lsbCBhbHdheXMga25vdyB0aGUgZG9jdW1lbnRhdGlv
biBvciBoYXZlIGl0IGF2YWlsYWJsZSAgXHBhcg0KYW5kIGFnYWluIHRoZSBhbWJpZ3VpdHkgaXMg
dGhlcmUuXHBhcg0KU28gbXkgY29uY2x1c2lvbiBpcywgd2UgbmVlZCBFWFRFTlNJQkxFIG1ldGhv
ZHMgYW5kIHN1cGVyY2FsbHMuIE9yIGlzICBccGFyDQp0aGVyZSBhbm90aGVyIHdheSBvZiBkb2lu
ZyB0aGUgam9iIEkgZG8gbm90IHNlZT9ccGFyDQpccGFyDQpIYXJybyB2b24gTGF2ZXJnbmVccGFy
DQpccGFyDQp3d3cubGFoaW5pLmRlXHBhcg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1ccGFyDQpccGFyDQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbWFpbGlu
ZyBsaXN0LCBzZW5kIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSB3b3JkICJ1bnN1YnNjcmliZSIg
dG86XHBhcg0KICAgYmxhY2tib3gtcmVxdWVzdEBvYmVyb24uY2hccGFyDQpccGFyDQpUbyBnZXQg
YSBsaXN0IG9mIHZhbGlkIGUtbWFpbCBjb21tYW5kcyBhbmQgaW5zdHJ1Y3Rpb25zIG9uIHRoZWly
IHVzYWdlLCBzZW5kIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSB3b3JkICJoZWxwIiB0byB0aGUg
YWJvdmUgYWRkcmVzcy5ccGFyDQpccGFyDQpTZW5kIGFueSBwcm9ibGVtIHJlcG9ydHMgb3IgcXVl
c3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBlbWFpbCBsaXN0IHRvIHRoZSBsaXN0IG93bmVyIGF0XHBh
cg0KICAgb3duZXItYmxhY2tib3hAb2Jlcm9uLmNoXHBhcg0KXHBhcg0KQ3VycmVudCBwb3N0aW5n
IHBvbGljeTpccGFyDQpccGFyDQphKSBUbyBwb3N0IHlvdSBzaG91bGQgdXNlIHRoZSBzYW1lIGFk
ZHJlc3MgYnkgd2hpY2ggeW91IGFyZSBzdWJzY3JpYmVkIHRvIHRoZSBtYWlsaW5nIGxpc3QuIFRo
YXQgd2F5LCB0aGUgbGlzdCBzZXJ2ZXIgd2lsbCByZWNvZ25pemUgeW91IGFzIHN1YnNjcmliZXIg
YW5kIGZvcndhcmQgeW91ciBwb3N0aW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNyZWF0aW5nIGFu
eSBvdmVyaGVhZC5ccGFyDQpccGFyDQpiKSBJZiwgZm9yIHNvbWUgcmVhc29uLCB5b3UgY2Fubm90
IHBvc3QgZnJvbSB0aGUgYWRkcmVzcywgYnkgd2hpY2ggeW91IGFyZSBzdWJzY3JpYmVkLCB5b3Vy
IG1lc3NhZ2Ugd2lsbCBiZSBtb2RlcmF0ZWQgdG8gYXZvaWQgc3BhbS4gUGxlYXNlIHVuZGVyc3Rh
bmQgdGhhdCBtb2RlcmF0aW9uIHdpbGwgb2Z0ZW4gY2F1c2Ugc29tZSBkZWxheSwgaW4gcGFydGlj
dWxhciBvdmVyIHdlZWtlbmRzIG9yIGhvbHlkYXlzLlxwYXINCn0

----boundary-LibPST-iamunique-1319869086_-_---
Received on Sun Oct 03 2004 - 12:56:33 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:28:35 UTC