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.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: "Alejandro R. Mosteo" Newsgroups: comp.lang.ada Subject: References vs access types Date: Fri, 31 May 2019 17:44:34 +0200 Organization: A noiseless patient Spider Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 31 May 2019 15:44:34 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="fc33d48884b0449f44e8d0c3f90f68c1"; logging-data="1975"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/d5x//QqDDEiaibAEcVuP6" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Cancel-Lock: sha1:i3aS6VMm9pIWcbYkOgU7FAlMwFU= Content-Language: en-US X-Mozilla-News-Host: news://news.eternal-september.org:119 Xref: reader01.eternal-september.org comp.lang.ada:56421 Date: 2019-05-31T17:44:34+02:00 List-Id: Sorry if I asked something similar in the past. I have a foggy memory of having wanted to do so. I have also checked some old threads that tangentially touch my question but without direct explanation. So, part of the point of reference types is to be able to return an item "by reference" without being able to store the pointer: type Item; type Item_Access is access Item; type Reference (Ptr : access Item) is limited null record; function Get (...) return Reference; -- (1) In Gem #107 this is said as advantageous against, for example, function Get (...) return Item_Access; -- (2) because "access discriminants are unchangeable. The discriminant also cannot be copied to a variable [like Item_Access]" [1]. Now, without thinking much about it, while fighting old bugs, I have sometimes replaced a problematic Reference with function Get (...) return access Item; -- (3) And here comes the question: besides losing the ability to use aspects on the Reference type, or using it for some fancy refcounting, does (3) give the same safeties wrt to copying as (1)? Are there any other hidden traps in (3) (assuming the pointee thread-safety/lifetime is properly managed)? Or, put it another way, is (1) always preferable? Or may (3) suffice for simple uses? Thanks, Álex. [1] https://www.adacore.com/gems/gem-107-preventing-deallocation-for-reference-counted-types/