comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Real syntax problems in Ada
Date: Wed, 29 Aug 2012 16:14:32 +0300
Date: 2012-08-29T16:14:32+03:00	[thread overview]
Message-ID: <aa6itiFh6fU1@mid.individual.net> (raw)
In-Reply-To: <Pine.LNX.4.64.1208291146070.20257@medsec1.medien.uni-weimar.de>

On 12-08-29 13:43 , stefan-lucks@see-the.signature wrote:
> On Wed, 29 Aug 2012, Dmitry A. Kazakov wrote:
> 
>> No, I meant rather this:
>>
>>    generic package P (Foo : function return Integer; Q : package...) is ...
> 
> 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"?

You may be right, but surely the syntax is very easy to teach and learn:
if you want to make a subprogram or a package generic, stick "generic"
and the list of generic formals in front of the "package", "procedure"
or "function".

> If the indention is lost,

An artificial assumption.

> even Ada-programmers would have problems to find 
> out *what* is generically declared (a function) and what its name is 
> ("Minimum").

Not really. Start from the end and scan backwards until you find
"package", "procedure", or "function". Or start from the beginning and
find "package", "procedure", or "function" that is not immediately
preceded by "with".

> 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.

There is always a different opinion... I think it is much less readable,
because the separation between the list of generic formals and
subprogram formals is much less visible.

If Ada syntax is changed to put the name of the generic unit before the
formal parameters, I should want to require "with" before every generic
formal, and all within a single set of parentheses. Like this:

   generic function Minimum (
      with type Item is private;
      with type Many_Items is array (Natural range <>) of Item;
      with function "<" (Left, Right : Item) return Boolean is <>;
      List : Many_Items)
   return Item;

But as I said, I much prefer the current syntax.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
      .      @       .



  parent reply	other threads:[~2012-08-29 13:14 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 [this message]
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
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