From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,2078dddcdcd8d83 X-Google-Attributes: gid103376,public From: bobduff@world.std.com (Robert A Duff) Subject: Re: Warning: Religious naming convention discussion :-) [was: assign help!!] Date: 1997/05/11 Message-ID: #1/1 X-Deja-AN: 241055255 References: <5kjvcv$evt@news.cis.nctu.edu.tw> <3373EAB5.73A0@sprintmail.com> <33755EF7.1A8F@erols.com> Organization: The World Public Access UNIX, Brookline, MA Newsgroups: comp.lang.ada Date: 1997-05-11T00:00:00+00:00 List-Id: In article , Robert Dewar wrote: >Bad suggestion. Access types are NOT pointers. They may be implemented using >pointers some of the time (but not all the time -- we often find people >using GNAT being surprised to find that access types are not always >represented using simple pointers in some cases, but of course there is >nothing in the language that suggests or requires that access types be >implemented using pointers). I disagree. I think "pointer" means "thing that can point". I don't think it's a low-level machine-oriented concept at all. I use the term "address" or "machine address" for the low-level notion. I would amend your last sentence to say, "... there is nothing in the language that suggests or requires that access types be implemented as machine addresses." Note that Pascal calls them "pointers", not "access types", and there is nothing in Pascal that suggests or requires pointers to be implemented as machine addresses. This is even true of C, and there are in fact implementations of C that implement "foo*" as something other than an address -- for the purpose of doing bounds checking and whatnot, which is very expensive in C, but nonetheless useful for debugging. If I have a private type whose full type is some sort of index into a table, then I'm perfectly happy to call that a "pointer", even though it's not implemented as an address, and it's not even implemented as an access type. People talk about Lisp/Smalltalk/etc as languages in which "everything's a pointer", which is an informal phrase intended to mean that all the variables and whatnot have reference semantics -- not that they're all implemented as machine addresses (which they might be, but that's irrelevant). So, no, I don't think that "pointer" universally means "address". It does only in the minds of some people who have only been exposed to languages that allow or encourage address arithmetic on something called "pointers". If people with that background learn a higher-level language, they simply have to learn that access types, or reference types, or pointer types, simply aren't addresses. Analogy: You might say that some programmers assume that "procedure calls" involve a call instruction at the machine level. Therefore, we shouldn't call them "procedure calls" in Ada, because compilers might do inlining (either in response to pragma Inline, or automatically), and using the term "call" therefore confuses. >Suffixing access types with _Pointer emphasizes the confusion, and seems >inappropriate to me. It is analogous to saying that all integer types >should be suffixed with > > _Twos_Complement_Bit_String > >or somesuch. Names should be chosen to emphasize the meaning at an >appropriate level of abstraction, not the low-level implementation >dependent representation. I don't buy the analogy here. Two's complement bit-string *is* a low-level machine-oriented notion. Address is. But Pointer is not, at least for a substantial portion of the software industry. - Bob