[#104740] [Ruby master Feature#18057] Introduce Array#average — ggmichaelgo@...

Issue #18057 has been reported by ggmichaelgo (Michael Go).

14 messages 2021/08/02

[#104774] [Ruby master Bug#18061] Execshield test: libruby.so.N.N.N: FAIL: property-note test because no .note.gnu.property section found — jaruga@...

Issue #18061 has been reported by jaruga (Jun Aruga).

48 messages 2021/08/04

[#104780] [Ruby master Bug#18062] Ruby with enabled LTO segfaults during build — v.ondruch@...

Issue #18062 has been reported by vo.x (Vit Ondruch).

30 messages 2021/08/05

[#104831] [Ruby master Bug#18066] Load did_you_mean eve/error_highlight even with --disable-gems — v.ondruch@...

Issue #18066 has been reported by vo.x (Vit Ondruch).

10 messages 2021/08/07

[#104851] [Ruby master Bug#18073] test/ruby/test_jit.rb: failures "error: invalid use of '__builtin_va_arg_pack ()'" on Ruby 2.7.4 on gcc 4.8.5 on RHEL7 — jaruga@...

Issue #18073 has been reported by jaruga (Jun Aruga).

14 messages 2021/08/09

[#104927] [Ruby master Bug#18077] Marshal.dump(closed_io) raises IOError instead of TypeError — "larskanis (Lars Kanis)" <noreply@...>

Issue #18077 has been reported by larskanis (Lars Kanis).

10 messages 2021/08/16

[#104960] [Ruby master Feature#18083] Capture error in ensure block. — "ioquatix (Samuel Williams)" <noreply@...>

Issue #18083 has been reported by ioquatix (Samuel Williams).

32 messages 2021/08/18

[#105021] [Ruby master Misc#18122] DevelopersMeeting20210916Japan — "mame (Yusuke Endoh)" <noreply@...>

Issue #18122 has been reported by mame (Yusuke Endoh).

12 messages 2021/08/20

[#105069] [Ruby master Bug#18133] LTO: TestGCCompact#test_ast_compacts segfaults on i686 — "vo.x (Vit Ondruch)" <noreply@...>

Issue #18133 has been reported by vo.x (Vit Ondruch).

25 messages 2021/08/25

[#105077] [Ruby master Feature#18136] take_while_after — "zverok (Victor Shepelev)" <noreply@...>

Issue #18136 has been reported by zverok (Victor Shepelev).

21 messages 2021/08/27

[ruby-core:104981] [Ruby master Feature#18083] Capture error in ensure block.

From: duerst <noreply@...>
Date: 2021-08-19 00:45:14 UTC
List: ruby-core #104981
Issue #18083 has been updated by duerst (Martin D=FCrst).


Eregon (Benoit Daloze) wrote in #note-3:
> If you only need to know if there is an `Exception` this seems easier:
> Using the example from https://bugs.ruby-lang.org/issues/15567#note-27
> ```ruby
> begin
>   ...
> rescue Exception =3D> exception
>   transaction.abort
>   raise exception
> ensure
>   transaction.commmit unless transaction.aborted?
> end
> ```

What about
```ruby
begin
  ...
rescue Exception
  transaction.abort
else
  transaction.commit
end
```
It seems shorter and easier to understand.

Having read through most of #15567, my impression is that:
- Ruby already has too many features for exceptional flow control. Adding m=
ore stuff that makes this even more complicated doesn't look like an improv=
ement of the language. (Go To Statement Considered Harmful, anybody?)
- All the documentation/books that I can remember explain Exceptions and ca=
tch/throw completely separately (although usually in close proximity, becau=
se both features don't really fit anywhere). Some improvement seems in orde=
r, even if this is only "don't use them together".
- `ensure` contains always executed code. Adding conditions to its syntax s=
eems strange. It would be similar to extending the syntax of `else` (both i=
n `if` expressions as well as in `begin` blocks). Specific conditions shoul=
d be handled where we already have them, on `rescue`, e.g. like `rescue whe=
n throw` or some such (if at all).
- The argument that Rubocop complains about something isn't really an argum=
ent. If Rubocop is wrong, it should be fixed.


----------------------------------------
Feature #18083: Capture error in ensure block.
https://bugs.ruby-lang.org/issues/18083#change-93381

* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
----------------------------------------
As discussed in https://bugs.ruby-lang.org/issues/15567 there are some tric=
ky edge cases.

As a general model, something like the following would be incredibly useful:

``` ruby
begin
 ...
ensure =3D> error
  pp "error occurred" if error
end
```

Currently you can get similar behaviour like this:

``` ruby
begin
  ...
rescue Exception =3D> error
  raise
ensure
  pp "error occurred" if error
end
```

The limitation of this approach is it only works if you don't need any othe=
r `rescue` clause. Otherwise, it may not work as expected or require extra =
care. Also, Rubocop will complain about it.

Using `$!` can be buggy if you call some method from `rescue` or `ensure` c=
lause, since it would be set already. It was discussed extensively in https=
://bugs.ruby-lang.org/issues/15567 if you want more details.



-- =

https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread