Excise the stupid fucking `set-*` opcodes
The book uses the horribly-confusingly-named `set-*` operations for handling
subterms in query mode. The author does this because he claims this is both
easier to understand and more performant. In reality it is neither of these
things.
If you just name the subterm-handling opcodes something not completely stupid,
like `handle-subterm-*` instead of `unify-*` it becomes obvious what they do.
Also, despite the fact that `put-*` instructions now need to set the WAM's
`mode`, we still get about a 10% speedup here, likely from some combination of
reducing the VM loop code size and simplifying the compilation process. So it's
not even more performant.
TL;DR: Just say "No" to `set-*`.
author |
Steve Losh <steve@stevelosh.com> |
date |
Sun, 10 Jul 2016 14:21:18 +0000 |
parents |
13136d4b4761 |
children |
5c914fbcb042 |
.PHONY: test pubdocs bench profile
sourcefiles = $(shell ffind --full-path --dir src --literal .lisp)
docfiles = $(shell ls docs/*.markdown)
apidoc = docs/03-reference.markdown
test:
figlet -kf big 'SBCL'
ros run -L sbcl --load test/run.lisp
figlet -kf big 'CCL'
ros run -L ccl-bin --load test/run.lisp
src/quickutils.lisp: src/make-quickutils.lisp
cd src && sbcl-rlwrap --noinform --load make-quickutils.lisp --eval '(quit)'
$(apidoc): $(sourcefiles) docs/api.lisp
sbcl-rlwrap --noinform --load docs/api.lisp --eval '(quit)'
docs: docs/build/index.html
docs/build/index.html: $(docfiles)
cd docs && ~/.virtualenvs/d/bin/d
pubdocs: docs
hg -R ~/src/sjl.bitbucket.org pull -u
rsync --delete -a ./docs/build/ ~/src/sjl.bitbucket.org/bones
hg -R ~/src/sjl.bitbucket.org commit -Am 'bones: Update site.'
hg -R ~/src/sjl.bitbucket.org push
bench:
sbcl-rlwrap --noinform --load examples/bench.lisp --eval '(quit)'
profile:
sbcl-rlwrap --noinform --load examples/profile.lisp --eval '(quit)'