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=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,640b65cbfbab7216 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!news1.google.com!newsfeed2.dallas1.level3.net!news.level3.com!newsfeed-00.mathworks.com!nntp.TheWorld.com!not-for-mail From: Robert A Duff Newsgroups: comp.lang.ada Subject: Re: Ada.Strings.Bounded Date: Sun, 13 Apr 2008 16:02:49 -0400 Organization: The World Public Access UNIX, Brookline, MA Message-ID: References: <47F26C46.3010607@obry.net> <44d88b93-6a90-4c18-8785-2164934ba700@a9g2000prl.googlegroups.com> <47F652F7.9050502@obry.net> <47f7028d$1_6@news.bluewin.ch> <47F749CB.30806@obry.net> <96x8my4o4m7e.fskzcb6i31ty$.dlg@40tude.net> <276e98e3-3b3b-4cbf-b85c-dcae79f11ec5@b5g2000pri.googlegroups.com> NNTP-Posting-Host: shell01.theworld.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: pcls4.std.com 1208116970 11273 192.74.137.71 (13 Apr 2008 20:02:50 GMT) X-Complaints-To: abuse@TheWorld.com NNTP-Posting-Date: Sun, 13 Apr 2008 20:02:50 +0000 (UTC) User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.3 (irix) Cancel-Lock: sha1:hHB0HM/kgpI5IgkaIoobj8/9WcI= Xref: g2news1.google.com comp.lang.ada:20916 Date: 2008-04-13T16:02:49-04:00 List-Id: Eric Hughes writes: > On Apr 12, 3:09 pm, "Dmitry A. Kazakov" > wrote: >> So a comparable case would be Integer vs. BigNum. The latter >> (arbitrary-precision arithmetic) plays same role for integers as >> Unbounded_String does for strings. The analogy is not perfect. You can create arbitrarily large strings (within the limits of available memory, and the bounds of Integer, which is pretty big). It's just that any particular string object cannot change length. Integers are much more restricted -- you can't create an integer bigger than some implementation-defined limit, such as 32 or 64 bits. >...Now, if ARM had BigNum defined, we would >> experience exactly same problems with both, as we have with Strings and >> Unbounded_String. > > Well, yes; that's a good second example, although let's call it > Unbounded_Integer. The mechanisms are identical for dealing with > universal_string/String/Unbounded_String and univeral_integer/Integer/ > Unbounded_Integer. In the first case we have (0=absent,1=present) > 0/1/1 and in the second we have 1/1/0. In the first case we have > endless type conversions to do ordinary work. In the second we have > an absence in the standard. It's particularly annoying that Ada doesn't allow bignums, because every Ada implementation must support a bignum package -- compile-time arithmetic (static expressions) require it. So every Ada implementer has to go to all that trouble, but can't provide that functionality to users at run time -- at least, not in a standard way. > On Sat, 12 Apr 2008 11:50:56 -0700 (PDT), Eric Hughes wrote: >> I believe many of the issues involving strings could be addressed by >> introducing a predefined type universal_string. > > On Apr 12, 3:09 pm, "Dmitry A. Kazakov" > wrote: >> I don't see it this way. > > I have a strong counterclaim--I don't think it can be solved without > introducing such a type. > Here's the real rub: universal_integer and universal_string are each > _unimplementable_ as executable types. As abstract mathematical > types, they're perfectly well-defined. The origin of the difference > is that universal types have no possible bound in size. Since every > computer type has such a bound, there's a fundamental disjunct between > these two. An unbounded type actually does have a bound--it throws an > exception when its internal bounds are exceeded. A hypothetical > implementation of a universal type would be unable *in principle* to > throw such an exception. This is clearly contrary to fact, where > every program can run out of memory. Well, the limits on bignums are fundamentally different from the limits on Ada's integer types. In a language with bignums, the _language_ places no limit on the size of integers. An implementation can of course run out of memory, but that's not a limit on the size of any particular integer type, and the "limit" depends not only on how much memory you have, but also on how much you're using for something else. Unbounded strings would be similar, if they were indexed by bignums. > If this sounds like my idea for partial type specification (one > without code), it should. These ideas come from the same perspective. > > There's no concept (except _ad hoc_ in the ARM) of what a universal, > unimplementable type is; there's certainly no way of declaring one. > So here's the very beginning of a proposal. To declare and define > such a type: > > universal_type_definition ::= *universal* *type* > defining_identifier [known_discriminant_part] *;* I don't quite understand all this stuff about user-defined universal types (you give syntax, but didn't fully explain the semantics). But anyway, you seem to be inventing something like abstract types, and/or class-wide types. Note that universal_integer is conceptually the same thing as root_integer'Class. The RM doesn't say that, but the language designers had that analogy in mind. > universal type U ; > function op( U Object ) return U ; > type T1 is private and U ; > type T2 is private and U ; > overriding function op( T1 Object ) return T1 ; > overriding function op( T2 Object ) return T2 ; > function U( T2 Object ) return T1 ; > T2 x ; > T1 y1 := T1.op( U( x ) ) ; > T1 y2 := U( T2.op( x ) ) ; > T1 y := x.op ; The above is an odd mixture of C-like syntax and Ada-like syntax. Surely "is private and U" should be "is new U with private". And "T2 x;" should be "X: T2;" > The expressions for y1 and y2 should be interchangeable as > implementations for the expression for y. The point of the > declarations is to give unambiguous semantics to the expression > "x.op", so that it does not matter to the correctness of the program > what implementation expression the compiler chooses. If Usenet had > better formatting, I'd draw a commutative diagram as an illustration. I don't see any semantics, unambiguous or otherwise, in the above. Sorry -- I just can't guess what it means. > There's special meaning behind the conversion function U. Its > mandatory semantics is to convert an object of T2 to one of T1, such > that their values are equal as universal values. I don't know what "equal as universal values" means, either. Anyway, the problem with Unbounded_Strings, as I see it, is that Ada doesn't allow user-defined types to use all the same notations as the built-in ones. Literals, indexing, etc. - Bob