civodul pushed a commit to branch wip-build-systems-gexp in repository guix.
commit ca378385380f1f5f9db87c7125883b68f1c2f374 Author: Ludovic Courtès <[email protected]> Date: Sat Mar 28 21:44:01 2015 +0100 gexp: Micro-optimize sexp serialization. * guix/gexp.scm (sexp->string): New procedure. (gexp->derivation): Use it instead of 'object->string'. --- guix/gexp.scm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/guix/gexp.scm b/guix/gexp.scm index 5c30998..b22d7fb 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -537,6 +537,15 @@ names and file names suitable for the #:allowed-references argument to (lambda (system) ((force proc) system)))) +(define (sexp->string sexp) + "Like 'object->string', but deterministic and slightly faster." + ;; 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 sexp port))))) + (define* (gexp->derivation name exp #:key system (target 'current) @@ -623,7 +632,7 @@ The other arguments are as for 'derivation'." #:system system #:target target)) (builder (text-file script-name - (object->string sexp))) + (sexp->string sexp))) (modules (if (pair? %modules) (imported-modules %modules #:system system
