comp.lang.ada
 help / color / mirror / Atom feed
From: Georg Bauhaus <rm.dash-bauhaus@futureapps.de>
Subject: Re: Real syntax problems in Ada
Date: Wed, 29 Aug 2012 15:33:25 +0200
Date: 2012-08-29T15:33:17+02:00	[thread overview]
Message-ID: <503e1a1d$0$6572$9b4e6d93@newsspool3.arcor-online.net> (raw)
In-Reply-To: <Pine.LNX.4.64.1208291146070.20257@medsec1.medien.uni-weimar.de>

On 29.08.12 12:43, stefan-lucks@see-the.signature wrote:

> Indeed, the syntax for declaring a generic something (after the keyword 
> "generic" the parameters come first, and the something and its name comes 
> last) is counter-intuitive, different from any other declarations, and 
> hurts readability. Consider the following simple example:
> 
>    generic
>       type Item is private;
>       type Many_Items is array(Positive range <>) of Item;
>       with function "<"(Left, Right: Item) return Boolean is <>;
>    function Minimum(List: Many_Items) return Item;
> 
> Ask programmers without Ada experience what this is. Most would read this 
> as a generic declaration of something -- but how many would read this as 
> the generic declaration of a function called "Minimum"?

It is good to see a reference to at least one of the touchstones
of readability.


> Your idea seems to be to alternatively write the above declaration as 
> 
>   generic function Minimum
>       (type Item is private; 
>        type Many_Items is Array (Natural Range <>) of Item; 
>        function "<"(Left, Right: Item) return Boolean is <>)
>    (List: Many_Items) return Item;
> 
> This would be a lot more readable.

(The touchstones of readability are not mentioned here.)

Why would a "(" be more readable? I'd like to 2nd any motion
for bracketing, but not in *this* way. One issue seems to be:
"Where do the generic formals end?"

The example replaces, in a sense, the keyword "function" after the
formals (Ada style) with a "(" (in suggested style).  There may be
more "(" among the formals, like there are in the declaration of
Many_Items above. When declarations of formals become a little more
involved, then a "(" may easily make it to the start of a line,
forcing the reader to judge whether or not this "(" is the start of
the function's parameter profile.  Thus, "if the indentation is
lost...", then the brackets will surely leave many at loss.  (I don't
think that resorting to counting pairs of matching brackets counts as
a solution.)  Because

*) the distance between the function's name and
   its parameter profile is non-zero, and likely large;

*) the distinction between the two kinds of parameters is blurred,
   not made clear, by overloading () once more;

*) using sequences of ()s here introduces ambiguity (in the mind
   non-compiler readers) as entry families already use
   sequences of ()s in a similar context, but with different
   meaning.

The real problem for the reader of Ada generics seems to be finding
the spot where the generic formals end.

Interestingly, this problem is semi-solved in C++ (and Parasail).
Semi-solved because C++ template syntax is notorious for its
qualities, including >>, but nevertheless, there is no bracketing
problem in the sense of brackets marking a start-of-thing, and an
end-of-thing:

template <
   bla bla
> class T : ...


Here, the right angle bracket lets the reader see end of generic
formals. Voil�, the usual block structure!

Far from wanting to recommend the syntax of C++---why, when even C++
programmers frown upon it, it seems as though, in Ada, the left
bracket named "generic" would need some kind of matching right
bracket, since then the words "package", "function", and "procedure"
will not need to convey two meanings in the case of generic units
(end of formals, and kind of unit).




  parent reply	other threads:[~2012-08-29 13:33 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-28  8:13 Real syntax problems in Ada Dmitry A. Kazakov
2012-08-28 10:20 ` Georg Bauhaus
2012-08-28 10:47 ` Niklas Holsti
2012-08-28 11:33   ` J-P. Rosen
2012-08-31 13:35     ` Robert A Duff
2012-08-28 13:27 ` Vasiliy Molostov
2012-08-28 15:23   ` Dmitry A. Kazakov
2012-08-28 20:18     ` Vasiliy Molostov
2012-08-29  7:25       ` Dmitry A. Kazakov
2012-08-29 10:47         ` Vasiliy Molostov
2012-08-29 11:58           ` Dmitry A. Kazakov
2012-08-30 17:38             ` Vasiliy Molostov
2012-08-28 15:14 ` Adam Beneschan
2012-08-28 16:18   ` J-P. Rosen
2012-08-28 16:39   ` Dmitry A. Kazakov
2012-08-28 21:38     ` Randy Brukardt
2012-08-29  6:58       ` Dmitry A. Kazakov
2012-08-29 10:43         ` stefan-lucks
2012-08-29 10:58           ` stefan-lucks
2012-08-29 13:14           ` Niklas Holsti
2012-08-29 17:52             ` stefan-lucks
     [not found]             ` <fbps38pgcuf8fgioptt39s6u7dme1aqs7r@invalid.netcom.com>
2012-09-02 10:16               ` svaa
2012-08-29 13:33           ` Georg Bauhaus [this message]
2012-08-29 17:20             ` Jeffrey Carter
2012-08-29 17:51             ` stefan-lucks
2012-08-30  9:12               ` Georg Bauhaus
2012-08-28 21:49   ` Randy Brukardt
2012-08-28 23:09     ` Adam Beneschan
2012-08-29  7:34     ` Egil Høvik
2012-08-28 19:41 ` Florian Weimer
2012-08-28 20:53   ` Shark8
2012-08-28 21:07     ` Adam Beneschan
2012-08-28 21:25       ` Shark8
2012-08-28 22:59         ` Adam Beneschan
2012-08-29  7:06       ` Dmitry A. Kazakov
2012-08-30 21:08         ` Randy Brukardt
2012-08-30 22:06 ` sbelmont700
2012-08-30 22:34   ` Adam Beneschan
2012-08-30 22:54     ` William Findlay
2012-08-31  7:39     ` 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