From 998fb8fa1d6dfe64a0662aeaeb1ce7169b90dd57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 13 Oct 2014 23:07:47 +0200 Subject: utils: Micro-optimize 'bytevector->base16-string'. This reduces run time of (package-derivation s emacs) by ~1.5%. * guix/utils.scm (bytevector->base16-string): Traverse BV from the end so as to use 'string-concatenate' instead of 'string-concatenate-reverse'. --- guix/utils.scm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'guix/utils.scm') diff --git a/guix/utils.scm b/guix/utils.scm index 2814247a68..6392914845 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -121,12 +121,13 @@ evaluate to a simple datum." 0)))) v)))))) (define chars base16-chars) - (let loop ((i 0) + (let loop ((i len) (r '())) - (if (= i len) - (string-concatenate-reverse r) - (loop (+ 1 i) - (cons (vector-ref chars (bytevector-u8-ref bv i)) r)))))) + (if (zero? i) + (string-concatenate r) + (let ((i (- i 1))) + (loop i + (cons (vector-ref chars (bytevector-u8-ref bv i)) r))))))) (define base16-string->bytevector (let ((chars->value (fold (lambda (i r) -- cgit v1.2.3