digitalmars.D - Does D support tail recursion?
- Jerry (5/5) Aug 08 2005 Hi,
- Burton Radons (13/16) Aug 08 2005 No and yes. Tail recursion has two meanings: as a language-mandated
- Stewart Gordon (13/13) Aug 10 2005 Hello. Welcome to newsgroups.
Hi, In some ML languages like Ocaml the compiler detects tail-recursions and automatically changes it to a while loop before assembling into machine code. Does D have this tail-recursion-optimization too? -Jerry
Aug 08 2005
Jerry wrote:In some ML languages like Ocaml the compiler detects tail-recursions and automatically changes it to a while loop before assembling into machine code. Does D have this tail-recursion-optimization too?No and yes. Tail recursion has two meanings: as a language-mandated optimisation to ensure that a valid tail recursion pattern doesn't result in a stack overflow, and as a simple optimisation pattern that a compiler might recognise. D has the latter meaning: a compiler can apply the optimisation but it's not required to. In a test, DMD does a tail recursion when -O is used, but not without. It didn't do tail recursion if an auto class is used as a local, so it wouldn't do it in the case of any try/finally block either and I don't know what complexity limit there is before it'll abandon the optimisation. It really needs a tail recursion keyword to ensure that if the compiler can't tail-recurse it, then the code is considered erroneous.
Aug 08 2005
Hello. Welcome to newsgroups. Newsreaders allow you to post a single message to two or more newsgroups simultaneously. This is called crossposting, and is the only appropriate way of sharing a message across multiple newsgroups. Please read http://www.cs.tut.fi/~jkorpela/usenet/xpost.html http://smjg.port5.com/faqs/usenet/xpost.html Meanwhile, since you've multiposted this time, please pick one of the 'groups you've posted to on which you wish the discussion to continue. Stewart. -- My e-mail is valid but not my primary mailbox. Please keep replies on on the 'group where everyone may benefit.
Aug 10 2005