Project

General

Profile

Feature #16945

Enable TCO by use of special form

Added by x3qt (Yury Polyakov) 3 months ago. Updated 3 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:98703]

Description

I would like to propose to create some way to enable TCO in ruby by use of special form, like (recur)[[https://clojure.org/reference/special_forms#recur]].

AFAIK TCO is not enabled by default because it messes with stack traces, so by implementing some special form we will avoid changing default behavior and provide opportunity to use it at the same time.

Example:

def fact(n, acc = 1)
  return acc if n <= 1
  recur(n - 1, n * acc) # recursive call with TCO enabled
end

Related issues

Is duplicate of Ruby master - Feature #12543: explicit tail call syntax: foo() then returnAssignedmatz (Yukihiro Matsumoto)Actions
#1

Updated by x3qt (Yury Polyakov) 3 months ago

  • Backport deleted (2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN)
  • Tracker changed from Bug to Feature
#2

Updated by nobu (Nobuyoshi Nakada) 3 months ago

  • Is duplicate of Feature #12543: explicit tail call syntax: foo() then return added

Updated by nobu (Nobuyoshi Nakada) 3 months ago

We don't want to introduce a new reserved word only for this purpose.

Updated by shyouhei (Shyouhei Urabe) 3 months ago

Tell us how is it better than #12543, which is receiving negative feedbacks?

Updated by nobu (Nobuyoshi Nakada) 3 months ago

I thought that we had more discussions for tail-call syntax, but couldn't find others.

Updated by x3qt (Yury Polyakov) 3 months ago

shyouhei (Shyouhei Urabe) wrote in #note-4:

Tell us how is it better than #12543, which is receiving negative feedbacks?

foo() then return

Syntax proposed in #12543 does not look good to me, specifically because it is not a single word and using already existing constructions, so can be confusing because it is a special meaning.

Also available in: Atom PDF