Closed MasWag closed 3 years ago
I started working on this.
The new implementation improves the performance approximately 375x for the example given above.
let input = ` I do not know why but it seems code2 is slow if it contains a long line.
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo
wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo wakegawakaranaiyo` in
let pat = `wk` in
let () = Debug.print `testing long input` in
let () = Debug.print (String.of-bool (RegExp.test (RegExp.of-string pat) input)) in
let () = Debug.print (String.of-bool (RegExp2.test (RegExp2.of-string pat) input)) in
finish
$ satysfi ./regexp2.satyg | ./ts
...
2020-04-05T21:55:50,200518000+09:00 : ---- ---- ---- ----
2020-04-05T21:55:50,206891000+09:00 : evaluating texts ...
2020-04-05T21:55:50,214867000+09:00 : testing long input
2020-04-05T21:56:25,082882000+09:00 : false
2020-04-05T21:56:25,176159000+09:00 : false
2020-04-05T21:56:25,179899000+09:00 : evaluation done.
2020-04-05T21:56:25,183183000+09:00 : ---- ---- ---- ----
...
RegExp.exec
is very slow for the following example.In my environment, a single call of RegExp.exec + (almost minimal typesetting) took about 30 seconds.