[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/11: gexp: Micro-optimize sexp serialization.

From: Ludovic Courtès
Subject: 03/11: gexp: Micro-optimize sexp serialization.
Date: Sun, 25 Jun 2017 16:12:14 -0400 (EDT)

civodul pushed a commit to branch wip-build-systems-gexp
in repository guix.

commit ca378385380f1f5f9db87c7125883b68f1c2f374
Author: Ludovic Courtès <address@hidden>
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
                            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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]