[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
#: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
- branch wip-build-systems-gexp created (now 0b64b8c), Ludovic Courtès, 2017/06/25
- 03/11: gexp: Micro-optimize sexp serialization.,
Ludovic Courtès <=
- 08/11: packages: Simplify patch instantiation., Ludovic Courtès, 2017/06/25
- 05/11: packages: Turn 'bag->derivation' into a monadic procedure., Ludovic Courtès, 2017/06/25
- 01/11: gnu: bootstrap: Move 'use-modules' forms to the beginning of build expressions., Ludovic Courtès, 2017/06/25
- 04/11: tests: Add 'test-assertm' to (guix tests)., Ludovic Courtès, 2017/06/25
- 09/11: Use 'mapm' instead of 'sequence' + 'map'., Ludovic Courtès, 2017/06/25
- 06/11: store: Add a functional object cache and use it in 'lower-object'., Ludovic Courtès, 2017/06/25
- 11/11: packages: Turn 'cache!' into a single-value-return cache., Ludovic Courtès, 2017/06/25
- 10/11: gexp: 'imported-files' takes file-like objects., Ludovic Courtès, 2017/06/25
- 07/11: DRAFT gexp: Handle list conversion to <gexp-input> in the expanded code., Ludovic Courtès, 2017/06/25
- 02/11: build-system: Rewrite using gexps., Ludovic Courtès, 2017/06/25