RE: An extended discussion of extensibility

From: Fyodor Tkachov <"Fyodor>
Date: Sun, 28 Nov 2004 14:54:05 +0300

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

Robert

Many thanks for an interesting example (especially that it gave me an opportunity to further study your excellent library; the excerpt from your message I'd like to take issue with, is appended).

However, it is now my turn to point out an unstated assumption in your design.
The assumption is that mathematically equivalent entities (the functions Cdf and Pdf) are represented in syntactically equivalent ways. In your case:

        Variate = POINTER TO ABSTRACT RECORD
                ...
                (rv: Variate) Cdf (x: REAL): REAL, NEW, EXTENSIBLE;
                ...
                (rv: Variate) Pdf (x: REAL): REAL, NEW, EXTENSIBLE;
                ...
        END;

A software implementation ought to (I would say, must) also reflect practical considerations (usage etc.).

In your specific case, you pointed it out yourself that there are great differences between Cdf and Pdf in that respect.

I would implement your Variate as follows:

        Variate = POINTER TO ABSTRACT RECORD
                (rv: Variate) Pdf (): Function, NEW, ABSTRACT; (* necessary *)
                (rv: Variate) Cdf (VAR x: Function), NEW, EMPTY; (* unnecessary *)
                ...
        END;

with

        Function = POINTER TO ABSTRACT RECORD
                (f: Function) Eval (x: REAL): REAL
        END;

defined somewhere for general use.
Plus, I would provide an independent procedure:

        PROCEDURE Cdf (v: Variate): Function;

or a non-extensible method:

                (rv: Variate) DefaultCdf (): Function, NEW;

It would incorporate knowledge about special cases such as Exponential, as well as provide a default.

Separation of Cdf and Pdf from Variate is advantageous for reasons of flexibility (you will agree it is hard to predict all possible types of application problems).
The lack of symmetry between Cdf and Pdf reflects their (very) different usage.

A side remark: in a large class of problems I deal with, Pdf's are not available, so I would make Variate.Pdf an EMPTY method too.

To summarize, your statement about desirability of EXTENSIBLE methods does not, in my view, stand up to scrutiny, and is only valid within a somewhat narrow and somewhat inflexible implementation scheme you adopted.

Cheers
Fyodor


> >> So with this the argument for EXTENSIBLE procedures vanished and they are
> >> a matter of personal style as were EXTENSIBLE RECORDs and Fjodor is right,
> >> both might - on the level of Component Pascal at least - be banned.
>
> I think there is a flaw in the above conclusions, resulting from an unstated assumption.
>
> People consider only what is NEEDED for correct function (usually using 'Initialisation' as an example.
> There is also the question of what is DESIRABLE for correct function.
>
> I give an example (taken from LibRandom, but there are many others).
> This implements an ABSTRACT type meant to represent a mathematical object called
> a Random Variate (or RV).
> These come in various flavours with names such as 'Normal', 'Exponential',
> and in millions of user specific flavours.
>
> They can be (mathematically) described in many different
> (but essentially equivalent) ways.
> Two of the most common (and useful) are called the 'Pdf' and the 'Cdf'.
>
> The ABSTRACT base type 'Variate' uses the (ABSTRACT) 'Pdf' to compute the 'Cdf'.
> When Variate is extended to, for example, Exponential,
> it is NECESSARY to implement the ABSTRACT base procedure Pdf,
> it is NOT NECESSARY to implement the EXTENSIBLE procedure Cdf.
>
> However, for the Exponential RV, Cdf has a very simple mathematical form and
> it is very easy and very desirable (vastly faster, more accurate, simpler)
> to reimplement Cdf as well.
>
> On the other hand, for user defined RV's, it may be very difficult, if not impossible,
> to reimplement Cdf directly, and depending on the application
> there may be no desire to use the Cdf much anyway,
> so run-time efficiency is secondary to minimising coding effort.
>
> The Component Pascal attribute EXTENSIBLE simply supports this 'optional' reimplementation;
> I don't see an equally simple alternative.

Powered by the E-mail PIM - Info Select - www.miclog.com
--------------------------------------------

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-649104225_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIFJvYmVydFxwYXINClxwYXINCk1hbnkgdGhhbmtz
IGZvciBhbiBpbnRlcmVzdGluZyBleGFtcGxlIChlc3BlY2lhbGx5IHRoYXQgaXQgZ2F2ZSBtZSBh
biBvcHBvcnR1bml0eSB0byBmdXJ0aGVyIHN0dWR5IHlvdXIgZXhjZWxsZW50IGxpYnJhcnk7IHRo
ZSBleGNlcnB0IGZyb20geW91ciBtZXNzYWdlIEknZCBsaWtlIHRvIHRha2UgaXNzdWUgd2l0aCwg
aXMgYXBwZW5kZWQpLlxwYXINClxwYXINCkhvd2V2ZXIsIGl0IGlzIG5vdyBteSB0dXJuIHRvIHBv
aW50IG91dCBhbiB1bnN0YXRlZCBhc3N1bXB0aW9uIGluIHlvdXIgZGVzaWduLlxwYXINClRoZSBh
c3N1bXB0aW9uIGlzIHRoYXQgbWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCBlbnRpdGllcyAodGhl
IGZ1bmN0aW9ucyBDZGYgYW5kIFBkZikgYXJlIHJlcHJlc2VudGVkIGluIHN5bnRhY3RpY2FsbHkg
ZXF1aXZhbGVudCB3YXlzLiBJbiB5b3VyIGNhc2U6XHBhcg0KXHBhcg0KXHRhYiBWYXJpYXRlID0g
UE9JTlRFUiBUTyBBQlNUUkFDVCBSRUNPUkRccGFyDQpcdGFiIFx0YWIgLi4uXHBhcg0KXHRhYiBc
dGFiIChydjogVmFyaWF0ZSkgQ2RmICh4OiBSRUFMKTogUkVBTCwgTkVXLCBFWFRFTlNJQkxFO1xw
YXINClx0YWIgXHRhYiAuLi5ccGFyDQpcdGFiIFx0YWIgKHJ2OiBWYXJpYXRlKSBQZGYgKHg6IFJF
QUwpOiBSRUFMLCBORVcsIEVYVEVOU0lCTEU7XHBhcg0KXHRhYiBcdGFiIC4uLlxwYXINClx0YWIg
RU5EO1xwYXINClxwYXINCkEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb3VnaHQgdG8gKEkgd291
bGQgc2F5LCBtdXN0KSBhbHNvIHJlZmxlY3QgcHJhY3RpY2FsIGNvbnNpZGVyYXRpb25zICh1c2Fn
ZSBldGMuKS5ccGFyDQpccGFyDQpJbiB5b3VyIHNwZWNpZmljIGNhc2UsIHlvdSBwb2ludGVkIGl0
IG91dCB5b3Vyc2VsZiB0aGF0IHRoZXJlIGFyZSBncmVhdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIENk
ZiBhbmQgUGRmIGluIHRoYXQgcmVzcGVjdC5ccGFyDQpccGFyDQpJIHdvdWxkIGltcGxlbWVudCB5
b3VyIFZhcmlhdGUgYXMgZm9sbG93czpccGFyDQpccGFyDQpcdGFiIFZhcmlhdGUgPSBQT0lOVEVS
IFRPIEFCU1RSQUNUIFJFQ09SRFxwYXINClx0YWIgXHRhYiAocnY6IFZhcmlhdGUpIFBkZiAoKTog
RnVuY3Rpb24sIE5FVywgQUJTVFJBQ1Q7ICgqIG5lY2Vzc2FyeSAqKVxwYXINClx0YWIgXHRhYiAo
cnY6IFZhcmlhdGUpIENkZiAoVkFSIHg6IEZ1bmN0aW9uKSwgTkVXLCBFTVBUWTsgKCogdW5uZWNl
c3NhcnkgKilccGFyDQpcdGFiIFx0YWIgLi4uXHBhcg0KXHRhYiBFTkQ7XHBhcg0KXHBhcg0Kd2l0
aFxwYXINClxwYXINClx0YWIgRnVuY3Rpb24gPSBQT0lOVEVSIFRPIEFCU1RSQUNUIFJFQ09SRFxw
YXINClx0YWIgXHRhYiAoZjogRnVuY3Rpb24pIEV2YWwgKHg6IFJFQUwpOiBSRUFMXHBhcg0KXHRh
YiBFTkQ7XHBhcg0KXHBhcg0KZGVmaW5lZCBzb21ld2hlcmUgZm9yIGdlbmVyYWwgdXNlLlxwYXIN
ClBsdXMsIEkgd291bGQgcHJvdmlkZSBhbiBpbmRlcGVuZGVudCBwcm9jZWR1cmU6XHBhcg0KXHBh
cg0KXHRhYiBQUk9DRURVUkUgQ2RmICh2OiBWYXJpYXRlKTogRnVuY3Rpb247XHBhcg0KXHBhcg0K
b3IgYSBub24tZXh0ZW5zaWJsZSBtZXRob2Q6XHBhcg0KXHBhcg0KXHRhYiBcdGFiIChydjogVmFy
aWF0ZSkgRGVmYXVsdENkZiAoKTogRnVuY3Rpb24sIE5FVztccGFyDQpccGFyDQpJdCB3b3VsZCBp
bmNvcnBvcmF0ZSBrbm93bGVkZ2UgYWJvdXQgc3BlY2lhbCBjYXNlcyBzdWNoIGFzIEV4cG9uZW50
aWFsLCBhcyB3ZWxsIGFzIHByb3ZpZGUgYSBkZWZhdWx0LlxwYXINClxwYXINClNlcGFyYXRpb24g
b2YgQ2RmIGFuZCBQZGYgZnJvbSBWYXJpYXRlIGlzIGFkdmFudGFnZW91cyBmb3IgcmVhc29ucyBv
ZiBmbGV4aWJpbGl0eSAoeW91IHdpbGwgYWdyZWUgaXQgaXMgaGFyZCB0byBwcmVkaWN0IGFsbCBw
b3NzaWJsZSB0eXBlcyBvZiBhcHBsaWNhdGlvbiBwcm9ibGVtcykuXHBhcg0KVGhlIGxhY2sgb2Yg
c3ltbWV0cnkgYmV0d2VlbiBDZGYgYW5kIFBkZiByZWZsZWN0cyB0aGVpciAodmVyeSkgZGlmZmVy
ZW50IHVzYWdlLlxwYXINClxwYXINCkEgc2lkZSByZW1hcms6IGluIGEgbGFyZ2UgY2xhc3Mgb2Yg
cHJvYmxlbXMgSSBkZWFsIHdpdGgsIFBkZidzIGFyZSBub3QgYXZhaWxhYmxlLCBzbyBJIHdvdWxk
IG1ha2UgVmFyaWF0ZS5QZGYgYW4gRU1QVFkgbWV0aG9kIHRvby5ccGFyDQpccGFyDQpUbyBzdW1t
YXJpemUsIHlvdXIgc3RhdGVtZW50IGFib3V0IGRlc2lyYWJpbGl0eSBvZiBFWFRFTlNJQkxFIG1l
dGhvZHMgZG9lcyBub3QsIGluIG15IHZpZXcsIHN0YW5kIHVwIHRvIHNjcnV0aW55LCBhbmQgaXMg
b25seSB2YWxpZCB3aXRoaW4gYSBzb21ld2hhdCBuYXJyb3cgYW5kIHNvbWV3aGF0IGluZmxleGli
bGUgaW1wbGVtZW50YXRpb24gc2NoZW1lIHlvdSBhZG9wdGVkLlxwYXINClxwYXINCkNoZWVyc1xw
YXINCkZ5b2RvclxwYXINClxwYXINClxwYXINCj4gPj4gIFNvIHdpdGggdGhpcyB0aGUgYXJndW1l
bnQgZm9yIEVYVEVOU0lCTEUgcHJvY2VkdXJlcyB2YW5pc2hlZCBhbmQgdGhleSBhcmVccGFyDQo+
ID4+ICBhIG1hdHRlciBvZiBwZXJzb25hbCBzdHlsZSBhcyB3ZXJlIEVYVEVOU0lCTEUgUkVDT1JE
cyBhbmQgRmpvZG9yIGlzIHJpZ2h0LFxwYXINCj4gPj4gIGJvdGggbWlnaHQgLSBvbiB0aGUgbGV2
ZWwgb2YgQ29tcG9uZW50IFBhc2NhbCBhdCBsZWFzdCAtIGJlIGJhbm5lZC5ccGFyDQo+XHBhcg0K
PiBJIHRoaW5rIHRoZXJlIGlzIGEgZmxhdyBpbiB0aGUgYWJvdmUgY29uY2x1c2lvbnMsIHJlc3Vs
dGluZyBmcm9tIGFuIHVuc3RhdGVkIGFzc3VtcHRpb24uXHBhcg0KPlxwYXINCj4gUGVvcGxlIGNv
bnNpZGVyIG9ubHkgd2hhdCBpcyBORUVERUQgZm9yIGNvcnJlY3QgZnVuY3Rpb24gKHVzdWFsbHkg
dXNpbmcgJ0luaXRpYWxpc2F0aW9uJyBhcyBhbiBleGFtcGxlLlxwYXINCj4gVGhlcmUgaXMgYWxz
byB0aGUgcXVlc3Rpb24gb2Ygd2hhdCBpcyBERVNJUkFCTEUgZm9yIGNvcnJlY3QgZnVuY3Rpb24u
XHBhcg0KPlxwYXINCj4gSSBnaXZlIGFuIGV4YW1wbGUgKHRha2VuIGZyb20gTGliUmFuZG9tLCBi
dXQgdGhlcmUgYXJlIG1hbnkgb3RoZXJzKS5ccGFyDQo+IFRoaXMgaW1wbGVtZW50cyBhbiBBQlNU
UkFDVCB0eXBlIG1lYW50IHRvIHJlcHJlc2VudCBhIG1hdGhlbWF0aWNhbCBvYmplY3QgY2FsbGVk
XHBhcg0KPiBhIFJhbmRvbSBWYXJpYXRlIChvciBSVikuXHBhcg0KPiBUaGVzZSBjb21lIGluIHZh
cmlvdXMgZmxhdm91cnMgd2l0aCBuYW1lcyBzdWNoIGFzICdOb3JtYWwnLCAnRXhwb25lbnRpYWwn
LFxwYXINCj4gYW5kIGluIG1pbGxpb25zIG9mIHVzZXIgc3BlY2lmaWMgZmxhdm91cnMuXHBhcg0K
PlxwYXINCj4gVGhleSBjYW4gYmUgKG1hdGhlbWF0aWNhbGx5KSBkZXNjcmliZWQgaW4gbWFueSBk
aWZmZXJlbnRccGFyDQo+IChidXQgZXNzZW50aWFsbHkgZXF1aXZhbGVudCkgd2F5cy5ccGFyDQo+
IFR3byBvZiB0aGUgbW9zdCBjb21tb24gKGFuZCB1c2VmdWwpIGFyZSBjYWxsZWQgdGhlICdQZGYn
IGFuZCB0aGUgJ0NkZicuXHBhcg0KPlxwYXINCj4gVGhlIEFCU1RSQUNUIGJhc2UgdHlwZSAnVmFy
aWF0ZScgdXNlcyB0aGUgKEFCU1RSQUNUKSAnUGRmJyB0byBjb21wdXRlIHRoZSAnQ2RmJy5ccGFy
DQo+IFdoZW4gVmFyaWF0ZSBpcyBleHRlbmRlZCB0bywgZm9yIGV4YW1wbGUsIEV4cG9uZW50aWFs
LFxwYXINCj4gaXQgaXMgTkVDRVNTQVJZIHRvIGltcGxlbWVudCB0aGUgQUJTVFJBQ1QgYmFzZSBw
cm9jZWR1cmUgUGRmLFxwYXINCj4gaXQgaXMgTk9UIE5FQ0VTU0FSWSB0byBpbXBsZW1lbnQgdGhl
IEVYVEVOU0lCTEUgcHJvY2VkdXJlIENkZi5ccGFyDQo+IFxwYXINCj4gSG93ZXZlciwgZm9yIHRo
ZSBFeHBvbmVudGlhbCBSViwgQ2RmIGhhcyBhIHZlcnkgc2ltcGxlIG1hdGhlbWF0aWNhbCBmb3Jt
IGFuZFxwYXINCj4gaXQgaXMgdmVyeSBlYXN5IGFuZCB2ZXJ5IGRlc2lyYWJsZSAodmFzdGx5IGZh
c3RlciwgbW9yZSBhY2N1cmF0ZSwgc2ltcGxlcilccGFyDQo+IHRvIHJlaW1wbGVtZW50IENkZiBh
cyB3ZWxsLlxwYXINCj5ccGFyDQo+IE9uIHRoZSBvdGhlciBoYW5kLCBmb3IgdXNlciBkZWZpbmVk
IFJWJ3MsIGl0IG1heSBiZSB2ZXJ5IGRpZmZpY3VsdCwgaWYgbm90IGltcG9zc2libGUsXHBhcg0K
PiB0byByZWltcGxlbWVudCBDZGYgZGlyZWN0bHksIGFuZCBkZXBlbmRpbmcgb24gdGhlIGFwcGxp
Y2F0aW9uXHBhcg0KPiB0aGVyZSBtYXkgYmUgbm8gZGVzaXJlIHRvIHVzZSB0aGUgQ2RmIG11Y2gg
YW55d2F5LFxwYXINCj4gc28gcnVuLXRpbWUgZWZmaWNpZW5jeSBpcyBzZWNvbmRhcnkgdG8gbWlu
aW1pc2luZyBjb2RpbmcgZWZmb3J0LlxwYXINCj5ccGFyDQo+IFRoZSBDb21wb25lbnQgUGFzY2Fs
IGF0dHJpYnV0ZSBFWFRFTlNJQkxFIHNpbXBseSBzdXBwb3J0cyB0aGlzICdvcHRpb25hbCcgcmVp
bXBsZW1lbnRhdGlvbjtccGFyDQo+IEkgZG9uJ3Qgc2VlIGFuIGVxdWFsbHkgc2ltcGxlIGFsdGVy
bmF0aXZlLlxwYXINClxwYXINClBvd2VyZWQgYnkgdGhlIEUtbWFpbCBQSU0gLSBJbmZvIFNlbGVj
dCAtIHd3dy5taWNsb2cuY29tXHBhcg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1ccGFyDQpccGFyDQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbWFpbGluZyBs
aXN0LCBzZW5kIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSB3b3JkICJ1bnN1YnNjcmliZSIgdG86
XHBhcg0KICAgYmxhY2tib3gtcmVxdWVzdEBvYmVyb24uY2hccGFyDQpccGFyDQpUbyBnZXQgYSBs
aXN0IG9mIHZhbGlkIGUtbWFpbCBjb21tYW5kcyBhbmQgaW5zdHJ1Y3Rpb25zIG9uIHRoZWlyIHVz
YWdlLCBzZW5kIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSB3b3JkICJoZWxwIiB0byB0aGUgYWJv
dmUgYWRkcmVzcy5ccGFyDQpccGFyDQpTZW5kIGFueSBwcm9ibGVtIHJlcG9ydHMgb3IgcXVlc3Rp
b25zIHJlbGF0ZWQgdG8gdGhpcyBlbWFpbCBsaXN0IHRvIHRoZSBsaXN0IG93bmVyIGF0XHBhcg0K
ICAgb3duZXItYmxhY2tib3hAb2Jlcm9uLmNoXHBhcg0KXHBhcg0KQ3VycmVudCBwb3N0aW5nIHBv
bGljeTpccGFyDQpccGFyDQphKSBUbyBwb3N0IHlvdSBzaG91bGQgdXNlIHRoZSBzYW1lIGFkZHJl
c3MgYnkgd2hpY2ggeW91IGFyZSBzdWJzY3JpYmVkIHRvIHRoZSBtYWlsaW5nIGxpc3QuIFRoYXQg
d2F5LCB0aGUgbGlzdCBzZXJ2ZXIgd2lsbCByZWNvZ25pemUgeW91IGFzIHN1YnNjcmliZXIgYW5k
IGZvcndhcmQgeW91ciBwb3N0aW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNyZWF0aW5nIGFueSBv
dmVyaGVhZC5ccGFyDQpccGFyDQpiKSBJZiwgZm9yIHNvbWUgcmVhc29uLCB5b3UgY2Fubm90IHBv
c3QgZnJvbSB0aGUgYWRkcmVzcywgYnkgd2hpY2ggeW91IGFyZSBzdWJzY3JpYmVkLCB5b3VyIG1l
c3NhZ2Ugd2lsbCBiZSBtb2RlcmF0ZWQgdG8gYXZvaWQgc3BhbS4gUGxlYXNlIHVuZGVyc3RhbmQg
dGhhdCBtb2RlcmF0aW9uIHdpbGwgb2Z0ZW4gY2F1c2Ugc29tZSBkZWxheSwgaW4gcGFydGljdWxh
ciBvdmVyIHdlZWtlbmRzIG9yIGhvbHlkYX19AB+BILF0URw

----boundary-LibPST-iamunique-649104225_-_---
Received on Sun Nov 28 2004 - 12:54:05 UTC

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