|
Date: Mon, 27 Apr 2009 03:36:03 -0700
From: rpg400-l@xxxxxxxxxxxxxxxx
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Why was GOTO removed from /free?
John,
I read the blog you're pointing to prior to replying. It did nothing to
change my opinion of GOTO. Please understand that the debate about GOTO
has been raging for at least 40 years, and we're really unlikely to
solve the question here.
Here's a link that discusses both sides of the question:
http://www.stevemcconnell.com/ccgoto.htm
But, I can only give my opinion. And my opinion is that RPG is better
off without GOTO in /free format.
It's important to understand that the vast majority of a programmer's
time is NOT spent writing code. It's spend reading and understanding
someone else's code so they know which part of the code needs to be
modified, which parts can be ignored, which parts aren't modified, but
still need to be re-tested, etc.
Even if you use GOTOs in the best possible way, it will take me longer
to read and understand your program flow because any point in the
program can jump to any other point in the program. You say that's a
non-issue because you'll use the goto "correctly" -- but if I'm reading
your program, how will I *know* that without taking the time to read
everything? However, if there are no GOTOs allowed in the language, I
don't have to worry about it.
IBM has provided op-codes like LEAVE, ITER, LEAVESR, RETURN,
MONITOR/ENDMON to make it easy to do the "good" style of GOTO without
using the actual GOTO statement. With those statements you can do the
"good" part of GOTO without resorting to GOTO opcode that causes so many
problems.
I dunno... I think we'll just have to agree to disagree.
john e wrote:
I think the problem is with the people, not the tools.
Developers writing bad code using goto still write bad code without the goto.
goto... IMHO, it's never actually BETTER with the goto. Not having it
forces people to structure their code around the way the program is
SUPPOSED to flow, and leads to better code in the long run.
In "normal" circumstances, yes, but in the case of error handling using goto can really make the code much more clean.
See the articles below for other opinions about this.
There really seems to be a consensus that using "goto" in a classic language like C or RPG (no exception handling) in situations where in case of an error the "supposed" flow of the code is to escape to "clean-up" code is much cleaner than using multiple nested ifs etc.
I know it's still available in "fixed" format, but in practice this actually means it's gone. You really don't want to code
/end-free
goto out;
/free
And i really don't know what practical problem this solves. You don't get clean code just be removing the "goto". Besides not many new RPG code is being written. The bulk of RPG is maintanance code which probably uses "goto". Now this code can't be easily converted to /free without the code being littered with /end-free .. /free. The removal of "goto" brings more problems than it solves, IMO.
The problem of abuse of goto is not solved with the removal, because most "abusers" are probably programmers which 90% of their time do maintenance now. And it's now more difficult to persuade them to convert to /free because of the ugly code littered with /free .. /end-free.
RPG is NOT "modern" such that goto is not necessary.
Date: Mon, 27 Apr 2009 02:19:11 -0700
From: rpg400-l@xxxxxxxxxxxxxxxx
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Why was GOTO removed from /free?
My personal opinion is that GOTO is a bad thing to have in a modern
language. I agree with the plethora of papers and articles that have
said this.
I do see your point to a degree. It's possible to use GOTO in a way
that isn't too bad... the problem is that it always starts out that
innocently, but then gets overused and leads to a mess. Usually, at
best, the code with the goto is "just as clean as" code without the
goto... IMHO, it's never actually BETTER with the goto. Not having it
forces people to structure their code around the way the program is
SUPPOSED to flow, and leads to better code in the long run.
Just my opinion.
Regarding it being "removed" from /free -- it wasn't removed, because it
was never in /free. The fixed format GOTO is still there, and can still
be used as always.
I have been writing GOTO-free RPG code now for 15 years (I started in
RPG/400) and at first it was really hard to get the hang of, and I felt
as you do that it was cumbersome and that I was avoiding it for no good
reason. But after doing it for awhile I found the gotoless code nicer.
Now, after so long, I would never even consider going back.
Also, RPG *does* support exceptions, although I wish IBM would make them
simpler to use -- but I do use those as well.
john e wrote:
Without giving something back...?
For clean error handling "goto" is often the best choice in a classic language (yes RPG is still classic, like C).
What problem has been solved now by just removing goto from RPG as we don't have exception handling in RPG as we have in C++ or Java?
http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c/
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.