コードは以下
(add-dynamic-load-path "./build")
(add-load-path "./sitelib")
(load-dynamic-library "sagittarius--regex2")
(load-dynamic-library "sagittarius--regex")
(import (rnrs)
(time)
(srfi :13) (srfi :1))
(define bench
'(begin
(define-syntax bench-regex
(syntax-rules ()
((_)
(begin
(define rx
(compile-regex "[-_.0-9A-Za-z]+@[-_0-9A-Za-z]+[-_.0-9A-Za-z]+" 0))
(define (repeat s c) (string-concatenate (make-list c s)))
(define s (repeat "abcdefgh" 500))
(define m (regex-matcher rx s))
(define times 20)
(time (do ((i 0 (+ i 1))
(r (regex-replace-all m " ")
(regex-replace-all m " ")))
((= i times) r)))))))
(bench-regex)))
(let ((args (command-line)))
(if (= (length args) 2)
(cond ((string=? (cadr args) "old")
(eval bench
(environment '(sagittarius regex impl) 'user)))
((string=? (cadr args) "new")
(eval bench
(environment '(sagittarius regex2 impl) 'user)))
(else
(error 'command-line "unknown option")))
(print "usage: test2.scm old|new")))
で、結果。
$ time ./build/sash -D./build test2.scm old ;; 9.964000 real 9.890000 user 0.000000 sys ./build/sash -D./build test2.scm old 10.06s user 0.03s system 99% cpu 10.176 total $ time ./build/sash -D./build test2.scm new ;; 0.013000 real 0.015000 user 0.000000 sys ./build/sash -D./build test2.scm new 0.19s user 0.00s system 96% cpu 0.193 totalPikeさんパネェっす。
別にこのパターンに特化しているわけではないのだが、Perl拡張正規表現が入ってくると別の話になる。それは一つ前のエントリで書いた通り、VMが遅いけど多機能モードに移行するので以前のものより遅くなる可能性が高い。(というか、多分遅くなる)
ただ、個人的に(後方参照はかなり便利だからちょっと考え物だが)先読み、後読み系やpossessiveマッチはあまり使わないので気にしていない。便利なんだろうけど、そんな込み入った正規表現書かないという理由で。
テストケース整備して、APIを以前のものと同じにしたら0.2.3をリリースしよう。
No comments:
Post a Comment