News for hackers. Stuff that matters.
Re:A function decorator that rewrites the bytecode to enable... by dehrmann on Monday September 20, 2021 @09:25PM (#28601087)
Java actually has an elegant-for-Java feature that removes most credible uses of goto. You can label and break out of standalone code blocks. It makes error handling without exceptions no bad.

    label: {
        break label;
    }
Re:A function decorator that rewrites the bytecode to enable... by chrismorgan on Tuesday September 21, 2021 @12:35AM (#28602077)
And in most C-style languages that don’t have labelled blocks like this, you can use an infinite loop to achieve the same effect; for example, in Rust where labelled blocks aren’t yet stable:

  'label: loop {
      break 'label;
  }
And if you want to go one further on that, you can break with value because Rust is expression-oriented:

  fn main() {
      println!("Hello, {}!", 'label: loop {
          break 'label "world";
      });
  }
Re:A function decorator that rewrites the bytecode to enable... by nielsbot on Tuesday September 21, 2021 @12:24AM (#28602017)
Swift also has (copied?) this...

https://docs.swift.org/swift-book/ReferenceManual/Statements...

(And I always forget about it)

Re:A function decorator that rewrites the bytecode to enable... by aurelianito on Monday September 20, 2021 @10:29PM (#28601447)
You can have the same flow in python raising and catching an exception.
Re:A function decorator that rewrites the bytecode to enable... by nerdponx on Monday September 20, 2021 @11:20PM (#28601767)
Doesn't Perl also have this? It would be a great feature in Python, although I wouldn't use it very often.
Re:A function decorator that rewrites the bytecode to enable... by gnubison on Monday September 20, 2021 @11:39PM (#28601859)
In Perl, any “bare block” is equivalent to a loop that only runs once. Useful in conjunction with redo too.
Re:A function decorator that rewrites the bytecode to enable... by abnercoimbre on Monday September 20, 2021 @09:56PM (#28601259)
Oh my goodness! I'm using this right away (yesterday I was lamenting lack of goto for this exact use case.)

This is just Java, right? I don't think I've seen this in the C/C++ specs or compiler extensions.

Re:A function decorator that rewrites the bytecode to enable... by jcranmer on Tuesday September 21, 2021 @09:59AM (#28605074)
Labeled break/continue are present in most languages that postdate Java. Go, JavaScript, Kotlin, Nim, Rust, Zig, for example, all have labeled break/continue as well. The only notable post-Java language I'm aware of that doesn't have it is C#. Languages that predate Java generally don't have such a feature--and this includes C/C++.
Re:A function decorator that rewrites the bytecode to enable... by superdisk on Monday September 20, 2021 @10:07PM (#28601326)
Well if you're using C, you could just use a proper goto.