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.
This commit is contained in:
Ludovic Courtès 2021-05-17 23:16:40 +02:00
parent 4288806111
commit a0ad636167
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -196,6 +196,18 @@ (define (frame-with-source frame)
(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 @@ (define tag
;; 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