RE: Procedure types

From: Fyodor Tkachov <"Fyodor>
Date: Fri, 19 Nov 2004 09:50:39 +0300

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

Good morning,

The safety argument (see my previous message) is serious enough that Robert's list of pro-procedure variables arguments deserves to be reconsidered.
There is certainly value in them, however,
upon scrutiny, some of them start to appear a little less convincing.

> 1 - Many existing functions (eg Math.Cos) are procedures. If I want to
> numerically integrate it in an o-o integrator (like mine is in fact!)
> I would need to create a wrapper object.

Not necessarily: wrappers for all the standard functions (inlcuding ones Robert so usefully identified, like Cube) could be exported from a standard module Math (the old Math could become HostMath).
The abstract type Function (or MonadicFn...) would be exported too, of course.

> 3 - The extra capabilities of objects seem unnecessary for Cos

This would be irrelevant if Math.cos is a pre-provided standard object.

> 2 - People with a scientific background grew up with FORTRAN, and
> are familiar with this type of declaration.

Teaching old dogs new tricks... How true. <sigh>

Yet f: Math.Function; is not much harder

> 4 - Consider the following example (taken from LibReals):
>
> PROCEDURE Cube* (x : REAL) : REAL;
> BEGIN
> RETURN x * x * x
> END Cube;
>
> Which can be called by R.Cube (x) - I use IMPORT R := LibReals;
>
> The o-o approach requires:
>
> TYPE
> MonadicFn* = POINTER TO ABSTRACT RECORD END;
>
> Cube* = POINTER TO RECORD (MonadicFn) END;
>
> PROCEDURE (fn : MonadicFn) Eval* (x : REAL) : REAL, NEW, ABSTRACT;
>
> PROCEDURE (fn : Cube) Eval* (x : REAL) : REAL;
> BEGIN
> RETURN x * x * x
> END Eval;

But first, MonadicFn would already be available as Math.Function,
and from the old Math and Robert's Lib we know the list of simple functions that should be provided in the new Math, so perhaps 99% of functions actually used would need no declarations.

> 5 - Efficiency. Methods require an extra level of indirection. Inside
> a big engineering sum this just seems like unnecessary overhead.

Just one extra memory access. With a modern L2 cache -- is it a problem? Hardly.
Do simple loop bodies where this overhead would be critical occur often?
Not in my experience. And in the rare cases when they do, a call to HostMath (with an import of SYSTEM, if necessary) would be adequate.

> 6 - Brevity. .. The .Eval in cube.Eval
> just seems to visually clutter maths expressions.

M.cube.Eval(x) vs L.Cube(x).
The difference is really not that great. Although visible.
In my numeric problems, this kind of expressions are a fraction of the actual code.

> 7 - If I select R.Cube, right click, I get immediate access to the interface,
> source, and Docu. This is very nice. It does not work if I select cube.Eval.

But it does, if one selects M.cube.Eval.

> I can't easily work out where cube.Eval is defined.

One can, for M.cube.Eval.

On balance,
if one is concerned with the safety argument against procedure variables (F1, What's New),
then relegating them to SYSTEM-level features and providing something like a pair of Math/HostMath modules as described above, appears to be a reasonable compromise.

> This does not seek to be a balanced email; I could also write a pro-
> objects list. But one advantage I can't resist mentioning is that
> I can't save procedure variables to disc, whereas if MonadicFn had
> been declared as a Store I could Externalise cube. Question: does
> creating a Store extension have a significant overhead inside a
> big loop?

As far as I understand, any method call involves just one extra memory jump, irrespective of the length of inheritance chain (compiler creates a type descriptor for each type, with an array of pointers to method entry points, and for a non-extended method, the pointer is simply copied from the parent type descriptor to the child's one).

Cheers
Fyodor

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

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIEdvb2QgbW9ybmluZyxccGFyDQpccGFyDQpUaGUg
c2FmZXR5IGFyZ3VtZW50IChzZWUgbXkgcHJldmlvdXMgbWVzc2FnZSkgaXMgc2VyaW91cyBlbm91
Z2ggdGhhdCBSb2JlcnQncyBsaXN0IG9mIHByby1wcm9jZWR1cmUgdmFyaWFibGVzIGFyZ3VtZW50
cyBkZXNlcnZlcyB0byBiZSByZWNvbnNpZGVyZWQuXHBhcg0KVGhlcmUgaXMgY2VydGFpbmx5IHZh
bHVlIGluIHRoZW0sIGhvd2V2ZXIsXHBhcg0KdXBvbiBzY3J1dGlueSwgc29tZSBvZiB0aGVtIHN0
YXJ0IHRvIGFwcGVhciBhIGxpdHRsZSBsZXNzIGNvbnZpbmNpbmcuXHBhcg0KXHBhcg0KPiAxIC0g
TWFueSBleGlzdGluZyBmdW5jdGlvbnMgKGVnIE1hdGguQ29zKSBhcmUgcHJvY2VkdXJlcy4gSWYg
SSB3YW50IHRvXHBhcg0KPiBudW1lcmljYWxseSBpbnRlZ3JhdGUgaXQgaW4gYW4gby1vIGludGVn
cmF0b3IgKGxpa2UgbWluZSBpcyBpbiBmYWN0ISlccGFyDQo+IEkgd291bGQgbmVlZCB0byBjcmVh
dGUgYSB3cmFwcGVyIG9iamVjdC5ccGFyDQpccGFyDQpOb3QgbmVjZXNzYXJpbHk6IHdyYXBwZXJz
IGZvciBhbGwgdGhlIHN0YW5kYXJkIGZ1bmN0aW9ucyAoaW5sY3VkaW5nIG9uZXMgUm9iZXJ0IHNv
IHVzZWZ1bGx5IGlkZW50aWZpZWQsIGxpa2UgQ3ViZSkgY291bGQgYmUgZXhwb3J0ZWQgZnJvbSBh
IHN0YW5kYXJkIG1vZHVsZSBNYXRoICh0aGUgb2xkIE1hdGggY291bGQgYmVjb21lIEhvc3RNYXRo
KS5ccGFyDQpUaGUgYWJzdHJhY3QgdHlwZSBGdW5jdGlvbiAob3IgTW9uYWRpY0ZuLi4uKSB3b3Vs
ZCBiZSBleHBvcnRlZCB0b28sIG9mIGNvdXJzZS5ccGFyDQpccGFyDQo+IDMgLSAgVGhlIGV4dHJh
IGNhcGFiaWxpdGllcyBvZiBvYmplY3RzIHNlZW0gdW5uZWNlc3NhcnkgZm9yIENvc1xwYXINClxw
YXINClRoaXMgd291bGQgYmUgaXJyZWxldmFudCBpZiBNYXRoLmNvcyBpcyBhIHByZS1wcm92aWRl
ZCBzdGFuZGFyZCBvYmplY3QuXHBhcg0KXHBhcg0KPiAyIC0gUGVvcGxlIHdpdGggYSBzY2llbnRp
ZmljIGJhY2tncm91bmQgZ3JldyB1cCB3aXRoIEZPUlRSQU4sIGFuZFxwYXINCj4gYXJlIGZhbWls
aWFyIHdpdGggdGhpcyB0eXBlIG9mIGRlY2xhcmF0aW9uLlxwYXINClxwYXINClRlYWNoaW5nIG9s
ZCBkb2dzIG5ldyB0cmlja3MuLi4gSG93IHRydWUuIDxzaWdoPlxwYXINClxwYXINCllldCBmOiBN
YXRoLkZ1bmN0aW9uOyBpcyBub3QgbXVjaCBoYXJkZXJccGFyDQpccGFyDQo+IDQgLSBDb25zaWRl
ciB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHRha2VuIGZyb20gTGliUmVhbHMpOlxwYXINCj5ccGFy
DQo+IFBST0NFRFVSRSBDdWJlKiAoeCA6IFJFQUwpIDogUkVBTDtccGFyDQo+ICAgQkVHSU5ccGFy
DQo+ICAgICBSRVRVUk4gIHggKiB4ICogeFxwYXINCj4gICBFTkQgIEN1YmU7XHBhcg0KPlxwYXIN
Cj4gV2hpY2ggY2FuIGJlIGNhbGxlZCBieSBSLkN1YmUgKHgpICAgLSAgSSB1c2UgSU1QT1JUIFIg
Oj0gTGliUmVhbHM7XHBhcg0KPlxwYXINCj4gVGhlIG8tbyBhcHByb2FjaCByZXF1aXJlczpccGFy
DQo+XHBhcg0KPiBUWVBFXHBhcg0KPiAgIE1vbmFkaWNGbiogPSBQT0lOVEVSIFRPIEFCU1RSQUNU
IFJFQ09SRCBFTkQ7XHBhcg0KPlxwYXINCj4gICBDdWJlKiAgICAgID0gUE9JTlRFUiBUTyBSRUNP
UkQgKE1vbmFkaWNGbikgRU5EO1xwYXINCj5ccGFyDQo+IFBST0NFRFVSRSAoZm4gOiBNb25hZGlj
Rm4pIEV2YWwqICh4IDogUkVBTCkgOiBSRUFMLCBORVcsIEFCU1RSQUNUO1xwYXINCj5ccGFyDQo+
IFBST0NFRFVSRSAgKGZuIDogQ3ViZSkgRXZhbCogKHggOiBSRUFMKSA6IFJFQUw7XHBhcg0KPiAg
IEJFR0lOXHBhcg0KPiAgICAgUkVUVVJOICB4ICogeCAqIHhccGFyDQo+ICAgRU5EICBFdmFsO1xw
YXINClxwYXINCkJ1dCBmaXJzdCwgTW9uYWRpY0ZuIHdvdWxkIGFscmVhZHkgYmUgYXZhaWxhYmxl
IGFzIE1hdGguRnVuY3Rpb24sXHBhcg0KYW5kIGZyb20gdGhlIG9sZCBNYXRoIGFuZCBSb2JlcnQn
cyBMaWIgd2Uga25vdyB0aGUgbGlzdCBvZiBzaW1wbGUgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJl
IHByb3ZpZGVkIGluIHRoZSBuZXcgTWF0aCwgc28gcGVyaGFwcyA5OSUgb2YgZnVuY3Rpb25zIGFj
dHVhbGx5IHVzZWQgd291bGQgbmVlZCBubyBkZWNsYXJhdGlvbnMuXHBhcg0KXHBhcg0KPiA1IC0g
RWZmaWNpZW5jeS4gTWV0aG9kcyByZXF1aXJlIGFuIGV4dHJhIGxldmVsIG9mIGluZGlyZWN0aW9u
LiBJbnNpZGVccGFyDQo+IGEgYmlnIGVuZ2luZWVyaW5nIHN1bSB0aGlzIGp1c3Qgc2VlbXMgbGlr
ZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC5ccGFyDQpccGFyDQpKdXN0IG9uZSBleHRyYSBtZW1vcnkg
YWNjZXNzLiBXaXRoIGEgbW9kZXJuIEwyIGNhY2hlIC0tIGlzIGl0IGEgcHJvYmxlbT8gSGFyZGx5
LlxwYXINCkRvIHNpbXBsZSBsb29wIGJvZGllcyB3aGVyZSB0aGlzIG92ZXJoZWFkIHdvdWxkIGJl
IGNyaXRpY2FsIG9jY3VyIG9mdGVuP1xwYXINCk5vdCBpbiBteSBleHBlcmllbmNlLiBBbmQgaW4g
dGhlIHJhcmUgY2FzZXMgd2hlbiB0aGV5IGRvLCBhIGNhbGwgdG8gSG9zdE1hdGggKHdpdGggYW4g
aW1wb3J0IG9mIFNZU1RFTSwgaWYgbmVjZXNzYXJ5KSB3b3VsZCBiZSBhZGVxdWF0ZS5ccGFyDQpc
cGFyDQo+IDYgLSBCcmV2aXR5LiAuLiBUaGUgLkV2YWwgaW4gY3ViZS5FdmFsXHBhcg0KPiBqdXN0
IHNlZW1zIHRvIHZpc3VhbGx5IGNsdXR0ZXIgbWF0aHMgZXhwcmVzc2lvbnMuXHBhcg0KXHBhcg0K
TS5jdWJlLkV2YWwoeCkgIHZzICBMLkN1YmUoeCkuXHBhcg0KVGhlIGRpZmZlcmVuY2UgaXMgcmVh
bGx5IG5vdCB0aGF0IGdyZWF0LiBBbHRob3VnaCB2aXNpYmxlLlxwYXINCkluIG15IG51bWVyaWMg
cHJvYmxlbXMsIHRoaXMga2luZCBvZiBleHByZXNzaW9ucyBhcmUgYSBmcmFjdGlvbiBvZiB0aGUg
YWN0dWFsIGNvZGUuXHBhcg0KXHBhcg0KPiA3IC0gSWYgSSBzZWxlY3QgUi5DdWJlLCByaWdodCBj
bGljaywgSSBnZXQgaW1tZWRpYXRlIGFjY2VzcyB0byB0aGUgaW50ZXJmYWNlLFxwYXINCj4gc291
cmNlLCBhbmQgRG9jdS4gVGhpcyBpcyB2ZXJ5IG5pY2UuIEl0IGRvZXMgbm90IHdvcmsgaWYgSSBz
ZWxlY3QgY3ViZS5FdmFsLlxwYXINClxwYXINCkJ1dCBpdCBkb2VzLCBpZiBvbmUgc2VsZWN0cyBN
LmN1YmUuRXZhbC5ccGFyDQpccGFyDQo+IEkgY2FuJ3QgZWFzaWx5IHdvcmsgb3V0IHdoZXJlIGN1
YmUuRXZhbCBpcyBkZWZpbmVkLlxwYXINClxwYXINCk9uZSBjYW4sIGZvciBNLmN1YmUuRXZhbC5c
cGFyDQpccGFyDQpPbiBiYWxhbmNlLFxwYXINCmlmIG9uZSBpcyBjb25jZXJuZWQgd2l0aCB0aGUg
c2FmZXR5IGFyZ3VtZW50IGFnYWluc3QgcHJvY2VkdXJlIHZhcmlhYmxlcyAoRjEsIFdoYXQncyBO
ZXcpLFxwYXINCnRoZW4gcmVsZWdhdGluZyB0aGVtIHRvIFNZU1RFTS1sZXZlbCBmZWF0dXJlcyBh
bmQgcHJvdmlkaW5nIHNvbWV0aGluZyBsaWtlIGEgcGFpciBvZiBNYXRoL0hvc3RNYXRoIG1vZHVs
ZXMgYXMgZGVzY3JpYmVkIGFib3ZlLCBhcHBlYXJzIHRvIGJlIGEgcmVhc29uYWJsZSBjb21wcm9t
aXNlLlxwYXINClxwYXINCj4gVGhpcyBkb2VzIG5vdCBzZWVrIHRvIGJlIGEgYmFsYW5jZWQgZW1h
aWw7IEkgY291bGQgYWxzbyB3cml0ZSBhIHByby1ccGFyDQo+IG9iamVjdHMgbGlzdC4gQnV0IG9u
ZSBhZHZhbnRhZ2UgSSBjYW4ndCByZXNpc3QgbWVudGlvbmluZyBpcyB0aGF0XHBhcg0KPiBJIGNh
bid0IHNhdmUgcHJvY2VkdXJlIHZhcmlhYmxlcyB0byBkaXNjLCB3aGVyZWFzIGlmIE1vbmFkaWNG
biBoYWRccGFyDQo+IGJlZW4gZGVjbGFyZWQgYXMgYSBTdG9yZSBJIGNvdWxkIEV4dGVybmFsaXNl
IGN1YmUuIFF1ZXN0aW9uOiBkb2VzXHBhcg0KPiBjcmVhdGluZyBhIFN0b3JlIGV4dGVuc2lvbiBo
YXZlIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgaW5zaWRlIGFccGFyDQo+IGJpZyBsb29wP1xwYXIN
ClxwYXINCkFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGFueSBtZXRob2QgY2FsbCBpbnZvbHZlcyBq
dXN0IG9uZSBleHRyYSBtZW1vcnkganVtcCwgaXJyZXNwZWN0aXZlIG9mIHRoZSBsZW5ndGggb2Yg
aW5oZXJpdGFuY2UgY2hhaW4gKGNvbXBpbGVyIGNyZWF0ZXMgYSB0eXBlIGRlc2NyaXB0b3IgZm9y
IGVhY2ggdHlwZSwgd2l0aCBhbiBhcnJheSBvZiBwb2ludGVycyB0byBtZXRob2QgZW50cnkgcG9p
bnRzLCBhbmQgZm9yIGEgbm9uLWV4dGVuZGVkIG1ldGhvZCwgdGhlIHBvaW50ZXIgaXMgc2ltcGx5
IGNvcGllZCBmcm9tIHRoZSBwYXJlbnQgdHlwZSBkZXNjcmlwdG9yIHRvIHRoZSBjaGlsZCdzIG9u
ZSkuXHBhcg0KXHBhcg0KQ2hlZXJzXHBhcg0KRnlvZG9yXHBhcg0KXHBhcg0KUG93ZXJlZCBieSB0
aGUgRS1tYWlsIFBJTSAtIEluZm8gU2VsZWN0IC0gd3d3Lm1pY2xvZy5jb21ccGFyDQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxwYXINClxwYXINClRvIHVuc3Vi
c2NyaWJlIGZyb20gdGhpcyBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIGNvbnRhaW5pbmcg
dGhlIHdvcmQgInVuc3Vic2NyaWJlIiB0bzpccGFyDQogICBibGFja2JveC1yZXF1ZXN0QG9iZXJv
bi5jaFxwYXINClxwYXINClRvIGdldCBhIGxpc3Qgb2YgdmFsaWQgZS1tYWlsIGNvbW1hbmRzIGFu
ZCBpbnN0cnVjdGlvbnMgb24gdGhlaXIgdXNhZ2UsIHNlbmQgYSBtZXNzYWdlIGNvbnRhaW5pbmcg
dGhlIHdvcmQgImhlbHAiIHRvIHRoZSBhYm92ZSBhZGRyZXNzLlxwYXINClxwYXINClNlbmQgYW55
IHByb2JsZW0gcmVwb3J0cyBvciBxdWVzdGlvbnMgcmVsYXRlZCB0byB0aGlzIGVtYWlsIGxpc3Qg
dG8gdGhlIGxpc3Qgb3duZXIgYXRccGFyDQogICBvd25lci1ibGFja2JveEBvYmVyb24uY2hccGFy
DQpccGFyDQpDdXJyZW50IHBvc3RpbmcgcG9saWN5OlxwYXINClxwYXINCmEpIFRvIHBvc3QgeW91
IHNob3VsZCB1c2UgdGhlIHNhbWUgYWRkcmVzcyBieSB3aGljaCB5b3UgYXJlIHN1YnNjcmliZWQg
dG8gdGhlIG1haWxpbmcgbGlzdC4gVGhhdCB3YXksIHRoZSBsaXN0IHNlcnZlciB3aWxsIHJlY29n
bml6ZSB5b3UgYXMgc3Vic2NyaWJlciBhbmQgZm9yd2FyZCB5b3VyIHBvc3RpbmcgaW1tZWRpYXRl
bHksIHdpdGhvdXQgY3JlYXRpbmcgYW55IG92ZXJoZWFkLlxwYXINClxwYXINCmIpIElmLCBmb3Ig
c29tZSByZWFzb24sIHlvdSBjYW5ub3QgcG9zdCBmcm9tIHRoZSBhZGRyZXNzLCBieSB3aGljaCB5
b3UgYXJlIHN1YnNjcmliZWQsIHlvdXIgbWVzc2FnZSB3aWxsIGJlIG1vZGVyYXRlZCB0byBhdm9p
ZCBzcGFtLiBQbGVhc2UgdW5kZXJzdGFuZCB0aGF0IG1vZGVyYXRpb24gd2lsbCBvZnRlbiBjYXVz
ZSBzb21lIGRlbGF5LCBpbiBwYXJ0aWN1bGFyIG92ZXIgd2Vla2VuZHMgb3IgaG9seWRheX19ANAH
IXwiPg=


----boundary-LibPST-iamunique-167405442_-_---
Received on Fri Nov 19 2004 - 07:50:39 UTC

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