summary refs log tree commit diff
path: root/guix/memoization.scm
AgeCommit message (Collapse)Author
2017-12-13memoization: Add 'invalidate-memoization!.Ludovic Courtès
* guix/memoization.scm (%make-hash-table*): When not profiling, add the new table to %MEMOIZATION-TABLES. (invalidate-memoization!): New procedure.
2017-12-12memoization: Profiling support keeps track of lookups and hits.Ludovic Courtès
* guix/memoization.scm (<cache>): New record type. (define-lookup-procedure, define-update-procedure): New macros. (cache-ref, cacheq-ref, cache-set!, cacheq-set!): New procedures. (cached/mv, cachedq/mv, cached, cachedq): Use them instead of 'hash-ref' and 'hash-set!'. (%make-hash-table*): When 'profiled?' returns true, return a <cache> object. (define-cache-procedure): Adjust to show cache lookups and hits.
2017-12-12memoization: Add profiling support.Ludovic Courtès
* guix/memoization.scm (%memoization-tables): New variable. (%make-hash-table*, show-memoization-tables): New procedures. (make-hash-table*): New macro. Add top-level call to 'register-profiling-hook!'. (memoize): Adjust to pass the resulting procedure to 'make-hash-table*'. (%mlambda): Likewise.
2017-09-03memoization: (mlambda () ...) allows for inner 'define'.Ludovic Courtès
Previously (mlambda () (define foo 2) bar) would trigger a syntax error. * guix/memoization.scm (%mlambda): In the zero-argument case, move BODY... to a lambda to allow for inner 'define' and such.
2017-03-16memoization: Micro-optimize code produced by 'define-cache-procedure'.Ludovic Courtès
* guix/memoization.scm (%nothing): Remove. (define-cache-procedure): Make '%nothing' a local variable, with a literal list.
2017-01-28Add (guix memoization).Ludovic Courtès
* guix/combinators.scm (memoize): Remove. * guix/memoization.scm: New file. * Makefile.am (MODULES): Add it. * gnu/packages.scm, gnu/packages/bootstrap.scm, guix/build-system/gnu.scm, guix/build-system/python.scm, guix/derivations.scm, guix/gnu-maintenance.scm, guix/import/cran.scm, guix/import/elpa.scm, guix/modules.scm, guix/scripts/build.scm, guix/scripts/graph.scm, guix/scripts/lint.scm, guix/store.scm, guix/utils.scm: Adjust imports accordingly.