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: Ada 2012 Constraints (WRT an Ada IR) Date: Thu, 22 Dec 2016 11:16:49 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <1af458a8-cf5b-4dd7-824d-eed1ed5ffb21@googlegroups.com> NNTP-Posting-Host: s3c6wwRqkurrfTZpuYYZ+w.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 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:32943 Date: 2016-12-22T11:16:49+01:00 List-Id: On 2016-12-22 10:54, G.B. wrote: > On 21/12/2016 22:15, Dmitry A. Kazakov wrote: > >> There is a far better and safer model to produce user-defined subtypes >> that this mess. > > Can you, please, show one? You define a derived type by providing conversions from and back the parent type. Operations are inherited per composition with the conversion. The representation of the derived type's values can be any. That is. When 1. the representation is same; 2. the forward conversion is if not P(x) then raise Constraint_Error; else return x; end if; you get your predicate-constrained subtypes. It is far more expressive and safer because it is a private opaque type. > Your Clock base membership stest will be more involved, whatever its > purpose might be. It will compute a Boolean result, as long as the > inputs allow. See below. The point was about properties of the result not about whether you could have them. > Why does 2+2=5 apply when from a static predicate, but not when > from an Ada expression in general? Ada 83 range subtype construct retained properties of the base and so made sense. Arbitrary predicate does make any sense, thus does not belong to the declarative region. You can have it in the implementation somewhere, no problem, but not at the language level. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de