IMO, Niklaus Wirth, when designing Pascal, decided to discourage the
use of goto as much as possible. OTOH, he was not courageous enough
to leave goto and labels out of the language. So he came to this decision,
to allow numbers as labels only, and to force them to be declared before
using
them.
When I started working on the Stanford Pascal compiler, it had 6.000
lines of
code (ca.) and many labels. Because they are often local to a procedure,
they
have numbers like 1, 2 or 10. They were used to leave loops (aka break)
or restart loops (aka continue) or to leave procedures or functions (aka
return).
I added BREAK, CONTINUE and RETURN as normal control statements,
much the way as C has it. This way, many labels (and gotos) could be
eliminated.
The compiler today has about 19.000 lines and only six goto statements.
(six different labels, 3 times label 1; - 3 times label 10;).
I could sure get rid of these remaining goto's, too.
This, for example, could be immediately replaced by CONTINUE; a no-brainer:
while SY = SYCOMMA do
begin
INSYMBOL ;
CONSTANT ( FSYS + [ SYCOMMA , SYRPARENT ] , LSP1 ,
LVAL ) ;
VARTS := VARTS + 1 ;
(*****************************************)
(* CHECK TO INSERT HERE: *)
(* IS CONSTANT IN TAGFIELDTYPE RANGE *)
(*****************************************)
if LSP = NIL then
ERROR ( 158 )
else
if LSP -> . FORM <> TAGFLD then
ERROR ( 162 )
else
if LSP -> . TAGFIELDP <> NIL then
if IS_CARRAY ( LSP1 ) or IS_STDTYPE ( LSP1 ,
'R' ) then
ERROR ( 159 )
else
if COMPTYPES ( LSP -> . TAGFIELDP -> .
IDTYPE , LSP1 ) = 1 then
begin
LSP1 := LSP -> . FSTVAR ;
while LSP1 <> NIL do
with LSP1 -> do
if VARVAL . IVAL = LVAL . IVAL
then
begin
LSIZE := SIZE ;
LSP := SUBVAR ;
goto 1
end (* then *)
else
LSP1 := NXTVAR ;
LSIZE := LSP -> . SIZE ;
LSP := NIL ;
end (* then *)
else
ERROR ( 116 ) ;
1 :
end (* while *) ;
Back to ASSEMBLER:
at my former customer's site, we used a home-grown (and very powerful)
version
of SP macros exclusively. The use of branch instructions was forbidden,
and every time
an old module containing them needed maintenance, we removed them and
inserted
SP macros. There were even test tools that used the SP macros as points
of control
(breakpoint candidates for home grown debugging tools etc.); the control
flow was
monitored based on the branches defined by these SP macros (for example:
how often was the THEN branch of an IF executed in a certain test run
compared
to the ELSE branch etc.). The same tool was used for PL/1, too.
So: if you forbid branches aka gotos, you don't need alphanumeric labels;
you don't need labels at all.
It seems somehow strange to me that we talk about OO concepts in this
thread,
and at the same time we talk about goto statements. This has absolutely
nothing
to do with languages, but with modern or antique software development
paradigms.
Kind regards
Bernd
Am 16.02.2018 um 06:44 schrieb Jon Perryman:
Seymour is talking about maintainable large amounts of code should have at
least alphanumeric labels. Numeric labels can be confusing unless you have a
really good numbering scheme. I suspect most programmers would not use numeric
labels unless forced.
Regards, Jon.
On Thursday, February 15, 2018 7:47 PM, Robin Vowels <robi...@dodo.com.au>
wrote:
From: "Seymour J Metz" <sme...@gmu.edu>
Sent: Friday, February 16, 2018 3:58 AM
Numeric labels are okay for write-only code. They are very bad in code that has
to be maintained.
Eh?
Labels are labels.
It doesn't matter whether they are alphabetic, alphanumeric, or numeric.
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus