From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Running a preprocessor from GPS?
Date: Thu, 30 Jul 2015 18:23:28 +0300
Date: 2015-07-30T18:23:28+03:00 [thread overview]
Message-ID: <d1utrhF24d7U1@mid.individual.net> (raw)
In-Reply-To: <d5a73210-a67f-4d21-8b16-536af10ab157@googlegroups.com>
On 15-07-30 01:32 , EGarrulo wrote:
> On Wednesday, July 29, 2015 at 10:32:16 PM UTC+2, Randy Brukardt wrote:
>> "EGarrulo" wrote in message
>>> Generics *are* glorified macros anyway, in a sense.
>>
>> This is an especial sore point with me!
>>
>> Formally in the Ada RM they are, which causes all manner of nonsense effects
>> which then get erased by special rules. Stupid.
>
> What do you mean? Conceptually, generics are macros.
Randy Brukardt's message already explained why Ada generics are
conceptually *not* macros, but perhaps his answer was too focused on how
his compiler (Janus/Ada) implements generics and not enough on the
conceptual point.
The aim of Ada generics is to make program components parametrizable by
types in a safe and predictable way. (In Ada 83, generics were also the
only way to parametrize program components by operations, but now there
are other ways to do that.)
The "generic contract" idea in Ada is that the generic declaration
alone, without looking at the body, gives enough information about the
generic's formal parameters to decide two things at compile-time:
1. Whether an implementation (body) of the generic is legal, that is,
uses only the declared properties of the generic formal parameters.
2. Whether an instantiation of the generic with particular actual
parameters (actual types, etc.) is legal, that is, whether the actual
parameters have all the properties declared for the generic formal
parameters.
Thus, compile-time error messages for an illegal generic instantiation
need only point out discrepancies between the declaration of the generic
and the actuals in the instantiation. These error messages do not need
to refer to the body of the generic.
Contrast this with C macros, which are pure text substitution which
means that the compiler's error messages refer to the definition of the
macro and can be quite obscure. Similarly, errors in C++ template
instances are usually detected when the body of the template is compiled
with the actual template parameters substituted for the formals, and
again the error messages refer to and must be interpreted by looking at
the body of the template ("body" is probably not the correct C++ term,
sorry, I hope my meaning is clear).
This conceptual difference is related to the fact that the theoretical
computational power of Ada generic instantiation is far below that of
C++ template instantiation, which is Turing-complete.
> If a compiler is clever enough to reuse a common implementation,
> then kudos to the writers of that compiler, but such behaviour
> shouldn't be a requirement, I think.
The generic contract concept is rather equivalent to a requirement that
it shall be *possible* to implement generics with shared code. However,
the generic contract concept is programmer-oriented, not
compiler-oriented. The choice between shared code or instance-specific
code is a pragmatic one -- for example, I suspect that the choice of
shared code in Janus/Ada was influenced by its original
memory-constrained target processors. Most of GNAT's targets are not so
memory-constrained.
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2015-07-30 15:23 UTC|newest]
Thread overview: 175+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-27 14:28 Running a preprocessor from GPS? EGarrulo
2015-07-27 16:47 ` David Botton
2015-07-27 17:17 ` EGarrulo
2015-07-27 20:26 ` Randy Brukardt
2015-07-27 21:14 ` Jeffrey R. Carter
2015-07-27 22:23 ` EGarrulo
2015-07-28 7:23 ` Simon Wright
2015-07-28 11:36 ` EGarrulo
2015-07-28 21:12 ` Randy Brukardt
2015-07-28 22:11 ` EGarrulo
2015-07-28 22:41 ` EGarrulo
2015-07-29 9:52 ` G.B.
2015-07-29 20:32 ` Randy Brukardt
2015-07-29 22:32 ` EGarrulo
2015-07-29 23:51 ` Jeffrey R. Carter
2015-07-30 0:10 ` EGarrulo
2015-07-30 6:01 ` Niklas Holsti
2015-07-30 7:33 ` Björn Lundin
2015-07-30 8:03 ` EGarrulo
2015-07-30 8:08 ` Jacob Sparre Andersen
2015-07-30 8:37 ` EGarrulo
2015-07-30 8:49 ` Georg Bauhaus
2015-07-30 12:15 ` EGarrulo
2015-07-30 14:11 ` G.B.
2015-07-30 19:29 ` Jeffrey R. Carter
2015-07-30 20:53 ` EGarrulo
2015-07-30 22:52 ` Jeffrey R. Carter
2015-07-31 7:29 ` Georg Bauhaus
2015-07-31 7:53 ` gautier_niouzes
2015-07-31 8:26 ` Simon Wright
2015-07-31 9:13 ` Dmitry A. Kazakov
2015-07-31 9:31 ` EGarrulo
2015-07-31 11:01 ` Dmitry A. Kazakov
2015-07-31 13:50 ` EGarrulo
2015-07-31 16:29 ` Dmitry A. Kazakov
2015-07-31 11:26 ` Brian Drummond
2015-07-31 12:12 ` EGarrulo
2015-07-31 12:15 ` EGarrulo
2015-07-31 17:54 ` Jeffrey R. Carter
2015-07-31 18:20 ` EGarrulo
2015-07-31 18:51 ` Jeffrey R. Carter
2015-08-01 7:20 ` Simon Wright
2015-08-01 8:06 ` EGarrulo
2015-08-01 8:33 ` Simon Wright
2015-08-01 10:47 ` EGarrulo
2015-08-01 11:27 ` Simon Wright
2015-08-01 11:44 ` Niklas Holsti
2015-08-01 12:19 ` EGarrulo
2015-08-01 17:49 ` Jeffrey R. Carter
2015-08-01 18:15 ` Paul Rubin
2015-08-01 18:59 ` Jeffrey R. Carter
2015-08-01 20:30 ` Georg Bauhaus
2015-08-01 20:44 ` EGarrulo
2015-08-01 22:44 ` Jeffrey R. Carter
2015-08-01 23:39 ` EGarrulo
2015-08-02 0:02 ` Jeffrey R. Carter
2015-08-02 0:18 ` EGarrulo
2015-08-02 0:30 ` EGarrulo
2015-08-02 6:05 ` Jeffrey R. Carter
2015-08-02 8:29 ` EGarrulo
2015-08-02 19:21 ` Jeffrey R. Carter
2015-08-02 21:37 ` EGarrulo
2015-08-03 2:35 ` Jeffrey R. Carter
2015-08-02 2:53 ` Paul Rubin
2015-08-02 6:07 ` Jeffrey R. Carter
2015-08-02 8:36 ` EGarrulo
2015-08-01 16:53 ` Jeffrey R. Carter
2015-08-01 17:00 ` Jeffrey R. Carter
2015-08-01 7:48 ` Dmitry A. Kazakov
2015-07-30 8:23 ` Georg Bauhaus
2015-07-30 8:45 ` EGarrulo
2015-07-30 9:19 ` Dmitry A. Kazakov
2015-07-30 11:22 ` Niklas Holsti
2015-07-30 13:00 ` EGarrulo
2015-07-30 13:30 ` Dmitry A. Kazakov
2015-07-30 13:51 ` EGarrulo
2015-07-30 14:13 ` Dmitry A. Kazakov
2015-07-30 14:46 ` Simon Wright
2015-07-30 14:31 ` G.B.
2015-07-30 18:46 ` Randy Brukardt
2015-07-30 9:18 ` EGarrulo
2015-07-30 18:55 ` Randy Brukardt
2015-07-30 19:32 ` EGarrulo
2015-07-31 0:10 ` Randy Brukardt
2015-07-30 11:35 ` Brian Drummond
2015-07-30 13:30 ` EGarrulo
2015-07-31 11:07 ` Brian Drummond
2015-07-30 8:28 ` Pascal Obry
2015-07-30 12:00 ` EGarrulo
2015-07-30 10:01 ` Björn Lundin
2015-07-30 10:59 ` Pascal Obry
2015-07-30 11:21 ` gautier_niouzes
2015-07-30 18:35 ` Randy Brukardt
2015-07-31 15:21 ` Stefan.Lucks
2015-07-31 17:28 ` Pascal Obry
2015-08-01 11:38 ` Björn Lundin
2015-08-01 20:07 ` Stefan.Lucks
2015-08-03 23:26 ` Randy Brukardt
2015-07-30 6:08 ` Dmitry A. Kazakov
2015-07-30 6:37 ` Georg Bauhaus
2015-07-30 8:27 ` Pascal Obry
2015-07-30 9:22 ` Dmitry A. Kazakov
2015-07-30 11:51 ` EGarrulo
2015-07-30 12:23 ` Dmitry A. Kazakov
2015-07-30 13:55 ` Niklas Holsti
2015-08-30 7:03 ` David Thompson
2015-07-30 14:07 ` EGarrulo
2015-07-30 18:12 ` Jeffrey R. Carter
2015-07-30 18:51 ` EGarrulo
2015-07-30 19:27 ` Jeffrey R. Carter
2015-07-30 19:54 ` EGarrulo
2015-07-30 22:53 ` Jeffrey R. Carter
2015-07-30 23:58 ` Randy Brukardt
2015-07-30 11:54 ` EGarrulo
2015-07-30 12:42 ` Pascal Obry
2015-07-30 13:21 ` EGarrulo
2015-07-30 13:38 ` Dmitry A. Kazakov
2015-07-30 13:55 ` EGarrulo
2015-07-30 15:23 ` Niklas Holsti [this message]
2015-07-30 19:32 ` Randy Brukardt
2015-07-30 20:10 ` EGarrulo
2015-07-31 0:23 ` Randy Brukardt
2015-07-31 6:29 ` Dmitry A. Kazakov
2015-08-02 10:08 ` EGarrulo
2015-08-02 12:15 ` EGarrulo
2015-07-29 23:45 ` EGarrulo
2015-07-30 0:25 ` Jeffrey R. Carter
2015-07-30 8:12 ` EGarrulo
2015-07-30 18:01 ` Jeffrey R. Carter
2015-07-29 6:46 ` Simon Wright
2015-07-29 7:17 ` Dmitry A. Kazakov
2015-07-29 19:57 ` Randy Brukardt
2015-07-29 20:09 ` Jeffrey R. Carter
2015-07-30 18:16 ` Randy Brukardt
2015-07-29 20:38 ` Simon Wright
2015-07-30 7:50 ` Jacob Sparre Andersen
2015-07-30 14:48 ` G.B.
2015-07-30 15:58 ` Simon Wright
2015-07-30 15:13 ` EGarrulo
2015-07-30 15:21 ` EGarrulo
2015-07-30 15:29 ` G.B.
2015-07-30 16:02 ` Simon Wright
2015-07-30 16:15 ` Simon Wright
2015-07-30 16:29 ` EGarrulo
2015-07-30 17:31 ` Simon Wright
2015-07-28 10:28 ` Brian Drummond
2015-07-28 11:39 ` EGarrulo
2015-07-29 10:02 ` Brian Drummond
2015-07-29 10:29 ` Brian Drummond
2015-07-29 12:00 ` EGarrulo
2015-07-29 19:23 ` gautier_niouzes
2015-07-28 11:43 ` Björn Lundin
2015-07-28 11:51 ` Dmitry A. Kazakov
2015-07-28 12:06 ` EGarrulo
2015-07-28 12:54 ` Dmitry A. Kazakov
2015-07-28 13:18 ` EGarrulo
2015-07-28 13:49 ` EGarrulo
2015-07-28 14:02 ` Bob Duff
2015-07-28 14:57 ` G.B.
2015-07-28 15:36 ` Dmitry A. Kazakov
2015-07-29 7:15 ` Stefan.Lucks
2015-07-29 7:52 ` EGarrulo
2015-07-29 17:30 ` Stefan.Lucks
2015-07-29 18:49 ` Jeffrey R. Carter
2015-07-29 20:40 ` Randy Brukardt
2015-07-30 7:40 ` gautier_niouzes
2015-07-30 19:22 ` Randy Brukardt
2015-07-28 13:06 ` G.B.
2015-07-28 13:19 ` EGarrulo
2015-07-28 20:55 ` Randy Brukardt
2015-07-28 22:31 ` EGarrulo
2015-07-29 20:09 ` Randy Brukardt
2015-07-29 22:40 ` EGarrulo
2015-07-28 12:07 ` Björn Lundin
2015-07-31 19:44 ` Per Sandberg
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox