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.
[ Parent
| on HN ]
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++.