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: Ada case-statement Date: Sat, 17 Mar 2018 08:59:52 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <365d65ea-5f4b-4b6a-be9b-1bba146394ab@googlegroups.com> NNTP-Posting-Host: 9SVwGWmobYfQsv+YICek4Q.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.6.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.8.3 Xref: reader02.eternal-september.org comp.lang.ada:51051 Date: 2018-03-17T08:59:52+01:00 List-Id: On 2018-03-17 00:49, Randy Brukardt wrote: > "Dmitry A. Kazakov" wrote in message > news:p8g0om$1gpe$1@gioia.aioe.org... >> On 15/03/2018 23:20, Randy Brukardt wrote: >>> "Dmitry A. Kazakov" wrote in message >>> news:p8dbcp$11bc$1@gioia.aioe.org... >> >>>> I don't see how giving a name could add anything to the semantics. Each >>>> alternative exhaustively defines a constraint. No reason to contaminate >>>> the name space. >>> >>> How does >>> when Today: Thurs => >>> exhaustively define anything? It just defines a constraint, but there is >>> not >>> way to know of what. > You have to look at the selecting_expression to >>> find >>> the type -- but it doesn't show it either. >> >> This applies to everything: >> >> when Thurs => >> >> What is the type of Thurs? I either know or in most cases simply do not >> care. > > You have to know, and you usually do with a commonly used enumeration. Enumeration literals overloading works just fine. And it is really so that I frequently don't know the types of enumeration literals and have to search for in the sources. > And > at the same time it isn't as important to know - you almost never are going > to use any overloaded operators (which often require qualifying something) > in a case limb. > > Once you have a general name for something, you can (and do) use it in many > contexts, and then the type (and its name) become necessary: for "use type", > for qualifications, for type conversions, and so on. Literals (all of them: enumerations, numeric, strings) are self-contained, you don't need their types in most cases. Adding type specification to a literal or a set of literals is just noise, most of the time. [*] >> In any case this is no change of the semantics. Today has the semantics of >> the case statement argument. You didn't specify the type there, why should >> you do here? > > You're not declaring an object for the case selector; that's "consuming" a > value rather than creating one. All objects should have their type defined > directly next to the declaration. Maybe, though some trivial type inference is OK. And I see nothing wrong when the type is specified as "same as above". ------------------ * Literal values, literal ranges, literal sets, literal arrays is one of few cases where structural type equivalence works far better than the named one. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de