GNU bug report logs -
#12033
format should be faster
Previous Next
Reported by: nalaginrut <nalaginrut <at> gmail.com>
Date: Mon, 23 Jul 2012 13:55:02 UTC
Severity: normal
Done: ludo <at> gnu.org (Ludovic Courtès)
Bug is archived. No further changes may be made.
Full log
Message #11 received at 12033 <at> debbugs.gnu.org (full text, mbox):
On Sun, 2012-08-19 at 00:19 +0200, Ludovic Courtès wrote:
> Hi!
>
> nalaginrut <nalaginrut <at> gmail.com> skribis:
>
> > Our "format" is rather slow,
>
> What makes you say so?
>
> Did you make sure that the output port you’re writing to is buffered
> (this is not the case by default!)? See ‘setvbuf’.
>
OK, yes, I assumed the port will be buffered in default.
Should I set stdin/stdout(current-input-port/current-output-port) as
buffered each time?
But in my case, there's only current-output-port. And I set it as
buffered, the result is the same.
> > can we make it faster? I can only output strings with display if I
> > need an faster program, which is not so elegant.
>
> Until (ice-9 format) is loaded, ‘format’ is an alias for
> ‘simple-format’, which is implemented in C, less capable but faster than
> (ice-9 format). Perhaps that’s usable for your use case?
>
But I never use (ice-9 format).
There's ~15s difference between "display" and "format" in my laptop.
---------------code-1------------------
(define (main . args)
(let* ((ll ((@ (srfi srfi-1) iota) (read) 1)) (len (length ll)) (m (1-
(/ len 2))))
(display len)(newline)
(let lp((a (list-head ll (1+ m))) (b (list-tail ll (1+ m))) (n 1))
(and (< n len)
(for-each (lambda (x y) (display x)(display " ")(display y)(display "
")) a b)(newline)
(lp (append (list 1 (car b)) (cdr a)) (append (cdr b) (list (list-ref
a m))) (1+ n))))))
-----------------end-------------------
--------------code-2-------------------
(define (main . args)
(let* ((ll ((@ (srfi srfi-1) iota) (read) 1)) (len (length ll)) (m (1-
(/ len 2))))
(display len)(newline)
(let lp((a (list-head ll (1+ m))) (b (list-tail ll (1+ m))) (n 1))
(and (< n len)
(for-each (lambda (x y) (format #t "~a ~a~%" x y)) a b)
(lp (append (list 1 (car b)) (cdr a)) (append (cdr b) (list (list-ref
a m))) (1+ n))))))
---------------end---------------------
time { echo 6000 | ./test 1>/dev/null ;}
Code-1 is 0m30.326s
Code-2 is 0m45.310s
PS: Please use 6000 at least, or it's size is not representative.
> Thanks,
> Ludo’.
This bug report was last modified 12 years and 357 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.