- Problem with pointer semantics

From: [at]} <Rex>
Date: Tue, 20 Jun 2006 01:48:05 -0500

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

        Thanks, Marc. I guess naming conventions (e.g., Hungarian notation)
are indeed the state of the art. Since compilers are no help here, it
forces the user to keep careful track of whether an array is implemented as
a pointer or a static variable. It also occurs to me that compilers could
easily help to keep track of this.

        Gérard and Wojtek, I understand perfectly why my example gives
unexpected results. That's why I wrote it. Identical-appearing statements
can give you very different results, depending on whether an array is static
or dynamic. I just realized it gets worse: the results also depend on state.

        Yes, the type declaration will help you if you don't make a mistake.
Compilers are supposed to be good at catching that kind of mistake, but in
this case they don't. If it's not obvious by now, consider the following.

VAR a, b: POINTER TO ARRAY OF INTEGER;

PROCEDURE DoSomething;
BEGIN
b[1] := 1;
IF something THEN
        b := a END:
b[1] := 1;
END DoSomething;

In general, the results of b[1] := 1 cannot be determined at compile time.
We don't even know whether the other b[1] := 1 statement does the same thing!

        Now if you happen to have another procedure:

PROCEDURE DoSomethingElse;
BEGIN b := .... END DoSomethingElse;

you're cooked. The results are likely to be unpredictable, and the
nightmarish side effects may extend to variable a -- and all because maybe
you forgot whether a and b are static or dynamic.

        After thinking about it some more, if I were designing a language, I
think I might forbid assigning a pointer except with a predefined procedure.
For example:

VAR a, b: POINTER TO ARRAY OF INTEGER;
...
b := a; (* forbidden *)
ASSIGN (b, a); (* allowed *)

That is certainly one way of alerting you to a dynamic array and keeping you
from making a pointer assignment by mistake. I haven't thought much about
it, but I don't see any obvious problem with it.

        Frankly, I don't much like one variable inadvertently being aliased
to another. Wouldn't it be nice if we didn't have to remember whether an
array is implemented as a pointer or a static variable? Too bad compilers
don't keep track of this sort of thing.

        I was hoping someone had some sort of magic. Since they don't, I'm
sticking to old-fashioned Hungarian notation.

Rex Couture

--- BlackBox
--- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy



----boundary-LibPST-iamunique-1135550597_-_-
Content-type: application/rtf

Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzc1xmY2hhcnNldDAgQXJpYWw7fQ0Ke1xmMVxmbW9kZXJuIENvdXJpZXIgTmV3O30NCntcZjJc
Zm5pbFxmY2hhcnNldDIgU3ltYm9sO30NCntcZjNcZm1vZGVyblxmY2hhcnNldDAgQ291cmllciBO
ZXc7fX0NCntcY29sb3J0YmxccmVkMFxncmVlbjBcYmx1ZTA7XHJlZDBcZ3JlZW4wXGJsdWUyNTU7
fQ0KXHVjMVxwYXJkXHBsYWluXGRlZnRhYjM2MCBcZjBcZnMyMCAgICAgICAgIFRoYW5rcywgTWFy
Yy4gIEkgZ3Vlc3MgbmFtaW5nIGNvbnZlbnRpb25zIChlLmcuLCBIdW5nYXJpYW4gbm90YXRpb24p
XHBhcg0KYXJlIGluZGVlZCB0aGUgc3RhdGUgb2YgdGhlIGFydC4gIFNpbmNlIGNvbXBpbGVycyBh
cmUgbm8gaGVscCBoZXJlLCBpdFxwYXINCmZvcmNlcyB0aGUgdXNlciB0byBrZWVwIGNhcmVmdWwg
dHJhY2sgb2Ygd2hldGhlciBhbiBhcnJheSBpcyBpbXBsZW1lbnRlZCBhc1xwYXINCmEgcG9pbnRl
ciBvciBhIHN0YXRpYyB2YXJpYWJsZS4gIEl0IGFsc28gb2NjdXJzIHRvIG1lIHRoYXQgY29tcGls
ZXJzIGNvdWxkXHBhcg0KZWFzaWx5IGhlbHAgdG8ga2VlcCB0cmFjayBvZiB0aGlzLlxwYXINClxw
YXINCiAgICAgICAgR1wnZTlyYXJkIGFuZCBXb2p0ZWssIEkgdW5kZXJzdGFuZCBwZXJmZWN0bHkg
d2h5IG15IGV4YW1wbGUgZ2l2ZXNccGFyDQp1bmV4cGVjdGVkIHJlc3VsdHMuICBUaGF0J3Mgd2h5
IEkgd3JvdGUgaXQuICBJZGVudGljYWwtYXBwZWFyaW5nIHN0YXRlbWVudHNccGFyDQpjYW4gZ2l2
ZSB5b3UgdmVyeSBkaWZmZXJlbnQgcmVzdWx0cywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYW4gYXJy
YXkgaXMgc3RhdGljXHBhcg0Kb3IgZHluYW1pYy4gIEkganVzdCByZWFsaXplZCBpdCBnZXRzIHdv
cnNlOiAgdGhlIHJlc3VsdHMgYWxzbyBkZXBlbmQgb24gc3RhdGUuXHBhcg0KXHBhcg0KICAgICAg
ICBZZXMsIHRoZSB0eXBlIGRlY2xhcmF0aW9uIHdpbGwgaGVscCB5b3UgaWYgeW91IGRvbid0IG1h
a2UgYSBtaXN0YWtlLlxwYXINCkNvbXBpbGVycyBhcmUgc3VwcG9zZWQgdG8gYmUgZ29vZCBhdCBj
YXRjaGluZyB0aGF0IGtpbmQgb2YgbWlzdGFrZSwgYnV0IGluXHBhcg0KdGhpcyBjYXNlIHRoZXkg
ZG9uJ3QuICBJZiBpdCdzIG5vdCBvYnZpb3VzIGJ5IG5vdywgY29uc2lkZXIgdGhlIGZvbGxvd2lu
Zy5ccGFyDQpccGFyDQpWQVIgYSwgYjogIFBPSU5URVIgVE8gQVJSQVkgT0YgSU5URUdFUjtccGFy
DQpccGFyDQpQUk9DRURVUkUgRG9Tb21ldGhpbmc7XHBhcg0KQkVHSU5ccGFyDQpiWzFdIDo9IDE7
XHBhcg0KSUYgc29tZXRoaW5nIFRIRU5ccGFyDQogICAgICAgIGIgOj0gYSBFTkQ6XHBhcg0KYlsx
XSA6PSAxO1xwYXINCkVORCBEb1NvbWV0aGluZztccGFyDQpccGFyDQpJbiBnZW5lcmFsLCB0aGUg
cmVzdWx0cyBvZiBiWzFdIDo9IDEgY2Fubm90IGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1l
LlxwYXINCldlIGRvbid0IGV2ZW4ga25vdyB3aGV0aGVyIHRoZSBvdGhlciBiWzFdIDo9IDEgc3Rh
dGVtZW50IGRvZXMgdGhlIHNhbWUgdGhpbmchXHBhcg0KXHBhcg0KICAgICAgICBOb3cgaWYgeW91
IGhhcHBlbiB0byBoYXZlIGFub3RoZXIgcHJvY2VkdXJlOlxwYXINClxwYXINClBST0NFRFVSRSBE
b1NvbWV0aGluZ0Vsc2U7XHBhcg0KQkVHSU4gYiA6PSAuLi4uICBFTkQgRG9Tb21ldGhpbmdFbHNl
O1xwYXINClxwYXINCnlvdSdyZSBjb29rZWQuICBUaGUgcmVzdWx0cyBhcmUgbGlrZWx5IHRvIGJl
IHVucHJlZGljdGFibGUsIGFuZCB0aGVccGFyDQpuaWdodG1hcmlzaCBzaWRlIGVmZmVjdHMgbWF5
IGV4dGVuZCB0byB2YXJpYWJsZSBhIC0tIGFuZCBhbGwgYmVjYXVzZSBtYXliZVxwYXINCnlvdSBm
b3Jnb3Qgd2hldGhlciBhIGFuZCBiIGFyZSBzdGF0aWMgb3IgZHluYW1pYy5ccGFyDQpccGFyDQog
ICAgICAgIEFmdGVyIHRoaW5raW5nIGFib3V0IGl0IHNvbWUgbW9yZSwgaWYgSSB3ZXJlIGRlc2ln
bmluZyBhIGxhbmd1YWdlLCBJXHBhcg0KdGhpbmsgSSBtaWdodCBmb3JiaWQgYXNzaWduaW5nIGEg
cG9pbnRlciBleGNlcHQgd2l0aCBhIHByZWRlZmluZWQgcHJvY2VkdXJlLlxwYXINCkZvciBleGFt
cGxlOlxwYXINClxwYXINClZBUiBhLCBiOiAgUE9JTlRFUiBUTyBBUlJBWSBPRiBJTlRFR0VSO1xw
YXINCi4uLlxwYXINCmIgOj0gYTsgKCogZm9yYmlkZGVuICopXHBhcg0KQVNTSUdOIChiLCBhKTsg
KCogYWxsb3dlZCAqKVxwYXINClxwYXINClRoYXQgaXMgY2VydGFpbmx5IG9uZSB3YXkgb2YgYWxl
cnRpbmcgeW91IHRvIGEgZHluYW1pYyBhcnJheSBhbmQga2VlcGluZyB5b3VccGFyDQpmcm9tIG1h
a2luZyBhIHBvaW50ZXIgYXNzaWdubWVudCBieSBtaXN0YWtlLiAgSSBoYXZlbid0IHRob3VnaHQg
bXVjaCBhYm91dFxwYXINCml0LCBidXQgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcHJvYmxlbSB3
aXRoIGl0LlxwYXINClxwYXINCiAgICAgICAgRnJhbmtseSwgSSBkb24ndCBtdWNoIGxpa2Ugb25l
IHZhcmlhYmxlIGluYWR2ZXJ0ZW50bHkgYmVpbmcgYWxpYXNlZFxwYXINCnRvIGFub3RoZXIuICBX
b3VsZG4ndCBpdCBiZSBuaWNlIGlmIHdlIGRpZG4ndCBoYXZlIHRvIHJlbWVtYmVyIHdoZXRoZXIg
YW5ccGFyDQphcnJheSBpcyBpbXBsZW1lbnRlZCBhcyBhIHBvaW50ZXIgb3IgYSBzdGF0aWMgdmFy
aWFibGU/ICBUb28gYmFkIGNvbXBpbGVyc1xwYXINCmRvbid0IGtlZXAgdHJhY2sgb2YgdGhpcyBz
b3J0IG9mIHRoaW5nLlxwYXINClxwYXINCiAgICAgICAgSSB3YXMgaG9waW5nIHNvbWVvbmUgaGFk
IHNvbWUgc29ydCBvZiBtYWdpYy4gIFNpbmNlIHRoZXkgZG9uJ3QsIEknbVxwYXINCnN0aWNraW5n
IHRvIG9sZC1mYXNoaW9uZWQgSHVuZ2FyaWFuIG5vdGF0aW9uLlxwYXINClxwYXINClJleCBDb3V0
dXJlXHBhcg0KXHBhcg0KLS0tIEJsYWNrQm94XHBhcg0KLS0tIHNlbmQgc3ViamVjdCBIRUxQIG9y
IFVOU1VCU0NSSUJFIHRvIGJsYWNrYm94QG9iZXJvbi5jaFxwYXINClxwYXINCn0

----boundary-LibPST-iamunique-1135550597_-_---
Received on Tue Jun 20 2006 - 08:48:05 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:27:50 UTC