comp.lang.ada
 help / color / mirror / Atom feed
* Proliferation of Reserved Words
@ 2021-05-31 20:51 Jeffrey R. Carter
  2021-05-31 21:27 ` Dmitry A. Kazakov
  2021-06-01 11:48 ` Luke A. Guest
  0 siblings, 2 replies; 15+ messages in thread
From: Jeffrey R. Carter @ 2021-05-31 20:51 UTC (permalink / raw)


Ada 83 (in)famously had 63 reserved words, which was considered a lot at the 
time (languages like C and Pascal had about half that). Considering only those 
related to tasking, there were 7:

abort accept do entry select task terminate

Yet many of these have similar/related meanings, and perhaps some overloading 
would have been a good idea.

entry and accept ... do go hand in hand. One could replace accept with something 
like an entry body, eliminating 2 reserved words.

An entry is very like a procedure, so one could use procedure instead. It might 
be necessary to distinguish between a "task procedure" (declared in a task spec) 
and a "normal procedure" (declared anywhere else). Another reserved word eliminated.

abort/terminate are pretty much the same thing. We could eliminate abort and 
just use terminate. (One could argue for using end, but given how often "end 
Name;" appears when not terminating a task, that would be confusing.)

So we're left with select, task, and terminate, less than half as many. I 
haven't looked in detail at the others, but presumably some reduction is 
possible there.

Ada 95 added protected and requeue. Some Ada-83 compilers implemented "passive 
tasks" that were similar to protected objects; formalizing that would have 
required defining pragma Passive, leaving no need for protected.

There may be a need for requeue, but I've only used it to work around the 
limitations on what a protected action may do, so I'm skeptical.

ISO/IEC 8652:2007 added synchronized. I think that could have simply reused task.

Ada 12 didn't expand this set of reserved words.

Ada 2X proposes adding parallel. Again, I think reusing task ("task begin" and 
"task loop") would be fine.

So we will have 11 tasking-related reserved words (unless I've missed some), but 
we only need select, task, and terminate (and maybe requeue), nearly a factor of 
4 difference.

Maybe Ada 3X will add concurrent, and then there won't be any tasking terms that 
aren't reserved words.

What do others think? Should Ada have made a greater effort at overloading 
reserved words from the beginning? Should we belatedly object to adding parallel 
when we have so many choices already? Or is having a large set of reserved 
words, many of them with similar meanings, a good thing?

-- 
Jeff Carter
"Spam! Spam! Spam! Spam! Spam! Spam! Spam! Spam!"
Monty Python's Flying Circus
53

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-05-31 20:51 Proliferation of Reserved Words Jeffrey R. Carter
@ 2021-05-31 21:27 ` Dmitry A. Kazakov
  2021-06-01  5:54   ` Randy Brukardt
  2021-06-01 11:48 ` Luke A. Guest
  1 sibling, 1 reply; 15+ messages in thread
From: Dmitry A. Kazakov @ 2021-05-31 21:27 UTC (permalink / raw)


On 2021-05-31 22:51, Jeffrey R. Carter wrote:

> What do others think? Should Ada have made a greater effort at 
> overloading reserved words from the beginning? Should we belatedly 
> object to adding parallel when we have so many choices already? Or is 
> having a large set of reserved words, many of them with similar 
> meanings, a good thing?

I believe that most of reserved keywords can be simply unreserved. 
Actually there is no syntactic necessity except for few. The rest is 
kept reserved for the sake of regularity only.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-05-31 21:27 ` Dmitry A. Kazakov
@ 2021-06-01  5:54   ` Randy Brukardt
  2021-06-01  7:40     ` Paul Rubin
                       ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Randy Brukardt @ 2021-06-01  5:54 UTC (permalink / raw)


At least twice it was proposed that Ada have "keywords", identifiers with 
special meaning in the syntax but that were not reserved. The last time (and 
I forget precisely when that was), the ARG had a slight majority in favor of 
unreserved keywords as well as reserved words. However, it was resoundly 
rejected at the WG 9 level. At that time, WG 9 still voted by countries, and 
it turned out that pretty much everyone in favor of unreserved keywords were 
from North America. Most Europeans were appalled. Of course, that meant a WG 
9 vote with 2 in favor and a large number against.

So whenever you think there are too many reserved words in Ada, be assured 
that it was repeatedly suggested that they not all be reserved, but certain 
countries would not allow it. At this point, we've given up, since it really 
would not help much - the majority of words that likely ever be reserved 
already are (it would most likely matter if a new proposal tried to reserve 
some commonly used term - "yield" came up some some proposals for Ada 202x 
that didn't go anywhere).

Jeff Carter should note the 8 different uses for "with" in the syntax before 
he accuses anyone of not reusing reserved words in Ada. It's just the case 
that it's hard to write something meaningful with the existing reserved 
words (we almost always try).

"parallel" is an interesting case. In my world view, it is wildly different 
from a task, because it is *checked*, does not *block* or *synchronize* with 
another thread (all synchronization is via objects or completion), is 
automatically created (in looping constructs) and therefore requires 
substantial less care than writing a task.  There is another world-view 
where essentially the checking is not worthwhile and ergo must be 
suppressed, that performance matters to the point at which a compiler isn't 
allowed to make choices, and essentially requires *more* care than a task. 
In that second world-view, parallel constructs are either harmful or 
worthless. But even there, having a keyword makes it a lot easier to avoid 
them than trying to figure out which libraries to block. :-)

                                                   Randy.

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:s93kci$1f55$1@gioia.aioe.org...
> On 2021-05-31 22:51, Jeffrey R. Carter wrote:
>
>> What do others think? Should Ada have made a greater effort at 
>> overloading reserved words from the beginning? Should we belatedly object 
>> to adding parallel when we have so many choices already? Or is having a 
>> large set of reserved words, many of them with similar meanings, a good 
>> thing?
>
> I believe that most of reserved keywords can be simply unreserved. 
> Actually there is no syntactic necessity except for few. The rest is kept 
> reserved for the sake of regularity only.
>
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de 


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-01  5:54   ` Randy Brukardt
@ 2021-06-01  7:40     ` Paul Rubin
  2021-06-03  8:48       ` Robin Vowels
  2021-06-01  9:51     ` Jeffrey R. Carter
  2021-06-01 16:06     ` Simon Wright
  2 siblings, 1 reply; 15+ messages in thread
From: Paul Rubin @ 2021-06-01  7:40 UTC (permalink / raw)


"Randy Brukardt" <randy@rrsoftware.com> writes:
> At least twice it was proposed that Ada have "keywords", identifiers with 
> special meaning in the syntax but that were not reserved.

I remember this as a fundamental decision of PL/I that made PL/I quite
hard to parse using the automata-based methods developed not long
afterwards.  I don't know what consequences that had for PL/I or
anything else, if any.  But I think it was retrospectively considered a
mistake.  It's a lot easier to separate parsing and scanning if you can
have reserved words.

OTOH I know that C compilers sometimes (usually?) handle typedefs by
having the parser tell the scanner to treat the typedef name as
keyword-like, after it sees that a typedef has been defined.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-01  5:54   ` Randy Brukardt
  2021-06-01  7:40     ` Paul Rubin
@ 2021-06-01  9:51     ` Jeffrey R. Carter
  2021-06-01 16:06     ` Simon Wright
  2 siblings, 0 replies; 15+ messages in thread
From: Jeffrey R. Carter @ 2021-06-01  9:51 UTC (permalink / raw)


On 6/1/21 7:54 AM, Randy Brukardt wrote:
> At least twice it was proposed that Ada have "keywords", identifiers with
> special meaning in the syntax but that were not reserved.

Unreserved keywords are one approach, though I'm not aware if they come with any 
negatives. Then the question becomes which reserved words could become 
unreserved keywords. (This can be restricted to reserved words related to 
tasking/concurrency to avoid going through all the reserved words.)

> At that time, WG 9 still voted by countries

Does that imply that the voting has since changed and such a proposal might now 
be accepted?

> Jeff Carter should note the 8 different uses for "with" in the syntax before
> he accuses anyone of not reusing reserved words in Ada. It's just the case
> that it's hard to write something meaningful with the existing reserved
> words (we almost always try).

I agree that the ARG has done a good job in reusing reserved words in many 
cases, "with" being the most obvious. I concentrated on tasking/concurrency 
reserved words since that seems to be an exception.

-- 
Jeff Carter
"Violence is the last refuge of the incompetent."
Foundation
151

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-05-31 20:51 Proliferation of Reserved Words Jeffrey R. Carter
  2021-05-31 21:27 ` Dmitry A. Kazakov
@ 2021-06-01 11:48 ` Luke A. Guest
  2021-06-02 18:13   ` AdaMagica
  1 sibling, 1 reply; 15+ messages in thread
From: Luke A. Guest @ 2021-06-01 11:48 UTC (permalink / raw)


On 31/05/2021 21:51, Jeffrey R. Carter wrote:
> Ada 83 (in)famously had 63 reserved words, which was considered a lot at 
> the time (languages like C and Pascal had about half that). Considering 
> only those related to tasking, there were 7:
> 
> abort accept do entry select task terminate

I think you're about 40 years too late to complain now :P

Luke.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-01  5:54   ` Randy Brukardt
  2021-06-01  7:40     ` Paul Rubin
  2021-06-01  9:51     ` Jeffrey R. Carter
@ 2021-06-01 16:06     ` Simon Wright
  2 siblings, 0 replies; 15+ messages in thread
From: Simon Wright @ 2021-06-01 16:06 UTC (permalink / raw)


"Randy Brukardt" <randy@rrsoftware.com> writes:

> At least twice it was proposed that Ada have "keywords", identifiers with 
> special meaning in the syntax but that were not reserved. The last time (and 
> I forget precisely when that was), the ARG had a slight majority in favor of 
> unreserved keywords as well as reserved words. 

interface, perhaps? I know we had quite a few identifiers with that
spelling!

TextUML is case-sensitive, so if you want to use a keyword as an
identifier you can capitalize it, or prefix it with a backslash

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-01 11:48 ` Luke A. Guest
@ 2021-06-02 18:13   ` AdaMagica
  2021-06-02 19:21     ` Dmitry A. Kazakov
                       ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: AdaMagica @ 2021-06-02 18:13 UTC (permalink / raw)


accept, entry vs. procedure, procedure body

This discussion really is 40 years late. But entries and procedures are in fact very different beasts.
A procedure is reentrant and has exactly one body.
An entry is not reentrant and cannot be called recursively; it has no body, rather it may have as many accept statements as you like or feel necessary (it may even have none - what the heck!).

So different keywords for them are quite reasonable.

Thinking about this:
Ultimatey, we could perhaps do with just one reserved word called keyword. Depending on the place where is stands makes it clear what it means:
keyword I keyword 1..10 keyword
  X(I) := I + 1;
Keyword;

Hm, perhaps a bit extreme :-)


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-02 18:13   ` AdaMagica
@ 2021-06-02 19:21     ` Dmitry A. Kazakov
  2021-06-02 20:13       ` Chris Townley
  2021-06-02 20:18     ` Jeffrey R. Carter
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 15+ messages in thread
From: Dmitry A. Kazakov @ 2021-06-02 19:21 UTC (permalink / raw)


On 2021-06-02 20:13, AdaMagica wrote:

> This discussion really is 40 years late. But entries and procedures are in fact very different beasts.
> A procedure is reentrant and has exactly one body.
> An entry is not reentrant and cannot be called recursively; it has no body, rather it may have as many accept statements as you like or feel necessary (it may even have none - what the heck!).

Yes, but I would argue that these are implementation details. It might 
have sense to consider them having same interface, as we do now, after 
the dot-notation was introduced. In Ada 83 it was not so.

> So different keywords for them are quite reasonable.

So long the implementation details leak, as we have no tagged tasks and 
protected objects and no multiple dispatch. Otherwise all calling 
notations could be made fully equivalent for all bodies.

> Thinking about this:
> Ultimatey, we could perhaps do with just one reserved word called keyword. Depending on the place where is stands makes it clear what it means:
> keyword I keyword 1..10 keyword
>    X(I) := I + 1;
> Keyword;

Yes, one needs only one pair of delimiters. It reminds me construction 
of Z in ZFS using sets:

    0 = Ø
    1 = {Ø}
    2 = {{Ø}}
    ...

Similarly the for-loop could be:

   (<index>, <from>, <to>, <body>)

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-02 19:21     ` Dmitry A. Kazakov
@ 2021-06-02 20:13       ` Chris Townley
  0 siblings, 0 replies; 15+ messages in thread
From: Chris Townley @ 2021-06-02 20:13 UTC (permalink / raw)


On 02/06/2021 20:21, Dmitry A. Kazakov wrote:

> 
> Yes, one needs only one pair of delimiters. It reminds me construction 
> of Z in ZFS using sets:
> 
>     0 = Ø
>     1 = {Ø}
>     2 = {{Ø}}
>     ...
> 
> Similarly the for-loop could be:
> 
>    (<index>, <from>, <to>, <body>)
> 

Reminds me of extensive code I supported in VMS Basic - after 1500 odd 
lines, the procedure ended with:

UNLESS Z

Z was not a local variable - global.

Try searching a massive code base for Z...

Took awhile dredging through the various callers


-- 
Chris

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-02 18:13   ` AdaMagica
  2021-06-02 19:21     ` Dmitry A. Kazakov
@ 2021-06-02 20:18     ` Jeffrey R. Carter
  2021-06-02 23:23     ` Bill Findlay
  2021-06-03 23:58     ` Keith Thompson
  3 siblings, 0 replies; 15+ messages in thread
From: Jeffrey R. Carter @ 2021-06-02 20:18 UTC (permalink / raw)


On 6/2/21 8:13 PM, AdaMagica wrote:
> accept, entry vs. procedure, procedure body
> 
> This discussion really is 40 years late.

Regarding what we have in Ada, sure. Regarding whether we can or should do more 
to avoid new reserved words in the future, no. And if there is ever a successor 
language, this is something that should be considered.

> But entries and procedures are in fact very different beasts.

Under the hood, yes. In appearance and how they are called, not so much. And 
that seems like the important thing.

> Ultimatey, we could perhaps do with just one reserved word called keyword. Depending on the place where is stands makes it clear what it means:
> keyword I keyword 1..10 keyword
>    X(I) := I + 1;
> Keyword;

I'm pretty sure that last line should be

keyword keyword;

> Hm, perhaps a bit extreme :-)

Well, some people write Whitespace, but for Ada, probably.

-- 
Jeff Carter
"I did not rob a bank. If I'd robbed a bank, everything
would be great. I tried to rob a bank, is what happened,
and they got me."
Take the Money and Run
139

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-02 18:13   ` AdaMagica
  2021-06-02 19:21     ` Dmitry A. Kazakov
  2021-06-02 20:18     ` Jeffrey R. Carter
@ 2021-06-02 23:23     ` Bill Findlay
  2021-06-03 23:58     ` Keith Thompson
  3 siblings, 0 replies; 15+ messages in thread
From: Bill Findlay @ 2021-06-02 23:23 UTC (permalink / raw)


On 2 Jun 2021, AdaMagica wrote
(in article<827c60f6-b008-468b-9ab4-cf110edff252n@googlegroups.com>):

> Thinking about this:

> Ultimatey, we could perhaps do with just one reserved word called keyword.
> Depending on the place where is stands makes it clear what it means:

> keyword I keyword 1..10 keyword
> X(I) := I + 1;
> Keyword;

Should that not finish off thus:

keyword keyword;

? 8-)
-- 
Bill Findlay

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-01  7:40     ` Paul Rubin
@ 2021-06-03  8:48       ` Robin Vowels
  0 siblings, 0 replies; 15+ messages in thread
From: Robin Vowels @ 2021-06-03  8:48 UTC (permalink / raw)


On Tuesday, June 1, 2021 at 5:40:53 PM UTC+10, Paul Rubin wrote:
> "Randy Brukardt" <ra...@rrsoftware.com> writes: 
> > At least twice it was proposed that Ada have "keywords", identifiers with 
> > special meaning in the syntax but that were not reserved.
.
> I remember this as a fundamental decision of PL/I that made PL/I quite 
> hard to parse using the automata-based methods developed not long 
> afterwards. I don't know what consequences that had for PL/I or 
> anything else, if any. But I think it was retrospectively considered a 
> mistake.
.
It was definitely never considered a mistake in PL/I.
Not having reserved words means that you do not have
to steer clear of using any particular words when you
design a program.
It also means that a program will continue to compile
even when new keywords are introduced into the language.
Over the years, new keywords were introduced into PL/I,
without invalidating existing programs.
.
Reserved words are the bane of COBOL.
.
> It's a lot easier to separate parsing and scanning if you can 
> have reserved words.
> 
> OTOH I know that C compilers sometimes (usually?) handle typedefs by 
> having the parser tell the scanner to treat the typedef name as 
> keyword-like, after it sees that a typedef has been defined.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-02 18:13   ` AdaMagica
                       ` (2 preceding siblings ...)
  2021-06-02 23:23     ` Bill Findlay
@ 2021-06-03 23:58     ` Keith Thompson
  2021-06-04  6:58       ` Dmitry A. Kazakov
  3 siblings, 1 reply; 15+ messages in thread
From: Keith Thompson @ 2021-06-03 23:58 UTC (permalink / raw)


AdaMagica <christ-usch.grein@t-online.de> writes:
> accept, entry vs. procedure, procedure body
>
> This discussion really is 40 years late. But entries and procedures are in fact very different beasts.
> A procedure is reentrant and has exactly one body.
> An entry is not reentrant and cannot be called recursively; it has no body, rather it may have as many accept statements as you like or feel necessary (it may even have none - what the heck!).
>
> So different keywords for them are quite reasonable.
>
> Thinking about this:
> Ultimatey, we could perhaps do with just one reserved word called keyword. Depending on the place where is stands makes it clear what it means:
> keyword I keyword 1..10 keyword
>   X(I) := I + 1;
> Keyword;
>
> Hm, perhaps a bit extreme :-)

In a case-sensitive language, you can have 128 variations of "keyword".

keyword I Keyword 1..10 keyWord
  X(I) := I + 1;
keyworD keyWord

Much more legible.

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
Working, but not speaking, for Philips Healthcare
void Void(void) { Void(); } /* The recursive call of the void */

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Proliferation of Reserved Words
  2021-06-03 23:58     ` Keith Thompson
@ 2021-06-04  6:58       ` Dmitry A. Kazakov
  0 siblings, 0 replies; 15+ messages in thread
From: Dmitry A. Kazakov @ 2021-06-04  6:58 UTC (permalink / raw)


On 2021-06-04 01:58, Keith Thompson wrote:
> AdaMagica <christ-usch.grein@t-online.de> writes:
>> accept, entry vs. procedure, procedure body
>>
>> This discussion really is 40 years late. But entries and procedures are in fact very different beasts.
>> A procedure is reentrant and has exactly one body.
>> An entry is not reentrant and cannot be called recursively; it has no body, rather it may have as many accept statements as you like or feel necessary (it may even have none - what the heck!).
>>
>> So different keywords for them are quite reasonable.
>>
>> Thinking about this:
>> Ultimatey, we could perhaps do with just one reserved word called keyword. Depending on the place where is stands makes it clear what it means:
>> keyword I keyword 1..10 keyword
>>    X(I) := I + 1;
>> Keyword;
>>
>> Hm, perhaps a bit extreme :-)
> 
> In a case-sensitive language, you can have 128 variations of "keyword".

In a Unicode language it is much more, because many Latin glyphs like k, 
e, y, o repeat in other alphabets. Furthermore, F, K, C appear as 
special entries as degrees etc.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-06-04  6:58 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-31 20:51 Proliferation of Reserved Words Jeffrey R. Carter
2021-05-31 21:27 ` Dmitry A. Kazakov
2021-06-01  5:54   ` Randy Brukardt
2021-06-01  7:40     ` Paul Rubin
2021-06-03  8:48       ` Robin Vowels
2021-06-01  9:51     ` Jeffrey R. Carter
2021-06-01 16:06     ` Simon Wright
2021-06-01 11:48 ` Luke A. Guest
2021-06-02 18:13   ` AdaMagica
2021-06-02 19:21     ` Dmitry A. Kazakov
2021-06-02 20:13       ` Chris Townley
2021-06-02 20:18     ` Jeffrey R. Carter
2021-06-02 23:23     ` Bill Findlay
2021-06-03 23:58     ` Keith Thompson
2021-06-04  6:58       ` Dmitry A. Kazakov

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