comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
Subject: Re: Generic package parameters not externally visible : what's the rational ?
Date: Sat, 31 Oct 2009 08:44:18 -0400
Date: 2009-10-31T08:44:18-04:00	[thread overview]
Message-ID: <uy6mr4tst.fsf@stephe-leake.org> (raw)
In-Reply-To: 1r8etjwa9k46n.3pyj04jn686o$.dlg@40tude.net

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:

> On Fri, 30 Oct 2009 06:25:21 -0400, Stephen Leake wrote:
>
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>> 
>>> My take is that any generic code is potentially broken. Anyone who uses
>>> generics beyond very trivial cases should know that, and mentally prepare
>>> himself to fix his code over and over again.
>> 
>> That is certainly not my experience. I use generics extensively; it's
>> one of the best features of the language.
>
> Do you use generic in other generics?

Yes. See http://www.stephe-leake.org/ada/sal.html, in particular the
sal-gen-alg hierarchy.

You'll have to download and unpack the code; my webserver doesn't have
enough space for the unpacked HTML version (guess it's time to spend
more money on the web server).

> This requires a bit explanation. A set of generics sharing some common
> parameter (like the number type in a generic matrix package) are kind of
> class, i.e. they declare sets of types dependant on the parameter (like
> vector, matrix etc). I call this almost "trivial".

Right; SAL has that in sal-gen_math.

> Non-trivial it becomes when you have several such axes.

Yes. For example, Unbounded_Arrays have Index_Type and Item_Type.

> Here is an example of a mesh of generic packages with 4 axes:
>
>    http://www.dmitry-kazakov.de/ada/fuzzy.htm#8
>
> Note that semantically the example is quite simple, almost evident. Its
> implementation and use is horrific. I would never consider it "fixed".

Sorry, I don't see the complexity; what are the four axes?

There are problems that can't be solved in Ada; that doesn't make Ada
useless!

Problems that can be almost solved, and push the boundaries of the
language, and be very frustrating.

> As for being the "best language feature", I hope that you would easily find
> lots of more useful and advanced Ada features. 

Defining a metric on Ada features is not easy. My vote for best
feature changes month to month; the best one is the one I most recently
used to solve a hard problem. This month, that's generics.

In previous months, it's been tasking, dispatching, interfaces, and
rep clauses on packed record types.

> What about unconstrained types? 

Yes, if the metric is "things that other languages don't have", that's
high on the list.

> User-defined numeric types? 

Not so important; I end up using the compiler types anyway, except for
Unsigned_n in packed records. Ada should have defined _all_ of
Unsigned_n, for n = 1 .. 64, in the first place.

Distinct numeric types (derived from compiler defined types) is important.

> Packages (vs. types) as encapsulation modules? 

That's just obvious; I wouldn't use a language that doesn't have that :).

Even C++ has that now. Not called packages, but close enough.

> If any of these were removed it would not be Ada. On the contrary,
> Ada without generics sounds quite plausible to me.

True. Ada without overloading is "plausible" as well. But that's just
another metric.

-- 
-- Stephe



  parent reply	other threads:[~2009-10-31 12:44 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-26  8:58 Generic package parameters not externally visible : what's the rational ? Hibou57 (Yannick Duchêne)
2009-10-26 11:05 ` Ludovic Brenta
2009-10-26 15:02   ` Robert A Duff
2009-10-27  1:06   ` Hibou57 (Yannick Duchêne)
2009-10-26 14:56 ` Robert A Duff
2009-10-27  3:03   ` Hibou57 (Yannick Duchêne)
2009-10-27 21:08   ` Randy Brukardt
2009-10-27 21:36     ` Jeffrey R. Carter
2009-10-27 22:03       ` Hibou57 (Yannick Duchêne)
2009-10-27 22:19         ` Jeffrey R. Carter
2009-10-28 19:07         ` Randy Brukardt
2009-10-29 12:18           ` Hibou57 (Yannick Duchêne)
2009-10-29 22:56             ` Randy Brukardt
2009-10-30  0:10               ` Hibou57 (Yannick Duchêne)
2009-10-27 22:04       ` Hibou57 (Yannick Duchêne)
2009-10-27 23:37       ` Robert A Duff
2009-10-27 23:41         ` Jeffrey R. Carter
2009-10-27 23:34     ` Robert A Duff
2009-10-28  2:19       ` Hibou57 (Yannick Duchêne)
2009-10-28 19:12         ` Randy Brukardt
2009-10-29  7:34           ` Stephen Leake
2009-10-29 12:21           ` Hibou57 (Yannick Duchêne)
2009-10-29 13:10             ` AdaMagica
2009-10-29 15:11               ` Georg Bauhaus
2009-10-29 19:28                 ` Jeffrey R. Carter
2009-10-29 20:27                   ` Georg Bauhaus
2009-10-30 10:30               ` Stephen Leake
2009-10-30 17:53             ` Ludovic Brenta
2009-10-31  2:10               ` Hibou57 (Yannick Duchêne)
2009-10-30  5:19           ` Hibou57 (Yannick Duchêne)
2009-10-28  9:09     ` Dmitry A. Kazakov
2009-10-28 19:19       ` Randy Brukardt
2009-10-29  8:36         ` Dmitry A. Kazakov
2009-10-29 23:03           ` Randy Brukardt
2009-10-30  8:51             ` Dmitry A. Kazakov
2009-10-30 10:25           ` Stephen Leake
2009-10-30 19:32             ` Dmitry A. Kazakov
2009-10-31  2:06               ` Hibou57 (Yannick Duchêne)
2009-10-31  9:14                 ` Dmitry A. Kazakov
2009-11-03  8:25                   ` Hibou57 (Yannick Duchêne)
2009-11-03  9:59                     ` Dmitry A. Kazakov
2009-11-05 10:38                       ` Hibou57 (Yannick Duchêne)
2009-11-05 11:00                         ` Dmitry A. Kazakov
2009-11-05 12:16                           ` Hibou57 (Yannick Duchêne)
2009-11-05 14:09                             ` Dmitry A. Kazakov
2009-11-06 12:19                               ` Hibou57 (Yannick Duchêne)
2009-11-06 13:27                                 ` Dmitry A. Kazakov
2009-10-31  2:08               ` Hibou57 (Yannick Duchêne)
2009-10-31 12:44               ` Stephen Leake [this message]
2009-11-01 11:37                 ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox