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: [Newbie] doubly constrained array, dumb question Date: Tue, 27 Feb 2018 15:19:20 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <62f83fe5-15d6-41cf-952f-bc3cb077d42f@googlegroups.com> <473f9b1a-6466-4745-9041-107f54062cf2@googlegroups.com> <576b1f3a-a0f4-42c9-b7b5-082600ad74c5@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 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 X-Notice: Filtered by postfilter v. 0.8.3 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:50680 Date: 2018-02-27T15:19:20+01:00 List-Id: On 27/02/2018 12:43, Mehdi Saada wrote: >> For example, the "class" Integer of which >> Positive is a "member" still has negative values, it is just so that you >> cannot tag them Positive. E.g. >> A : Positive := 1; >> B : Positive := 100; >> C : Positive := (A - B) + B; -- This is OK, though A - B = -99 > Interesting, I never tried that ! Very useful indeed. > But those types don't have classes, nor polymorphism. They have "classes", but no *dynamic* polymorphism. >> Not necessarily. You simply override disallowed operations with bodies >> raising Constraint_Error. The same technique is used for multiple dispatch: > Yes, I thought so, but it's definitely not my conception of safe and "predictable"... It's safer that "whatever is defined for the parent, won't raise exception for the descendants" holds true at any time. It is safe because that is the defined behavior. Disallowed operation is defined as exception, not as never-called-thing. Compare that with zero divide, there is nothing unsafe in that, it is defined to raise Constraint_Error. Unsafe is when a contract is violated. If a client promises not to propagate exceptions and then divides to zero without catching Constraint_Error, that is an unsafe *client*, division is still safe. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de