diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-05-17 23:16:40 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-05-17 23:59:58 +0200 |
commit | a0ad6361670e7d3bd831e1a1920b46661a480d0a (patch) | |
tree | 8ad0b42311ad2315db18b150f08f5124b6f94c06 | |
parent | 4288806111dd6d65a40e5e6dc915aef71810fb34 (diff) | |
download | guix-a0ad6361670e7d3bd831e1a1920b46661a480d0a.tar guix-a0ad6361670e7d3bd831e1a1920b46661a480d0a.tar.gz |
ui: 'load*' compiles with '-O1'.
With this change, the wall-clock time of:
guix system build --no-grafts -d gnu/system/install.scm
goes from 5.0s to 2.3s on Guile 3.0.5.
* guix/ui.scm (without-compiler-optimizations): New macro.
(load*): Use it.
-rw-r--r-- | guix/ui.scm | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/guix/ui.scm b/guix/ui.scm index a22024b62f..05b3f5f84c 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -196,6 +196,18 @@ information, or #f if it could not be found." (stack-ref stack 1) ;skip the 'throw' frame last)))) +(cond-expand + (guile-3 + (define-syntax-rule (without-compiler-optimizations exp) + ;; Compile with the baseline compiler (-O1), which is much less expensive + ;; than -O2. + (parameterize (((@ (system base compile) default-optimization-level) 1)) + exp))) + (else + (define-syntax-rule (without-compiler-optimizations exp) + ;; No easy way to turn off optimizations on Guile 2.2. + exp))) + (define* (load* file user-module #:key (on-error 'nothing-special)) "Load the user provided Scheme source code FILE." @@ -225,7 +237,8 @@ information, or #f if it could not be found." ;; search for FILE in %LOAD-PATH. Note: use 'load', not ;; 'primitive-load', so that FILE is compiled, which then allows ;; us to provide better error reporting with source line numbers. - (load (canonicalize-path file))) + (without-compiler-optimizations + (load (canonicalize-path file)))) (const #f)))))) (lambda _ ;; XXX: Errors are reported from the pre-unwind handler below, but |