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!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Strings with discriminated records Date: Tue, 29 May 2018 09:49:18 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <55ce14eb-6b83-4ea0-a550-f9e1410d0b06@googlegroups.com> <51dfb377-1b3e-45ca-a211-158101efe557@googlegroups.com> <090d6eb2-9f52-4471-a22e-ce1bdf457188@googlegroups.com> <90f0f8da-dadd-4341-bc0f-dbda94b0516c@googlegroups.com> <137bcc76-2489-4557-979b-5efeecbd9289@googlegroups.com> NNTP-Posting-Host: MyFhHs417jM9AgzRpXn7yg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.8.3 Xref: reader02.eternal-september.org comp.lang.ada:52758 Date: 2018-05-29T09:49:18+02:00 List-Id: On 2018-05-29 12:27 AM, Mehdi Saada wrote: > I see, and I would expect a constant declaration M: constant nights.message := nights.create("hello world); > to have exactly the same implementation. I am right ? Yes. Renaming temporary objects is probably a language design bug. But renaming is broken in so many ways that one more, one less does not make much difference. BTW, If I would allow renaming a function result, then that would have lazy evaluation/closure semantics. > After all you do or not do exactly the same, as far as I understood. There are subtle and not so subtle differences, like sliding or not array indices. It is best to use rename only where it was originally intended, e.g. 1. for renaming long named objects/packages: X : T renames A.B.C.D.E.X; 2. for renaming view conversions: X : T'Class renames T'Class (Y); 3. for renaming array/list elements and record members: for I in A'Range loop declare Current : T renames A (I); begin ... 4. for resolving name clashes: type T is new Integer; function Integer_Add (Left, Right : Integer) return Integer renames "+"; -- Going to override, so keep the old function "+" (Left, Right : Integer) return Integer renames "+"; -- The new one -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de