Why Tailcalls

From JVMLangSummit
Revision as of 11:49, 28 July 2010 by Jrose (talk | contribs)
Jump to navigationJump to search

Are tailcalls fated to come in second place on every feature priority list?

Let's gather the use cases and consider the implementation.

(Note: This page is about "hard tail calls" as defined in the Rose blog. Soft TCO is already in many compilers, but does not have a strong effect on software architecture.)

use cases

multi-core task distribution

(Doug Lea) chaining task execution; without tail calls you blow the stack needlessly

languages with guaranteed TCO

These are languages with functional patterns, including Scheme, Scala, F#. Seph also aims to give this guarantee.

guaranteed disposal of stack-frame

Clojure needs workarounds to avoid floating garbage

 public static int count(Object o) {
   if (o instanceof Counted)
     return ((Counted) o).count();
   return countFrom(Util.ret1(o, o = null));
 static public Object ret1(Object ret, Object nil) { return ret; }


Tail call... Booty call... More than a coincidence? You decide.

external links

mlvm Wiki
mlvm Code