Skip to content

Introduce %EXPANSION, optimize LET-SYMBOL - #226

Open
shawwn wants to merge 1 commit into
sctb:masterfrom
shawwn:2022-12-05/optimize-macroexpand
Open

Introduce %EXPANSION, optimize LET-SYMBOL#226
shawwn wants to merge 1 commit into
sctb:masterfrom
shawwn:2022-12-05/optimize-macroexpand

Conversation

@shawwn

@shawwn shawwn commented Dec 6, 2022

Copy link
Copy Markdown
Contributor

This gives a ~20% speed boost by making ~60% fewer calls to MACROEXPAND.

Here's a breakdown:

              current  new
runtime.js    11,914   5,194
macros.js     32,248   12,128
main.js       3,941    1,158
reader.js     3,037    1,654
compiler.js   34,379   13,476
system.js     512      485
runtime.lua   10,152   4,609
macros.lua    31,361   11,619
main.lua      4,109    1,226
reader.lua    2,993    1,610
compiler.lua  32,832   13,096
system.lua    813      603
test.js       188,983  76,320
test.lua      189,325  77,022
total         546,599  220,200

Graph (linear scale):
image

Graph (log scale):
image

Speedups using LuaJIT:

current:

$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.40s user 0.09s system 85% cpu 0.572 total
$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.40s user 0.08s system 84% cpu 0.565 total
$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.40s user 0.08s system 85% cpu 0.553 total
$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.39s user 0.08s system 86% cpu 0.548 total

new:

$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.34s user 0.09s system 85% cpu 0.500 total
$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.33s user 0.09s system 88% cpu 0.478 total
$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.32s user 0.08s system 87% cpu 0.462 total
$ make clean 2>/dev/null; time LUMEN_LUA=luajit LUMEN_HOST=luajit make -B >/dev/null
LUMEN_LUA=luajit LUMEN_HOST=luajit make -B > /dev/null  0.34s user 0.09s system 88% cpu 0.484 total

I was going to show node speedups as well (equally significant) but I'm being pulled away from the computer for the moment.

This gives a ~20% speed boost by making ~60% fewer calls to MACROEXPAND.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant