* [TUHS] I can't drive 55: "GOTO considered harmful" 55th anniversary @ 2023-03-09 23:01 Steffen Nurpmeso 2023-03-09 23:18 ` [TUHS] " segaloco via TUHS 0 siblings, 1 reply; 22+ messages in thread From: Steffen Nurpmeso @ 2023-03-09 23:01 UTC (permalink / raw) To: tuhs I wonder if Pink Floyd's Summer68 maybe refers to this. Other than that i am addicted and could not live without it. The other (terrible) song is from 1984 (east southern US). --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:01 [TUHS] I can't drive 55: "GOTO considered harmful" 55th anniversary Steffen Nurpmeso @ 2023-03-09 23:18 ` segaloco via TUHS 2023-03-09 23:21 ` Warner Losh 2023-03-10 1:31 ` [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary Rich Morin 0 siblings, 2 replies; 22+ messages in thread From: segaloco via TUHS @ 2023-03-09 23:18 UTC (permalink / raw) To: Steffen Nurpmeso; +Cc: tuhs GOTO is one of those paradoxical things where I would only trust the most sophisticated engineer to know when it's acceptable to use a GOTO but on the flip side would be suspicious of anyone claiming to be an engineer that uses any amount of GOTOs... Were any of the various GOTOs in languages ever meant to be any more than providing the same level of control that branch statements in assembly do? Was there ever some vision anyone's aware of concerning a sophisticated, dependable use of GOTOs? Since my first days poking around learning C GOTO has been mentally filed away as an assembly vestige for folks in transition, not a dependable construct in its own right. Any alternative camps out there? - Matt G. ------- Original Message ------- On Thursday, March 9th, 2023 at 3:01 PM, Steffen Nurpmeso <steffen@sdaoden.eu> wrote: > I wonder if Pink Floyd's Summer68 maybe refers to this. > Other than that i am addicted and could not live without it. > The other (terrible) song is from 1984 (east southern US). > > --steffen > | > |Der Kragenbaer, The moon bear, > |der holt sich munter he cheerfully and one by one > |einen nach dem anderen runter wa.ks himself off > |(By Robert Gernhardt) ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:18 ` [TUHS] " segaloco via TUHS @ 2023-03-09 23:21 ` Warner Losh 2023-03-09 23:31 ` Luther Johnson 2023-03-10 6:15 ` Dave Horsfall 2023-03-10 1:31 ` [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary Rich Morin 1 sibling, 2 replies; 22+ messages in thread From: Warner Losh @ 2023-03-09 23:21 UTC (permalink / raw) To: segaloco; +Cc: The Eunuchs Hysterical Society [-- Attachment #1: Type: text/plain, Size: 1450 bytes --] On Thu, Mar 9, 2023, 4:18 PM segaloco via TUHS <tuhs@tuhs.org> wrote: > GOTO is one of those paradoxical things where I would only trust the most > sophisticated engineer to know when it's acceptable to use a GOTO but on > the flip side would be suspicious of anyone claiming to be an engineer that > uses any amount of GOTOs... > > Were any of the various GOTOs in languages ever meant to be any more than > providing the same level of control that branch statements in assembly do? > Was there ever some vision anyone's aware of concerning a sophisticated, > dependable use of GOTOs? Since my first days poking around learning C GOTO > has been mentally filed away as an assembly vestige for folks in > transition, not a dependable construct in its own right. Any alternative > camps out there? > In C I use it all the time to do goto err for common error recovery because C doesn't have anything better. Warner > - Matt G. > > ------- Original Message ------- > On Thursday, March 9th, 2023 at 3:01 PM, Steffen Nurpmeso < > steffen@sdaoden.eu> wrote: > > > > I wonder if Pink Floyd's Summer68 maybe refers to this. > > Other than that i am addicted and could not live without it. > > The other (terrible) song is from 1984 (east southern US). > > > > --steffen > > | > > |Der Kragenbaer, The moon bear, > > |der holt sich munter he cheerfully and one by one > > |einen nach dem anderen runter wa.ks himself off > > |(By Robert Gernhardt) > [-- Attachment #2: Type: text/html, Size: 2174 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:21 ` Warner Losh @ 2023-03-09 23:31 ` Luther Johnson 2023-03-09 23:44 ` josh 2023-03-09 23:54 ` Warner Losh 2023-03-10 6:15 ` Dave Horsfall 1 sibling, 2 replies; 22+ messages in thread From: Luther Johnson @ 2023-03-09 23:31 UTC (permalink / raw) To: tuhs [-- Attachment #1: Type: text/plain, Size: 2009 bytes --] I agree, unless I use setjmp/longjmp for that. Besides error recovery, there are occasionally other times when we want to locally "return" to a common state and start "from the top" again. I find such uses very clear in their intent, and if commented well, not hard to follow at all - as long as there is not more than one "top" :) On 03/09/2023 04:21 PM, Warner Losh wrote: > > > On Thu, Mar 9, 2023, 4:18 PM segaloco via TUHS <tuhs@tuhs.org > <mailto:tuhs@tuhs.org>> wrote: > > GOTO is one of those paradoxical things where I would only trust > the most sophisticated engineer to know when it's acceptable to > use a GOTO but on the flip side would be suspicious of anyone > claiming to be an engineer that uses any amount of GOTOs... > > Were any of the various GOTOs in languages ever meant to be any > more than providing the same level of control that branch > statements in assembly do? Was there ever some vision anyone's > aware of concerning a sophisticated, dependable use of GOTOs? > Since my first days poking around learning C GOTO has been > mentally filed away as an assembly vestige for folks in > transition, not a dependable construct in its own right. Any > alternative camps out there? > > > > In C I use it all the time to do goto err for common error recovery > because C doesn't have anything better. > > Warner > > - Matt G. > > ------- Original Message ------- > On Thursday, March 9th, 2023 at 3:01 PM, Steffen Nurpmeso > <steffen@sdaoden.eu <mailto:steffen@sdaoden.eu>> wrote: > > > > I wonder if Pink Floyd's Summer68 maybe refers to this. > > Other than that i am addicted and could not live without it. > > The other (terrible) song is from 1984 (east southern US). > > > > --steffen > > | > > |Der Kragenbaer, The moon bear, > > |der holt sich munter he cheerfully and one by one > > |einen nach dem anderen runter wa.ks himself off > > |(By Robert Gernhardt) > [-- Attachment #2: Type: text/html, Size: 3893 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:31 ` Luther Johnson @ 2023-03-09 23:44 ` josh 2023-03-09 23:54 ` Warner Losh 1 sibling, 0 replies; 22+ messages in thread From: josh @ 2023-03-09 23:44 UTC (permalink / raw) To: Luther Johnson; +Cc: tuhs [-- Attachment #1: Type: text/plain, Size: 755 bytes --] This blog post compares the clarity of a number of programs written with goto vs. with other control flow methods: https://blog.joren.ga/gotophobia-harmful Knuth’s “Structured Programming with go to Statements” argues that we eventually missed the main point of structured programming by focusing too much on goto. https://pic.plover.com/knuth-GOTO.pdf Error handling (especially in loops or when releasing resources in non-RAII languages) and implementing state machines are commonly brought up as cases where goto is more fitting than common “structured” control flow statements. I think some newer languages like Zig extend the “break” mechanism to let you break to a label, so that sort of covers the first case. Josh [-- Attachment #2: Type: text/html, Size: 922 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:31 ` Luther Johnson 2023-03-09 23:44 ` josh @ 2023-03-09 23:54 ` Warner Losh 2023-03-10 0:54 ` segaloco via TUHS 1 sibling, 1 reply; 22+ messages in thread From: Warner Losh @ 2023-03-09 23:54 UTC (permalink / raw) To: Luther Johnson; +Cc: The Eunuchs Hysterical Society [-- Attachment #1: Type: text/plain, Size: 2083 bytes --] Oh also sometimes for breaking out of multiple levels of while/for loops. The alternatives are often worse. Warner On Thu, Mar 9, 2023, 4:31 PM Luther Johnson <luther@makerlisp.com> wrote: > I agree, unless I use setjmp/longjmp for that. Besides error recovery, > there are occasionally other times when we want to locally "return" to a > common state and start "from the top" again. I find such uses very clear in > their intent, and if commented well, not hard to follow at all - as long as > there is not more than one "top" :) > On 03/09/2023 04:21 PM, Warner Losh wrote: > > > > On Thu, Mar 9, 2023, 4:18 PM segaloco via TUHS <tuhs@tuhs.org> wrote: > >> GOTO is one of those paradoxical things where I would only trust the most >> sophisticated engineer to know when it's acceptable to use a GOTO but on >> the flip side would be suspicious of anyone claiming to be an engineer that >> uses any amount of GOTOs... >> >> Were any of the various GOTOs in languages ever meant to be any more than >> providing the same level of control that branch statements in assembly do? >> Was there ever some vision anyone's aware of concerning a sophisticated, >> dependable use of GOTOs? Since my first days poking around learning C GOTO >> has been mentally filed away as an assembly vestige for folks in >> transition, not a dependable construct in its own right. Any alternative >> camps out there? >> > > > In C I use it all the time to do goto err for common error recovery > because C doesn't have anything better. > > Warner > >> - Matt G. >> >> ------- Original Message ------- >> On Thursday, March 9th, 2023 at 3:01 PM, Steffen Nurpmeso < >> steffen@sdaoden.eu> wrote: >> >> >> > I wonder if Pink Floyd's Summer68 maybe refers to this. >> > Other than that i am addicted and could not live without it. >> > The other (terrible) song is from 1984 (east southern US). >> > >> > --steffen >> > | >> > |Der Kragenbaer, The moon bear, >> > |der holt sich munter he cheerfully and one by one >> > |einen nach dem anderen runter wa.ks himself off >> > |(By Robert Gernhardt) >> > > [-- Attachment #2: Type: text/html, Size: 4151 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:54 ` Warner Losh @ 2023-03-10 0:54 ` segaloco via TUHS 2023-03-10 1:08 ` Warner Losh 0 siblings, 1 reply; 22+ messages in thread From: segaloco via TUHS @ 2023-03-10 0:54 UTC (permalink / raw) To: Warner Losh; +Cc: The Eunuchs Hysterical Society [-- Attachment #1: Type: text/plain, Size: 2774 bytes --] I guess I hadn't considered deeply nested loops. I contort myself into a mental pretzel figuring out how to avoid GOTOs sometimes, maybe I could stand to embrace one every once in a while myself... Now doing some research, more languages support GOTO than I thought, including C#, PHP, even Rust for all its safety orientation appears to at least muster a GOTO-ish construct. If people keep doing it, it must still be wanted, needed, and useful. I stand corrected on my never-GOTO attitude. Now to slip a GOTO into a work project and see how long it takes to get chastised :) - Matt G. ------- Original Message ------- On Thursday, March 9th, 2023 at 3:54 PM, Warner Losh <imp@bsdimp.com> wrote: > Oh also sometimes for breaking out of multiple levels of while/for loops. The alternatives are often worse. > > Warner > > On Thu, Mar 9, 2023, 4:31 PM Luther Johnson <luther@makerlisp.com> wrote: > >> I agree, unless I use setjmp/longjmp for that. Besides error recovery, there are occasionally other times when we want to locally "return" to a common state and start "from the top" again. I find such uses very clear in their intent, and if commented well, not hard to follow at all - as long as there is not more than one "top" :) >> >> On 03/09/2023 04:21 PM, Warner Losh wrote: >> >>> On Thu, Mar 9, 2023, 4:18 PM segaloco via TUHS <tuhs@tuhs.org> wrote: >>> >>>> GOTO is one of those paradoxical things where I would only trust the most sophisticated engineer to know when it's acceptable to use a GOTO but on the flip side would be suspicious of anyone claiming to be an engineer that uses any amount of GOTOs... >>>> >>>> Were any of the various GOTOs in languages ever meant to be any more than providing the same level of control that branch statements in assembly do? Was there ever some vision anyone's aware of concerning a sophisticated, dependable use of GOTOs? Since my first days poking around learning C GOTO has been mentally filed away as an assembly vestige for folks in transition, not a dependable construct in its own right. Any alternative camps out there? >>> >>> In C I use it all the time to do goto err for common error recovery because C doesn't have anything better. >>> >>> Warner >>> >>>> - Matt G. >>>> >>>> ------- Original Message ------- >>>> On Thursday, March 9th, 2023 at 3:01 PM, Steffen Nurpmeso <steffen@sdaoden.eu> wrote: >>>> >>>>> I wonder if Pink Floyd's Summer68 maybe refers to this. >>>>> Other than that i am addicted and could not live without it. >>>>> The other (terrible) song is from 1984 (east southern US). >>>>> >>>>> --steffen >>>>> | >>>>> |Der Kragenbaer, The moon bear, >>>>> |der holt sich munter he cheerfully and one by one >>>>> |einen nach dem anderen runter wa.ks himself off >>>>> |(By Robert Gernhardt) [-- Attachment #2: Type: text/html, Size: 5408 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 0:54 ` segaloco via TUHS @ 2023-03-10 1:08 ` Warner Losh 2023-03-10 10:08 ` Ralph Corderoy 0 siblings, 1 reply; 22+ messages in thread From: Warner Losh @ 2023-03-10 1:08 UTC (permalink / raw) To: segaloco; +Cc: The Eunuchs Hysterical Society [-- Attachment #1: Type: text/plain, Size: 3201 bytes --] On Thu, Mar 9, 2023, 5:55 PM segaloco <segaloco@protonmail.com> wrote: > I guess I hadn't considered deeply nested loops. I contort myself into a > mental pretzel figuring out how to avoid GOTOs sometimes, maybe I could > stand to embrace one every once in a while myself... > Yea. I recall a proposal to add break label; and the label could only be at the end of a loop. The objection was why bloat the compiler with another goto... I developed my restricted lack of fear after a stint in Java with its multilevel break... Warner Now doing some research, more languages support GOTO than I thought, > including C#, PHP, even Rust for all its safety orientation appears to at > least muster a GOTO-ish construct. If people keep doing it, it must still > be wanted, needed, and useful. I stand corrected on my never-GOTO attitude. > Now to slip a GOTO into a work project and see how long it takes to get > chastised :) > > - Matt G. > ------- Original Message ------- > On Thursday, March 9th, 2023 at 3:54 PM, Warner Losh <imp@bsdimp.com> > wrote: > > Oh also sometimes for breaking out of multiple levels of while/for loops. > The alternatives are often worse. > > Warner > > On Thu, Mar 9, 2023, 4:31 PM Luther Johnson <luther@makerlisp.com> wrote: > >> I agree, unless I use setjmp/longjmp for that. Besides error recovery, >> there are occasionally other times when we want to locally "return" to a >> common state and start "from the top" again. I find such uses very clear in >> their intent, and if commented well, not hard to follow at all - as long as >> there is not more than one "top" :) >> On 03/09/2023 04:21 PM, Warner Losh wrote: >> >> >> >> On Thu, Mar 9, 2023, 4:18 PM segaloco via TUHS <tuhs@tuhs.org> wrote: >> >>> GOTO is one of those paradoxical things where I would only trust the >>> most sophisticated engineer to know when it's acceptable to use a GOTO but >>> on the flip side would be suspicious of anyone claiming to be an engineer >>> that uses any amount of GOTOs... >>> >>> Were any of the various GOTOs in languages ever meant to be any more >>> than providing the same level of control that branch statements in assembly >>> do? Was there ever some vision anyone's aware of concerning a >>> sophisticated, dependable use of GOTOs? Since my first days poking around >>> learning C GOTO has been mentally filed away as an assembly vestige for >>> folks in transition, not a dependable construct in its own right. Any >>> alternative camps out there? >>> >> >> >> In C I use it all the time to do goto err for common error recovery >> because C doesn't have anything better. >> >> Warner >> >>> - Matt G. >>> >>> ------- Original Message ------- >>> On Thursday, March 9th, 2023 at 3:01 PM, Steffen Nurpmeso < >>> steffen@sdaoden.eu> wrote: >>> >>> >>> > I wonder if Pink Floyd's Summer68 maybe refers to this. >>> > Other than that i am addicted and could not live without it. >>> > The other (terrible) song is from 1984 (east southern US). >>> > >>> > --steffen >>> > | >>> > |Der Kragenbaer, The moon bear, >>> > |der holt sich munter he cheerfully and one by one >>> > |einen nach dem anderen runter wa.ks himself off >>> > |(By Robert Gernhardt) >>> >> >> > [-- Attachment #2: Type: text/html, Size: 6312 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 1:08 ` Warner Losh @ 2023-03-10 10:08 ` Ralph Corderoy 2023-03-10 11:37 ` arnold 0 siblings, 1 reply; 22+ messages in thread From: Ralph Corderoy @ 2023-03-10 10:08 UTC (permalink / raw) To: tuhs Hi Werner, > after a stint in Java with its multilevel break... Given sh(1)'s break takes an optional number of loops to break out of, I'm surprised C stuck with just the single-level break. -- Cheers, Ralph. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 10:08 ` Ralph Corderoy @ 2023-03-10 11:37 ` arnold 2023-03-10 11:56 ` Ralph Corderoy 0 siblings, 1 reply; 22+ messages in thread From: arnold @ 2023-03-10 11:37 UTC (permalink / raw) To: tuhs, ralph Ralph Corderoy <ralph@inputplus.co.uk> wrote: > Hi Werner, > > > after a stint in Java with its multilevel break... > > Given sh(1)'s break takes an optional number of loops to break out of, > I'm surprised C stuck with just the single-level break. C predates the Bourne shell by several years. Remember too that the C compiler had to fit in a small space; having multilevel or labelled breaks requires more bookkeeping. The idea of labelled loops is not at all new, Ada had them in the 80s and it wasn't new then. IIRC Go also provides them. Arnold ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 11:37 ` arnold @ 2023-03-10 11:56 ` Ralph Corderoy 2023-03-10 11:59 ` arnold 0 siblings, 1 reply; 22+ messages in thread From: Ralph Corderoy @ 2023-03-10 11:56 UTC (permalink / raw) To: tuhs Hi Arnold, > > > after a stint in Java with its multilevel break... > > > > Given sh(1)'s break takes an optional number of loops to break out of, > > I'm surprised C stuck with just the single-level break. > > C predates the Bourne shell by several years. Yes, but C was evolving. As it aged and spread in use, I agree it could change less easily. > Remember too that the C compiler had to fit in a small space; having > multilevel or labelled breaks requires more bookkeeping. Is it more bookkeeping than is already needed to handle the ends of the nested for-loops, say? -- Cheers, Ralph. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 11:56 ` Ralph Corderoy @ 2023-03-10 11:59 ` arnold 2023-03-10 12:11 ` Ralph Corderoy 0 siblings, 1 reply; 22+ messages in thread From: arnold @ 2023-03-10 11:59 UTC (permalink / raw) To: tuhs, ralph Ralph Corderoy <ralph@inputplus.co.uk> wrote: > > Remember too that the C compiler had to fit in a small space; having > > multilevel or labelled breaks requires more bookkeeping. > > Is it more bookkeeping than is already needed to handle the ends of the > nested for-loops, say? Yes, since you have to keep track of a label in a table somewhere that you can look up. Is it *that* much more that the PDP-11 C compiler could not have handled it? I don't know. Arnold ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 11:59 ` arnold @ 2023-03-10 12:11 ` Ralph Corderoy 0 siblings, 0 replies; 22+ messages in thread From: Ralph Corderoy @ 2023-03-10 12:11 UTC (permalink / raw) To: tuhs Hi Arnold, > > > Remember too that the C compiler had to fit in a small space; > > > having multilevel or labelled breaks requires more bookkeeping. > > > > Is it more bookkeeping than is already needed to handle the ends of > > the nested for-loops, say? > > Yes, since you have to keep track of a label in a table somewhere that > you can look up. Oh, I think our wires are crossed. I wrote: > Given sh(1)'s break takes an optional number of loops to break out of, > I'm surprised C stuck with just the single-level break. In other words, ‘break 2’ works in sh but not in C. You added labelled breaks; I wasn't asking if they upped the housekeeping, just ‘break 2’. -- Cheers, Ralph. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:21 ` Warner Losh 2023-03-09 23:31 ` Luther Johnson @ 2023-03-10 6:15 ` Dave Horsfall 2023-03-10 16:55 ` Steffen Nurpmeso 1 sibling, 1 reply; 22+ messages in thread From: Dave Horsfall @ 2023-03-10 6:15 UTC (permalink / raw) To: The Eunuchs Hysterical Society On Thu, 9 Mar 2023, Warner Losh wrote: > In C I use it all the time to do goto err for common error recovery > because C doesn't have anything better. <AOL> Me too :-) </AOL> Seriously, I also use setjmp()/longjmp() for a more elegant exit from a deeply-nested loop; "break N" to break out of "N" loops, anyone? I haven't found that yet... Of course, in those days it was setexit() etc :-) -- Dave ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 6:15 ` Dave Horsfall @ 2023-03-10 16:55 ` Steffen Nurpmeso 2023-03-10 17:02 ` Bakul Shah 2023-03-12 20:47 ` Dave Horsfall 0 siblings, 2 replies; 22+ messages in thread From: Steffen Nurpmeso @ 2023-03-10 16:55 UTC (permalink / raw) To: Dave Horsfall; +Cc: The Eunuchs Hysterical Society Dave Horsfall wrote in <alpine.BSF.2.21.9999.2303101657460.4881@aneurin.horsfall.org>: |On Thu, 9 Mar 2023, Warner Losh wrote: |> In C I use it all the time to do goto err for common error recovery |> because C doesn't have anything better. | |<AOL> |Me too :-) |</AOL> | |Seriously, I also use setjmp()/longjmp() for a more elegant exit from a That is sheer unbelievable, really? _So_ expensive! |deeply-nested loop; "break N" to break out of "N" loops, anyone? I |haven't found that yet... Very often i find myself needing a restart necessity, so "continue N" would that be. Then again when "N" is a number instead of a label this is a (let alone maintainance) mess but for shortest code paths. All the "replacements", like closures, plain inner functions, even more contorted conditionals (i think in the last seven days i saw at least three fixes fly by due to logic errors in contorted conditionals, tiny C compiler, OpenBSD i think bpf/bgpd?, and some FreeBSD commit, which sums up as "Pascal: no"), and "state machine indicating variables" are not as elegant and cheap, and do not allow an as human-receivable control flow (imho), as a simple jump can be. Like my always quoted exampe that adds unnecessary conditionals which evaluate over and over again for nothing if(defined($nl = $self->begin_line)){ $self->begin_line(undef); $self->seen_endl(1); $ogoditisanewperl = 1 #goto jumpin; } while($ogoditisanewperl || ($nl = readline $self->infh)){ if(!$ogoditisanewperl){ ++${$self->__lineno}; $self->seen_endl($nl =~ s/(.*?)\s+$/$1/) } $ogoditisanewperl = 0; #jumpin: |Of course, in those days it was setexit() etc :-) ENTRY(setexit, 0) movab setsav,r0 movq r6,(r0)+ movq r8,(r0)+ movq r10,(r0)+ movq 8(fp),(r0)+ # ap, fp movab 4(ap),(r0)+ # sp movl 16(fp),(r0) # pc clrl r0 ret ENTRY(reset, 0) movl 4(ap),r0 # returned value movab setsav,r1 movq (r1)+,r6 movq (r1)+,r8 movq (r1)+,r10 movq (r1)+,r12 movl (r1)+,sp jmp *(r1) setsav: .space 10*4 .text Cheap it is not. But maybe cheaper than calling a closure or inner function with all the (repeated) stack setup and unwinding. |-- Dave --End of <alpine.BSF.2.21.9999.2303101657460.4881@aneurin.horsfall.org> --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 16:55 ` Steffen Nurpmeso @ 2023-03-10 17:02 ` Bakul Shah 2023-03-12 20:47 ` Dave Horsfall 1 sibling, 0 replies; 22+ messages in thread From: Bakul Shah @ 2023-03-10 17:02 UTC (permalink / raw) To: Steffen Nurpmeso; +Cc: The Eunuchs Hysterical Society > On Mar 10, 2023, at 8:56 AM, Steffen Nurpmeso <steffen@sdaoden.eu> wrote: > > |Seriously, I also use setjmp()/longjmp() for a more elegant exit from a > > That is sheer unbelievable, really? _So_ expensive! > > |deeply-nested loop; "break N" to break out of "N" loops, anyone? I > |haven't found that yet... I suspect Dave means deeply nested function calls. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-10 16:55 ` Steffen Nurpmeso 2023-03-10 17:02 ` Bakul Shah @ 2023-03-12 20:47 ` Dave Horsfall 2023-03-12 21:50 ` Warner Losh 1 sibling, 1 reply; 22+ messages in thread From: Dave Horsfall @ 2023-03-12 20:47 UTC (permalink / raw) To: The Eunuchs Hysterical Society On Fri, 10 Mar 2023, Steffen Nurpmeso wrote: > |Seriously, I also use setjmp()/longjmp() for a more elegant exit from a > > That is sheer unbelievable, really? _So_ expensive! How often would you call setjmp()/longjmp()? -- Dave ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-12 20:47 ` Dave Horsfall @ 2023-03-12 21:50 ` Warner Losh 2023-03-12 22:27 ` Steffen Nurpmeso 0 siblings, 1 reply; 22+ messages in thread From: Warner Losh @ 2023-03-12 21:50 UTC (permalink / raw) To: Dave Horsfall; +Cc: The Eunuchs Hysterical Society [-- Attachment #1: Type: text/plain, Size: 486 bytes --] On Sun, Mar 12, 2023, 2:47 PM Dave Horsfall <dave@horsfall.org> wrote: > On Fri, 10 Mar 2023, Steffen Nurpmeso wrote: > > > |Seriously, I also use setjmp()/longjmp() for a more elegant exit from a > > > > That is sheer unbelievable, really? _So_ expensive! > > How often would you call setjmp()/longjmp() > Cheap enough for occasional error handling, way too expensive for a generic exception handling system... processors with lots of registers were more of a problem... Warner > [-- Attachment #2: Type: text/html, Size: 1221 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-12 21:50 ` Warner Losh @ 2023-03-12 22:27 ` Steffen Nurpmeso 2023-03-13 3:09 ` [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55thanniversary Dave Horsfall 0 siblings, 1 reply; 22+ messages in thread From: Steffen Nurpmeso @ 2023-03-12 22:27 UTC (permalink / raw) To: Warner Losh, Dave Horsfall; +Cc: The Eunuchs Hysterical Society Warner Losh wrote in <CANCZdfqOZ3wrHktZGk3BrHV5ZdbkDyRPGxH61Mq87TVDQRQh7A@mail.gmail.com>: |On Sun, Mar 12, 2023, 2:47 PM Dave Horsfall <dave@horsfall.org> wrote: |> On Fri, 10 Mar 2023, Steffen Nurpmeso wrote: |> |>>|Seriously, I also use setjmp()/longjmp() for a more elegant exit from a |>> |>> That is sheer unbelievable, really? _So_ expensive! |> |> How often would you call setjmp()/longjmp() Only on a Sunday! I never used these myself of free will. (And never regulary at all until i took maintainership of a BSD Mail clone, which is the examplary piece of software to show that BSD signal handling and SA_RESTART are a terrible misconception, especially as soon as the software gets larger. .. In my opinion. Once it was able to run "24/6" i counted the number of system calls necessary for signal block / release and installation / removal over a week, and i think the number was way in the six digits. System calls them all! I should have taken the OpenBSD variant instead, and simply take over what "was good", and it would be much, much better by now. They did the work and reduced the very messy part to two exactly locatable system call points of interest. (I looked i guess 2014-<2017.) A very bad decision. But if i live long enough i will make it, and another one i would really long for.) |Cheap enough for occasional error handling, way too expensive for a generic |exception handling system... processors with lots of registers were more of |a problem... Even on a x86(-32) i have gnashed with my teeth. And that with a Cyrix from 1996 .. and not to think about i386 or even earlier processors with so few memory and speed. I remember _for sure_ looking at the jmpbuf structure by then, and the assembler files (sheer magic by then) and x86 instructions. "Some" jpeg library used jump buffers to signal errors. (I got rid of most sources for things that will never come true, but i do have libjpeg-turbo ball due to package dependencies, and they also use that internally, but looking at it it seems to be a different thing.) That is maybe ok since image processing is maybe expensive enough by itself to simply say they do not care about proper error paths along the way but take a "dead-end exit". (But it was i think not like that with the jpeg i have in mind.) --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55thanniversary 2023-03-12 22:27 ` Steffen Nurpmeso @ 2023-03-13 3:09 ` Dave Horsfall 2023-03-14 19:54 ` Steffen Nurpmeso 0 siblings, 1 reply; 22+ messages in thread From: Dave Horsfall @ 2023-03-13 3:09 UTC (permalink / raw) To: The Eunuchs Hysterical Society [ Followups to COFF, as this is rapidly becoming a Unix tutorial ] On Sun, 12 Mar 2023, Warner Losh wrote: > > How often would you call setjmp()/longjmp()? > > Cheap enough for occasional error handling, way too expensive for a > generic exception handling system... processors with lots of registers > were more of a problem... I've only ever used it when knee-deep in procedure calls, and I needed to parachute back to the main loop when things went pear-shaped[*]; failure was not an option :-) On Sun, 12 Mar 2023, Steffen Nurpmeso wrote: > |> How often would you call setjmp()/longjmp() > > Only on a Sunday! Sometimes I did my best work outside of M-F 9-5 :-) > I never used these myself of free will. > > (And never regulary at all until i took maintainership of a BSD Mail > clone, which is the examplary piece of software to show that BSD signal > handling and SA_RESTART are a terrible misconception, especially as soon > as the software gets larger. .. In my opinion. Once it was able to run > "24/6" i counted the number of system calls necessary for signal block / > release and installation / removal over a week, and i think the number > was way in the six digits. System calls them all! I should have taken > the OpenBSD variant instead, and simply take over what "was good", and > it would be much, much better by now. They did the work and reduced the > very messy part to two exactly locatable system call points of interest. > (I looked i guess 2014-<2017.) A very bad decision. But if i live long > enough i will make it, and another one i would really long for.) I've never liked the concept of signals, especially for IPC; it's akin to being hit over the head with a lump of 4x2. Hardware interrupts were one thing, but it seemed to be a bit brutal in software. And no, I don't have an elegant solution short of message-passing. Heck, I still have nightmares about BSDi's "fdump" program using signals to coordinate its various children, and completely screwing up my backups as a result... > Even on a x86(-32) i have gnashed with my teeth. And that with > a Cyrix from 1996 .. and not to think about i386 or even earlier > processors with so few memory and speed. > I remember _for sure_ looking at the jmpbuf structure by then, and > the assembler files (sheer magic by then) and x86 instructions. You can read X86 assembler? I can only do that after a few stiff drinks... I did buy the book (in order to debug a floating bug defect in the optimiser -- hey, let's optimise this instruction right out! -- and I've never trusted optimisers since). [*] Cue the saying about it being impossible to design a foolproof system. -- Dave, the iconoclast ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55thanniversary 2023-03-13 3:09 ` [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55thanniversary Dave Horsfall @ 2023-03-14 19:54 ` Steffen Nurpmeso 0 siblings, 0 replies; 22+ messages in thread From: Steffen Nurpmeso @ 2023-03-14 19:54 UTC (permalink / raw) To: Dave Horsfall; +Cc: The Eunuchs Hysterical Society Dave Horsfall wrote in <alpine.BSF.2.21.9999.2303131331350.67613@aneurin.horsfall.org>: |[ Followups to COFF, as this is rapidly becoming a Unix tutorial ] .. |On Sun, 12 Mar 2023, Steffen Nurpmeso wrote: ... |> Even on a x86(-32) i have gnashed with my teeth. And that with ... |You can read X86 assembler? I can only do that after a few stiff Unfortunately i stopped my ambitions (nasm was non-portable but fun). I never stepped to ARM, i hate that, i read according Net and FreeBSD commits with lots of interest. Many years ago there was a thrilling commit series for string and memory ops on NetBSD that i sometimes still speak of ... Matt Thomas i think it was. ("Thrilling" it was for me; by then.) |drinks... I did buy the book (in order to debug a floating bug defect |in the optimiser -- hey, let's optimise this instruction right out! -- and But floating-point i run away. |I've never trusted optimisers since). | |[*] |Cue the saying about it being impossible to design a foolproof system. | |-- Dave, the iconoclast "Dawn Of The Iconoclast"; Lisa Gerrard is also an Aussie and nuclear she is, isn't she. (Shown with unforgotten Klaus Schulze at the Loreley -- since most of the UNIX beards are surely some kind of long haired beauties this could even go to TUHS.) Yeah, signals, no. Problems anywhere. But i have a command PKILL_TMUX "pkill -CONT tmux" in my ~/.cwmrc (when Linux sends ^Z to the wrong for whatever reason), and enough ptys to go to when ogg123 again gets an interruption wrong and hangs deadly, only killable via -KILL. I think setting a flag plus EINTR is a way, but ERESTART is not handable if you sit on something blocking but have to act upon the signal; message passing -- if you do have an event loop based program then this is nice; then again i woke up with horrors for the (first) Linux thread library (i have looked in) over twenty years ago, and they used a worker and serialization via such as a regular thing; also owed to Butenhof's POSIX thread design of course, which is too "free" in my eyes (i'd rather have a dedicated main thread plus workers); just like C++ exceptions (i saw software which "throws char*"). --End of <alpine.BSF.2.21.9999.2303131331350.67613@aneurin.horsfall.org> --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) ^ permalink raw reply [flat|nested] 22+ messages in thread
* [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary 2023-03-09 23:18 ` [TUHS] " segaloco via TUHS 2023-03-09 23:21 ` Warner Losh @ 2023-03-10 1:31 ` Rich Morin 1 sibling, 0 replies; 22+ messages in thread From: Rich Morin @ 2023-03-10 1:31 UTC (permalink / raw) To: Tautological Eunuch Horticultural Scythians > On Mar 9, 2023, at 15:18, segaloco via TUHS <tuhs@tuhs.org> wrote: > > GOTO is one of those paradoxical things where I would only trust the most sophisticated engineer to know when it's acceptable to use a GOTO but on the flip side would be suspicious of anyone claiming to be an engineer that uses any amount of GOTOs... > > Were any of the various GOTOs in languages ever meant to be any more than providing the same level of control that branch statements in assembly do? Was there ever some vision anyone's aware of concerning a sophisticated, dependable use of GOTOs? Since my first days poking around learning C GOTO has been mentally filed away as an assembly vestige for folks in transition, not a dependable construct in its own right. Any alternative camps out there? COBOL's ALTER statement is kind of analogous to a computed GOTO, but it adds a dangerous aspect of "action at a distance" (i.e., monkey-patching which invisibly modifies the control flow of the original code): "The ALTER statement changes the transfer point specified in a GO TO statement" https://www.mainframebug.com/tuts/COBOL/module7/Top18_COBOL_ALTER_statement.php "The ALTER Statement" https://www.microfocus.com/documentation/visual-cobol/vc60/DevHub/HRLHLHPDF803.html The problem, IMO, is that the compile-time program flow can be invisibly altered at run time, by code anywhere else in the program. So, there is no requirement that a given branch, GOTO, or noop statement will have its compile-time semantics. If used with restraint, this be used to optimize code paths, but it can easily be overused. Just as a GOTO is a surfacing of the assembler branch instruction(s), the ALTER is analogous to an old assembly-language trick (aka hack): dynamically modifying "br*/noop foo" commands. FWIW, I didn't use either the ALTER or the trick in my own code, but I did keep them in reserve (:-). In one of my earliest COBOL projects, the code came to me with an infestation of ALTER statements: specifically, a hierarchy of IF statements with ALTER statements at various levels. This was used at startup time, to configure the remainder of the program. All very elegant, but really overkill for the task at hand. As I explained to my boss, the ALTER statements made the code really difficult to understand. With his permission, I removed the nest of ALTERs and reworked the remaining control flow as needed. I was greatly assisted in this by the fact that I could retain the DATA DIVISION as-is, and merely implement the (rather prosaic) control flow that we actually used. And no, I don't want to return to either assembler or COBOL (:-). -r ^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2023-03-14 19:54 UTC | newest] Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-03-09 23:01 [TUHS] I can't drive 55: "GOTO considered harmful" 55th anniversary Steffen Nurpmeso 2023-03-09 23:18 ` [TUHS] " segaloco via TUHS 2023-03-09 23:21 ` Warner Losh 2023-03-09 23:31 ` Luther Johnson 2023-03-09 23:44 ` josh 2023-03-09 23:54 ` Warner Losh 2023-03-10 0:54 ` segaloco via TUHS 2023-03-10 1:08 ` Warner Losh 2023-03-10 10:08 ` Ralph Corderoy 2023-03-10 11:37 ` arnold 2023-03-10 11:56 ` Ralph Corderoy 2023-03-10 11:59 ` arnold 2023-03-10 12:11 ` Ralph Corderoy 2023-03-10 6:15 ` Dave Horsfall 2023-03-10 16:55 ` Steffen Nurpmeso 2023-03-10 17:02 ` Bakul Shah 2023-03-12 20:47 ` Dave Horsfall 2023-03-12 21:50 ` Warner Losh 2023-03-12 22:27 ` Steffen Nurpmeso 2023-03-13 3:09 ` [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55thanniversary Dave Horsfall 2023-03-14 19:54 ` Steffen Nurpmeso 2023-03-10 1:31 ` [TUHS] Re: I can't drive 55: "GOTO considered harmful" 55th anniversary Rich Morin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).