[#103241] [Ruby master Bug#17777] 2.6.7 fails to build on macOS: implicit declaration of function 'rb_native_mutex_destroy' is invalid in C99 — eregontp@...
Issue #17777 has been reported by Eregon (Benoit Daloze).
17 messages
2021/04/05
[#103305] [Ruby master Feature#17785] Allow named parameters to be keywords — marcandre-ruby-core@...
Issue #17785 has been reported by marcandre (Marc-Andre Lafortune).
21 messages
2021/04/08
[#103342] [Ruby master Feature#17790] Have a way to clear a String without resetting its capacity — jean.boussier@...
Issue #17790 has been reported by byroot (Jean Boussier).
14 messages
2021/04/09
[#103388] [ANN] Multi-factor Authentication of bugs.ruby-lang.org — SHIBATA Hiroshi <hsbt@...>
Hello,
5 messages
2021/04/12
[#103414] Re: [ANN] Multi-factor Authentication of bugs.ruby-lang.org
— Martin J. Dürst <duerst@...>
2021/04/13
Is there a way to use this multi-factor authentication for (like me)
[#103547] List of CI sites to check — Martin J. Dürst <duerst@...>
Hello everybody,
4 messages
2021/04/22
[#103596] [Ruby master Feature#17830] Add Integer#previous and Integer#prev — rafasoaresms@...
Issue #17830 has been reported by rafasoares (Rafael Soares).
9 messages
2021/04/26
[ruby-core:103507] [Ruby master Feature#12543] explicit tail call syntax: foo() then return
From:
Ruby-Lang@...
Date:
2021-04-18 15:02:12 UTC
List:
ruby-core #103507
Issue #12543 has been updated by jwmittag (Jテカrg W Mittag). mame (Yusuke Endoh) wrote in #note-9: > And I have another concern. If tail call optimization is on by default, some people will strongly depend on it. That's the point. Proper Tail Calls allow you to write code that is otherwise *impossible* to write. But that is *crucially* dependent on the knowledge that the call will *always be optimized, no matter what*. For example, you can very elegantly express State Machines in an Object-Oriented manner: every state is an object, every transition is a method call. But in doing this, you just move from state to state through the state machine, *you never return*. This very elegant Object-Oriented encoding of State Machines depends on Proper Tail Calls. [Guy L. Steele has argued that Proper Tail Calls are *required* for Object-Orientation Languages](https://eighty-twenty.org/2011/10/01/oo-tail-calls). One thing we should be very careful about is whether we are talking about *Language Semantics* (these are usually called *Proper Tail Calls* or *Properly-Implemented Tail Call Handling (PITCH)*) or a simple *Compiler Optimization* (these are typically *Tail Call Optimization*). The main difference is that Proper Tail Calls are a guarantee made by the language specification. These calls are guaranteed to be optimized, under any circumstances, in any implementation (YARV, TruffleRuby, JRuby, Opal, Artichoke, 窶ヲ). Whereas TCO may or may not be applied depending on the implementation, the version, the optimization level, the surrounding code, the phase of the moon, a command line option, or even a random coin flip. Proper Tail Calls are *required* for certain kinds of modularity, they are required for certain kinds of designs. When I talk about Proper Tail Calls, that is what I mean: **IFF** a call meets the definition of a Tail Call (whatever definition the community settles on), then it is *guaranteed* to be optimized in *every Ruby implementation*, always. Only this kind of guarantee will allow one to write code that depends on Proper Tail Calls. ---------------------------------------- Feature #12543: explicit tail call syntax: foo() then return https://bugs.ruby-lang.org/issues/12543#change-91605 * Author: mame (Yusuke Endoh) * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) ---------------------------------------- How about introducing a new syntax for tail call? ``` def foo() foo() end foo() #=> stack level too deep ``` ``` def bar() bar() then return end bar() #=> infinite loop ``` * no new keyword (cf. `goto foo()`) * no conflict with any existing syntax * an experimental patch is available (attached) * no shift/reduce nor reduce/reduce conflict in parse.y -- Yusuke Endoh <mame@ruby-lang.org> ---Files-------------------------------- then_return.patch (9.18 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>