Impressive. I'm frequently amazed by the performance of the LuaJIT compiler. Thanks for this library! On Wed, Nov 20, 2013 at 2:40 PM, Roman Tsisyk <roman@xxxxxxxxxxxxx> wrote: > I'm sorry, there was a type: > > n = 100 > ans = sum(map(function(x) return x^2 end, take(n, > tabulate(math.sin)))) -- was sin(x) > > Wednesday, November 20, 2013 11:05 AM -08:00 from : > > > sum(map(function(x) return x^2 end, take(n, tabulate(math.sin(x))))) > > > > Wow, LuaJIT translates that to one loop? amazing! Does it implement > > stream fusion? > > > > The magic is done by the tracing compiler [1]. LuaJIT can trace entire > loops > and optimize them wholly, instead of optimizing single functions. > The compiler unrolls compositions of functions, eliminates high-order > functions > replaces recursions with loops and makes other sophisticated optimizations. > > I have never seen such powerful JIT in any language. Seriously. > I think Mike Pall can provide more details. > > The source code is fully compatibly with Lua 5.1. However, > this library was especially optimized to use tracing JIT at its full > strength. > > [1] http://en.wikipedia.org/wiki/Tracing_just-in-time_compilation > > -- > WBR, > Roman Tsisyk <roman@xxxxxxxxxxxxx> > http://tarantool.org/ - an efficient in-memory database and a Lua > application server >