Issue #1218 has been updated by Yusuke Endoh.

Status changed from Assigned to Rejected

I'm rejecting this feature ticket because no progress has been
made for a long time.  See [ruby-core:42391].



I think it is impossible to implement recursion_limit exactly
because we cannot know how much stack each C function consumes.

I expected Python's recursion_limit to fail conservatively
(i.e., it will raise an exception for big limit even when it is
actually possible).  But it was worse than I expected.  Python
caused SEGV when big limit is specified:

  import sys
  sys.setrecursionlimit(1000000)
  def foo():
      foo()
  foo()  #=> SEGV

I think that this is not a correct way, at least, in Ruby.

-- 
Yusuke Endoh <mame / tsg.ne.jp>
----------------------------------------
Feature #1218: New method needed to set and get the current recursion limit
https://bugs.ruby-lang.org/issues/1218

Author: Conrad Taylor
Status: Rejected
Priority: Normal
Assignee: Koichi Sasada
Category: YARV
Target version: 2.0.0


=begin
 Hi, I would like to propose the addition of two methods for setting and getting the recursion limit:
 
 recursion_limit(limit)
 recursion_limit => returns an Integer value
 
 At this time, I have been experimenting with recursion to compute the nth fibonacci number using ruby 1.9.1 ( i.e ruby 1.9.1p0 (2009-01-30 revision 21907) ).  These tests are being ran on a Apple PowerMac G5 2.5 Ghz Quad 4 GB RAM and a MacBook Pro 2.8 GHz Intel Core 2 Duo 4 GB RAM.  Also,  I was able to successfully produce a result using an iteration which I'm attaching to verify the correctness of the other two algorithms:
 
 action:  ./fibonacci-recursive.rb 10000
 
 result:
 
 ./fibonacci-recursive.rb:10:in `fibonacci': stack level too deep (SystemStackError)
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	 ... 8174 levels...
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:10:in `fibonacci'
 	from ./fibonacci-recursive.rb:18:in `<main>'
 
 action: ./fibonacci-tail-recursive.rb 10000
 
 result:  
 
 ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper': stack level too deep (SystemStackError)
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	 ... 7265 levels...
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:10:in `fibonacci_helper'
 	from ./fibonacci-tail-recursive.rb:17:in `fibonacci'
 	from ./fibonacci-tail-recursive.rb:24:in `<main>'
 
 action:  ./fibonacci-iterative.rb 10000
 
 result:
 
 33644764876431783266621612005107543310302148460680063906564769974680081442166662368155595513633734025582065332680836159373734790483865268263040892463056431887354544369559827491606602099884183933864652731300088830269235673613135117579297437854413752130520504347701602264758318906527890855154366159582987279682987510631200575428783453215515103870818298969791613127856265033195487140214287532698187962046936097879900350962302291026368131493195275630227837628441540360584402572114334961180023091208287046088923962328835461505776583271252546093591128203925285393434620904245248929403901706233888991085841065183173360437470737908552631764325733993712871937587746897479926305837065742830161637408969178426378624212835258112820516370298089332099905707920064367426202389783111470054074998459250360633560933883831923386783056136435351892133279732908133732642652633989763922723407882928177953580570993691049175470808931841056146322338217465637321248226383092103297701648054726243842374862411453093812
 20656491403275108664339451751216152654536133311131404243685480510676584349352383695965342807176877532834823434555736671973139274627362910821067928078471803532913117677892465908993863545932789452377767440619224033763867400402133034329749690202832814593341882681768389307200363479562311710310129195316979460763273758925353077255237594378843450406771555577905645044301664011946258097221672975861502696844314695203461493229110597067624326851599283470989128470674086200858713501626031207190317208609408129832158107728207635318662461127824553720853236530577595643007251774431505153960090516860322034916322264088524885243315805153484962243484829938090507048348244932745373262456775587908918719080366205800959474315005240253270974699531877072437682590741993963226598414749819360928522394503970716544315642132815768890805878318340491743455627052022356484649519611246026831397097506938264870661326450766507461151267752274862159864253071129844118262266105716351506926002986170494542504749137811515413
 9941550671256271197133252763631939606902895650288268608362241082050562430701794976171121233066073310059947366875
=end



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