From 02aba668c408a473067bc26b8f36077384b9c14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 8 Mar 2022 03:43:03 +0100 Subject: Add native UUID generator. While not necessary, since we barely use UUID:s, it's still WAY faster, and nice to not depend on the system providing `uuidgen'. For comparison, number of UUID:s generated by different settups in 1 second: 65.000 :: guile native 700 :: guile shell-out 3.500.000 :: c native 100.000 :: libuuid - guile bindings 650.000 :: libuuid Tests where run with either (call-with-time-limit 1 (lambda () (let loop () (uuid) (set! count (1+ count)) (loop))) (lambda _ (display count))) or volatile unsigned long long count = 0; sigaction(SIGALARM, ...); alarm(1); for (;;) { uuid(); count++; } (let ((count 0)) (call-with-time-limit 1 (lambda () (let loop () ((@ (hnh util) uuidgen)) (set! count (1+ count)) (loop))) (lambda _ (format #t "exec count = ~:d~%" count)))) --- doc/ref/guile/util.texi | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'doc/ref') diff --git a/doc/ref/guile/util.texi b/doc/ref/guile/util.texi index 71e3f93a..2cf1070b 100644 --- a/doc/ref/guile/util.texi +++ b/doc/ref/guile/util.texi @@ -338,7 +338,14 @@ Similar to @var{let}, but sets environment variables for the code in body. Restores the old values once we leave. @end defmac +@subsection UUID generation -@defun uuidgen -Generates a UUID. +Provided by module @code{(hnh util uuid)}. + +@defun uuid-v4 +Generates a UUID-v4 string. +@end defun + +@defun uuid +Generates an implementation defined (but guaranteed valid) UUID. @end defun -- cgit v1.2.3