We can't stop laughing at this at $work. Apparently PHP decided to add goto control structure!
So you say "okay, on the plus side, at least they remembered a really basic control structure" but then you say "who the hell uses goto in anything that _isn't_ assembly or _perhaps_ condensed C [that isn't a really oldschool person]?!"
Some people mentioned a few things good with GOTOs, and here is my 2 cents on them:
Remember when I started by asking "who the hell uses goto in anything that _isn't_ assembly or _perhaps_ condensed C?!"? After asking one of our PHP developers that question, I spit out another question without noticing: "Do they [the PHP developers themselves] have a lot of use for goto in PHP code they write?" and right after I thought "Do they write a lot of goto in C?"
Thus...
$ grep goto -r php-5.2.9 | wc -l
21848
But then I wondered...
$ grep goto -r perl-5.10.0 | wc -l
2513
Here's some more info:
(php has also extensions and a ton-load of documentation)
$ find php-5.2.9 -type f -iname '*.c' -or -iname '*.cpp' -or -iname '*.h' -exec cat {} \; | wc -l
149352
$ find php-5.2.9/win32/ php-5.2.9/Zend/ php-5.2.9/main/ -type f -iname '*.c' -or -iname '*.cpp' -or -iname '*.h' -exec cat {} \; | wc -l
48275
$ find perl-5.10.0 -type f -iname '*.c' -or -iname '*.cpp' -or -iname '*.h' -exec cat {} \; | wc -l
63785
note: SLOC does not equal productivity or quality
Worse is better, obviously (Score:2)
Sadly
gotois a useful construction in C, because the flow control primitives are, well, far more primitive than Perl. For example, you can only break out of the innermost loop.Perl's
gotohas something that isn't offered by C or PHP -goto &NAME[perl.org]. That form is really the only form that anyone should be using in Perl code, and then only when they know what they're doing and why. I don't know PHP, but either it has flow control structures as powerful as Perl's, in which casegotois not needed, or the fRe: (Score:1)
Thanks for providing more accurate (or.. much more accurate) finds
I also liked the explanation you gave on the use of gotos. I had a discussion about that with a colleague (who is a Python programmer) and we got around to labels and I tried to explain that Perl has label-aware loop commands. That you can
lastto a label. In PHP, you cancontinuean amount of loops outside (continue 3would exit 3 loops above) while apparently in Python you can't do either, onlybreakandloop.I guess what I'm saying is that
Re: (Score:1)
Oh, and I have no idea what the other files are. Maybe files that should be cleaned?
A quick plug for ack (Score:2)
is just
--cc means "C source and headers only", --cpp is "C++ source and headers only", -w means "word only".
Just install CPAN package App::Ack.
--
xoa
Re: (Score:1)
*beats head on wall*
Thanks Andy :)
stats - one third of perl C goto is toke (Score:1)
in the 5.8.9-rc1 that i had handy from a regression test
of 1270 C-ish file hits using Andy's ack invocation
nearly one third are in one file alone
403 toke.c
most of which and one quarter of the total being exactly
343 toke.c: goto unknown;
the long tail continues over 65 files, but a mere 5 files cover 50% in 5 a tie
403 toke.c
95 regexec.c
54 pp_sys.c
53 sv.c
39 opmini.c
39 op.c # tied for 5th
(subtotal 683 53%)
Bill
# I had a sig when sigs were cool
use Sig;
Oh my god, the statistics (Score:1)