From: "Dan'l Miller" <optikos@verizon.net>
Subject: Re: Ada Successor Language
Date: Fri, 22 Jun 2018 08:18:53 -0700 (PDT)
Date: 2018-06-22T08:18:53-07:00 [thread overview]
Message-ID: <9c30a174-9fdc-47ce-be34-338223c07735@googlegroups.com> (raw)
In-Reply-To: <pgd005$9hf$1@gioia.aioe.org>
On Wednesday, June 20, 2018 at 2:33:26 AM UTC-5, Dmitry A. Kazakov wrote:
> On 2018-06-19 23:07, Dan'l Miller wrote:
> > On Tuesday, June 19, 2018 at 2:39:30 PM UTC-5, Dmitry A. Kazakov wrote:
> >> On 2018-06-19 21:19, Paul Rubin wrote:
> >>> "Dmitry A. Kazakov" writes:
> >>>> There are 50 shades of mess. Ada's generics try to introduce some
> >>>> weakly-typed contracts on the formal generic parameters, where C++
> >>>> templates go completely untyped, but mess is always mess. You cannot
> >>>> make a decent language out of macro processor.
> >>>
> >>> I don't understand what you're getting at. Are Ada generics implemented
> >>> with a macro processor? C++ templates amount to that, but there are
> >>> other, better ways to implement generics.
> >>
> >> Generics and macros are same thing regardless implementation. The core
> >> idea and all power lies in textual substitution as opposed to the
> >> concept substitutability in a properly typed systems.
> >
> > Clearly, Ada's generics are not performing textual substitution. Ada's generics are performing
> restriction-matching on subtypes passed as formal arguments. If the criteria of the restrictions are
> satisfied, the previously-declared-long-ago subtype in the AST is what is passed in as the formal
> argument of an Ada generic.
>
> There is no such thing in Ada.
No such thing? Nothing? Nada? Zilch? Empty set? Apparently you have not read §12.1 in the _AARM_ nor examples {12.3.15.i, 12.3.18.c} a few pages later.
Just about the only restriction not permitted on generic formal parameters is constraint on subtypes:
“Reason: The reason for forbidding constraints in subtype_indications is that it simplifies the elaboration of
generic_declarations (since there is nothing to evaluate), and that it simplifies the matching rules, and makes them more checkable at compile time.”
12.3.15.i:
type T1 is tagged record ... end record;
generic
type Formal is new T1;
12.3.18.c:
type Ancestor is tagged null record;
generic
type Formal is new Ancestor with private;
and in
http://www.adaic.org/resources/add_content/standards/05rat/html/Rat-6-5.html
generic
type T is limited new LT; -- untagged
type TT is limited new TLT with private; -- tagged
type A is interface;
procedure Op1(X: A; ... ) is abstract;
procedure N1(X: A; ... ) is null;
generic
type F is interface and A;
These are the awesome achievement in Ada that Stroustup & Austern have been struggling for a decade to standardize in C++ under the jargon “concepts”. The C++ standardization committee keeps finding some gotcha that causes the proposal to be rejected from C++{11,14,17}.
Ada also has concept maps (which Stroustrup was also trying to standardize a while back to facilitate concepts):
again from the Ada2005 Rationale linked above:
generic
type My_Element is private;
with package Sets is new Set_Signature(Element => My_Element, others => <>);
overriding
procedure This is new That( ... );
All these {T1, Ancestor, LT, TLT, A, Set_Signature, Element, That} are the restrictions that, if absent, cause the generic package to fail to compile. So, yes, there most certainly is such a thing in Ada.
> Formal generic types, e.g.
>
> type Foo (<>) is private;
red herring. I am discussing nearly every category of generic parameter other than (<>).
> match pretty much anything. The actual type is then substituted in all
> language constructs just like macros do. The only constraint here is the
> language syntax and a few sematic checks which make the language of
> generics (not to confuse with the core language) weakly typed,
How are strictly matching the generic formal parameters' overtly-stated restrictions on {T1, Ancestor, LT, TLT, A, Set_Signature, Element, That} in the examples above not strongly typed? I don't see any loosey-goosey loopholes to bypass those restrictions to sneak a mismatch-to-those-restrictions in the backdoor when no one is looking.
> where C++ templates are completely untyped.
I would say that C++ templates have no overt matching based on •restrictions• on the formal-parameters, (other than absences discovered later on upon expanding the template). Conversely, the entire Turing-completeness debacle in C++ templates is caused by carving out specific types as exceptional/nongeneric/special-case template specializations that occlude the generic template for those precisely-matched type parameters. So the Turing completeness is entirely based on the vicinity that C++ templates have the utmost of strong typing (that even Ada doesn't have*: Ada cannot utilize strong typing to carve out nongeneric/special-case parameterized-type package from the generic parameterized-type package).
* Thank goodness Ada generics lack C++'s template specialization, because that is the key feature needed to go down the path of C++-metatemplate-programming-esque Turing-complete functional programming (with horrendous cobbled-together syntax) in Ada generics.
next prev parent reply other threads:[~2018-06-22 15:18 UTC|newest]
Thread overview: 212+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-02 4:43 Ada Successor Language Shark8
2018-06-02 6:52 ` Luke A. Guest
2018-06-04 2:27 ` Dan'l Miller
2018-06-04 21:06 ` Dan'l Miller
2018-06-05 12:31 ` Lucretia
2018-06-02 8:12 ` Dmitry A. Kazakov
2018-06-02 12:14 ` Mehdi Saada
2018-06-02 12:43 ` Dmitry A. Kazakov
2018-06-03 7:39 ` Safety of user-defined operators (was: Ada Successor Language) G.B.
2018-06-03 7:58 ` Safety of user-defined operators Dmitry A. Kazakov
2018-06-02 12:57 ` Ada Successor Language Luke A. Guest
2018-06-04 21:17 ` Randy Brukardt
2018-06-02 13:48 ` Dan'l Miller
2018-06-03 10:01 ` ric.wai88
2018-06-03 13:04 ` Dan'l Miller
2018-06-03 13:09 ` Shark8
2018-06-03 15:14 ` Lucretia
2018-06-03 15:09 ` Lucretia
2018-06-03 15:14 ` ric.wai88
2018-06-03 15:16 ` Lucretia
2018-06-03 15:22 ` ric.wai88
2018-06-03 15:31 ` Lucretia
2018-06-03 15:41 ` ric.wai88
2018-06-03 15:54 ` Dmitry A. Kazakov
2018-06-03 16:43 ` Jeffrey R. Carter
2018-06-04 5:01 ` Jacob Sparre Andersen
2018-06-04 7:19 ` Simon Wright
2018-06-04 7:44 ` Dmitry A. Kazakov
2018-06-04 13:53 ` Björn Lundin
2018-06-04 16:54 ` G. B.
2018-06-04 19:37 ` Dmitry A. Kazakov
2018-06-04 22:12 ` G.B.
2018-06-05 7:18 ` Dmitry A. Kazakov
2018-06-04 13:25 ` Lucretia
2018-06-04 14:08 ` Dan'l Miller
2018-06-04 14:55 ` Lucretia
2018-06-26 13:58 ` jm.tarrasa
2018-06-26 18:44 ` Jacob Sparre Andersen
2018-06-03 18:44 ` Björn Lundin
2018-06-03 19:37 ` Paul Rubin
2018-06-03 23:56 ` Dan'l Miller
2018-06-04 0:24 ` Paul Rubin
2018-06-04 0:41 ` Ben Bacarisse
2018-06-04 2:01 ` ric.wai88
2018-06-05 16:46 ` Alejandro R. Mosteo
2018-06-06 21:02 ` gautier_niouzes
2018-06-08 10:03 ` Alejandro R. Mosteo
2018-06-04 3:19 ` John Smith
2018-06-04 20:56 ` Mehdi Saada
2018-06-04 21:14 ` Paul Rubin
2018-06-05 0:17 ` Shark8
2018-06-05 16:01 ` Dan'l Miller
2018-06-18 3:31 ` Dan'l Miller
2018-06-18 6:58 ` Björn Lundin
2018-06-18 12:33 ` Dan'l Miller
2018-06-18 19:16 ` Niklas Holsti
2018-06-18 19:28 ` Dan'l Miller
2018-06-18 20:22 ` Jeffrey R. Carter
2018-06-18 20:45 ` Niklas Holsti
2018-06-18 21:20 ` Shark8
2018-06-18 21:27 ` ric.wai88
2018-06-18 21:51 ` Shark8
2018-06-22 11:14 ` Alejandro R. Mosteo
2018-06-18 22:23 ` Dmitry A. Kazakov
2018-06-18 22:36 ` Paul Rubin
2018-06-19 0:10 ` Dan'l Miller
2018-06-19 20:32 ` Paul Rubin
2018-06-19 20:37 ` Dan'l Miller
2018-06-20 8:30 ` Marius Amado-Alves
2018-06-19 7:58 ` Dmitry A. Kazakov
2018-06-19 19:19 ` Paul Rubin
2018-06-19 19:30 ` Dan'l Miller
2018-06-19 19:39 ` Dmitry A. Kazakov
2018-06-19 20:30 ` Paul Rubin
2018-06-20 7:13 ` Simon Wright
2018-06-29 20:11 ` Randy Brukardt
2018-06-20 7:59 ` Dmitry A. Kazakov
2018-06-22 11:14 ` Alejandro R. Mosteo
2018-06-23 19:21 ` Jacob Sparre Andersen
2018-06-24 8:34 ` Dmitry A. Kazakov
2018-06-24 9:19 ` J-P. Rosen
2018-06-25 7:00 ` briot.emmanuel
2018-06-25 8:23 ` Marius Amado-Alves
2018-06-29 20:20 ` Randy Brukardt
2018-06-25 8:58 ` Alejandro R. Mosteo
2018-06-25 9:19 ` Jeffrey R. Carter
2018-06-25 12:41 ` J-P. Rosen
2018-06-25 14:03 ` Niklas Holsti
2018-06-25 14:21 ` Dmitry A. Kazakov
2018-06-25 14:44 ` J-P. Rosen
2018-06-25 15:19 ` Dmitry A. Kazakov
2018-06-25 16:21 ` Dan'l Miller
2018-06-26 7:44 ` Dmitry A. Kazakov
2018-06-26 13:59 ` Dan'l Miller
2018-06-26 14:05 ` ric.wai88
2018-06-26 15:38 ` Simon Wright
2018-06-26 16:50 ` Dan'l Miller
2018-06-26 17:25 ` Dmitry A. Kazakov
2018-06-26 18:47 ` Dan'l Miller
2018-06-26 19:29 ` Dmitry A. Kazakov
2018-06-26 20:03 ` Dan'l Miller
2018-06-26 20:59 ` Dmitry A. Kazakov
2018-06-29 3:11 ` Paul Rubin
2018-06-29 3:37 ` Dan'l Miller
2018-06-29 3:48 ` Paul Rubin
2018-06-29 7:29 ` Dmitry A. Kazakov
2018-06-29 7:20 ` Dmitry A. Kazakov
2018-06-29 13:25 ` Dan'l Miller
2018-06-29 17:39 ` Dmitry A. Kazakov
2018-06-29 19:46 ` Dan'l Miller
2018-06-29 21:36 ` Dmitry A. Kazakov
2018-06-29 22:21 ` Dan'l Miller
2018-06-26 21:15 ` Niklas Holsti
2018-06-27 7:07 ` Dmitry A. Kazakov
2018-06-26 14:17 ` Dmitry A. Kazakov
2018-06-26 14:42 ` Dan'l Miller
2018-06-26 14:47 ` Dmitry A. Kazakov
2018-06-26 21:01 ` Niklas Holsti
2018-06-26 22:03 ` Dan'l Miller
2018-06-27 2:28 ` Dan'l Miller
2018-06-27 2:58 ` Dan'l Miller
2018-06-27 7:15 ` Dmitry A. Kazakov
2018-06-27 16:33 ` Dan'l Miller
2018-06-27 19:11 ` Dmitry A. Kazakov
2018-06-25 18:05 ` J-P. Rosen
2018-06-26 7:42 ` Dmitry A. Kazakov
2018-06-25 19:32 ` Niklas Holsti
2018-06-25 19:16 ` Niklas Holsti
2018-06-25 20:13 ` Dan'l Miller
2018-06-25 20:52 ` Niklas Holsti
2018-06-26 7:57 ` Dmitry A. Kazakov
2018-06-26 20:16 ` J-P. Rosen
2018-06-26 20:49 ` Niklas Holsti
2018-06-26 21:09 ` Dmitry A. Kazakov
2018-06-29 20:35 ` Randy Brukardt
2018-06-25 14:18 ` Alejandro R. Mosteo
2018-06-29 20:47 ` Randy Brukardt
2018-06-29 20:23 ` Randy Brukardt
2018-07-02 9:37 ` Alejandro R. Mosteo
2018-06-29 20:17 ` Randy Brukardt
2018-06-29 22:11 ` Dmitry A. Kazakov
2018-06-29 22:36 ` Randy Brukardt
2018-06-30 8:34 ` Dmitry A. Kazakov
2018-06-19 21:07 ` Dan'l Miller
2018-06-20 7:33 ` Dmitry A. Kazakov
2018-06-22 11:13 ` Alejandro R. Mosteo
2018-06-22 16:02 ` Dmitry A. Kazakov
2018-06-25 8:20 ` Marius Amado-Alves
2018-06-26 17:20 ` Shark8
2018-06-26 17:42 ` Dmitry A. Kazakov
2018-06-25 8:21 ` Paul Rubin
2018-06-25 9:12 ` Dmitry A. Kazakov
2018-06-22 15:18 ` Dan'l Miller [this message]
2018-06-22 15:49 ` Dmitry A. Kazakov
2018-06-19 2:45 ` Shark8
2018-06-19 7:50 ` Dmitry A. Kazakov
2018-06-19 15:35 ` Shark8
2018-06-19 7:35 ` G. B.
2018-06-19 11:36 ` Dan'l Miller
2018-06-19 15:37 ` Shark8
2018-06-19 17:07 ` G. B.
2018-06-29 20:05 ` Randy Brukardt
2018-06-29 23:18 ` Shark8
2018-07-03 21:39 ` Randy Brukardt
2018-06-19 0:20 ` Lucretia
2018-06-19 11:51 ` Dan'l Miller
2018-06-19 13:54 ` Dan'l Miller
2018-06-06 9:13 ` Niklas Holsti
2018-06-08 16:28 ` Dan'l Miller
2018-06-08 16:56 ` Mehdi Saada
2018-06-08 17:33 ` Shark8
2018-06-12 1:51 ` Dan'l Miller
2018-06-12 15:23 ` Luke A. Guest
2018-06-12 15:44 ` Dan'l Miller
2018-06-12 17:59 ` Luke A. Guest
2018-06-13 16:03 ` Dan'l Miller
2018-06-13 16:20 ` Luke A. Guest
2018-06-13 18:04 ` G. B.
2018-06-13 5:53 ` Shark8
2018-06-13 6:57 ` Simon Wright
2018-06-13 18:58 ` Shark8
2018-06-13 19:19 ` Dmitry A. Kazakov
2018-06-14 3:19 ` Lucretia
2018-06-14 7:26 ` Dmitry A. Kazakov
2018-06-14 11:25 ` Lucretia
2018-06-14 12:22 ` Dmitry A. Kazakov
2018-06-15 3:35 ` Lucretia
2018-06-15 7:20 ` Dmitry A. Kazakov
2018-06-15 16:03 ` Lucretia
2018-06-15 20:50 ` Dennis Lee Bieber
2018-06-15 11:38 ` jm.tarrasa
2018-06-15 12:06 ` Dmitry A. Kazakov
2018-06-15 15:42 ` J-P. Rosen
2018-06-15 17:30 ` Simon Wright
2018-06-15 17:55 ` jm.tarrasa
2018-06-15 19:58 ` Shark8
2018-06-16 7:04 ` Simon Wright
2018-06-16 9:14 ` jm.tarrasa
2018-06-16 10:22 ` Simon Wright
2018-06-16 10:50 ` Jeffrey R. Carter
2018-06-16 11:32 ` Dmitry A. Kazakov
2018-06-13 21:15 ` Paul Rubin
2018-06-14 3:20 ` Lucretia
2018-06-14 3:27 ` Shark8
2018-06-14 5:17 ` Paul Rubin
2018-06-14 21:00 ` Randy Brukardt
2018-06-15 3:41 ` Lucretia
2018-06-15 7:08 ` Dmitry A. Kazakov
2018-06-15 7:15 ` Simon Wright
2018-06-14 8:51 ` Marius Amado-Alves
2018-06-08 20:38 ` Mehdi Saada
2018-06-13 5:46 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox