From 0bb1aa9e05bd103a71378307b7e26e22fea5ebab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 16 Mar 2013 17:22:20 +0100 Subject: [PATCH] derivations: Optimize `build-expression->derivation'. This reduces the execution time of "guix build -e '(@ (gnu packages emacs) emacs)' -d" by 6%, from 1.15s to 1.08s. * guix/derivations.scm (build-expression->derivation): Write the builder as UTF-8. --- guix/derivations.scm | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/guix/derivations.scm b/guix/derivations.scm index d70bd9dd85..2243d2ba46 100644 --- a/guix/derivations.scm +++ b/guix/derivations.scm @@ -741,14 +741,21 @@ omitted or is #f, the value of the `%guile-for-build' fluid is used instead." (unsetenv "LD_LIBRARY_PATH"))) (builder (add-text-to-store store (string-append name "-guile-builder") - (string-append - (object->string prologue) - (object->string - `(exit - ,(match exp - ((_ ...) - (remove module-form? exp)) - (_ `(,exp)))))) + + ;; Explicitly use UTF-8 for determinism, + ;; and also because UTF-8 output is faster. + (with-fluids ((%default-port-encoding + "UTF-8")) + (call-with-output-string + (lambda (port) + (write prologue port) + (write + `(exit + ,(match exp + ((_ ...) + (remove module-form? exp)) + (_ `(,exp)))) + port)))) ;; The references don't really matter ;; since the builder is always used in