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!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Generic private type declaration Date: Tue, 29 Nov 2016 12:42:19 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <877f7qy6hf.fsf@adaheads.sparre-andersen.dk> NNTP-Posting-Host: vZYCW951TbFitc4GdEwQJg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:32509 Date: 2016-11-29T12:42:19+01:00 List-Id: On 28/11/2016 22:32, Randy Brukardt wrote: > So, yes, Dmitry, the language could strengthen contracts this > way -- if one didn't care about usability [or compatibility]). Rather one should make contracts more complete. If the formal type "X is private" may or may not allow type cloning by "Y is new X" of the actual type, that must be a part of the contract. E.g. tagged types should not match or, better cloning hierarchies tagged types must be allowed. The principal design rule should be legality to be determined exclusively by visible specifications. For generic formals it would mean resolving all conflicting declarations in the formal part. For example: generic type T is private; package function "+" (Left, Right : T) return T; -- Must be illegal! Reason: T might have "+" visible in the instantiation context. So the package declaration must be: generic type T is private; without function "+" (Left, Right : T) return T; -- I promise there will be none package function "+" (Left, Right : T) return T; -- It is OK now -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de