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!feeder.eternal-september.org!aioe.org!.POSTED.3d73Ybk3C5U4I2t8lv+lAQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: How to best make a custom range? Date: Mon, 4 Nov 2019 22:41:50 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <72cf1559-a51f-4a7d-a79e-fe349f833883@googlegroups.com> NNTP-Posting-Host: 3d73Ybk3C5U4I2t8lv+lAQ.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:60.0) Gecko/20100101 Thunderbird/60.9.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: en-US Xref: reader01.eternal-september.org comp.lang.ada:57476 Date: 2019-11-04T22:41:50+01:00 List-Id: On 2019-11-04 20:13, Shark8 wrote: > On Monday, November 4, 2019 at 11:55:42 AM UTC-7, Dmitry A. Kazakov wrote: >> On 2019-11-04 19:49, Andrew Shvets wrote: >>> Mostly to have a set of values that I can select at random. >> >> That is not subtype, which is the point. If it were made a "subtype" as >> was suggested per misuse of dynamic predicate, > It's not Dynamic_Predicate, it's Static_Predicate. > >> then that would break >> most of the code by polluting it with Constraint_Error raised in most >> unexpected places. > Constraint_Error is the normal/expected exception, perhaps you are thinking Assertion_Error? No difference. So long an unanticipated exception is propagated it is a bug. Any new dynamic check is a bug. >> Which is the reason why it should not be a subtype, >> because it is not (see LSP). > Everywhere that Character is requested, a Test_Character is valid Try Lookup : array (Test_Character) of Boolean := (others => False); or procedure Next (X : in out Character) is begin X := Character'Succ (X); end Next; in case you tried to implement arrays indexed by arbitrary subsets... > Just like everywhere Integer is requested, Natural is valid. Consider: procedure Negate (Value : in out Integer); Natural is valid there only when 0. Yes, the type system will pass it through, and this is the problem. You do not known in advance which code will change its behavior. With proper ranges it is doable to foresee most of the cases especially because base types are ranges too. Arbitrary constraints break arbitrary pieces of code. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de