コードは以下
(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