On my laptop, I compiled Andy's code from here:
https://play.golang.org/p/82UBmyfyqV-
I imported the output into google sheets and plotted it with a bar chart.
https://docs.google.com/spreadsheets/d/1Pp8FBfHXgdMU54v6STutzDbb7SITGscFd84sUuJQ_gk/edit#gid=0
The runtime strongly looks linear.

Still, the constant in the O(n) runtime can possibly be improved with
effort profiling the code and pull requests.
There many man-months in fine-tuning the regexp engines in other languages
like Perl, Python, C PCRE libraries, and Java.
Any recommendations for Go profilers for this work would be appreciated.

Ray




On Thu, Jun 11, 2020 at 1:36 PM Andy Balholm <andybalh...@gmail.com> wrote:

> Here is a simpler reproducer: https://play.golang.org/p/82UBmyfyqV-
>
> (Running it on the playground isn’t much use because of the playground’s
> fake time, though.)
>
> It just repeats the string “D||” (with two vertical bars) to make the
> regex. The runtime is roughly quadratic in the number of repetitions.
>
> Andy
>
> On Jun 11, 2020, at 12:55 PM, Andy Balholm <andybalh...@gmail.com> wrote:
>
> Obviously any reasonable input validation or length limit would disallow
> it.
>
> The time requirement is only quadratic, not exponential, so it takes
> ridiculously long inputs to cause a problem.
>
> Andy
>
> On Jun 11, 2020, at 12:26 PM, Robert Engels <reng...@ix.netcom.com> wrote:
>
> Why would you ever allow that regex?
>
> On Jun 11, 2020, at 11:01 AM, Andy Balholm <andybalh...@gmail.com> wrote:
>
> It’s apparently quadratic in some cases. Yesterday fuzzing on
> github.com/andybalholm/cascadia found an input that triggered a timeout.
> The time was being spent compiling a 180-KB regex (which I’m attaching to
> this message). If I concatenate two copies of this file, the combined regex
> takes at least four times as long to compile.
>
> I plan to investigate further, and see if I can find a way to reproduce
> the issue that doesn’t look like it was generated by a fuzzer.
>
> Andy
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/885CBC71-3268-4BEA-983E-A67B824AC654%40gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/885CBC71-3268-4BEA-983E-A67B824AC654%40gmail.com?utm_medium=email&utm_source=footer>
> .
> <regex.txt>
>
>
> On Jun 9, 2020, at 8:42 AM, 'Thomas Bushnell, BSG' via golang-nuts <
> golang-nuts@googlegroups.com> wrote:
>
> On Tue, Jun 9, 2020 at 11:23 AM Axel Wagner <axel.wagner...@googlemail.com>
> wrote:
>
>> If you actually read OPs second E-Mail, they did and they didn't find it
>> very clear. With that in mind, your message isn't very nice.
>> (Also, not to be repetitive or anything: ~80% of the messages in this
>> thread aren't actually concerned with what the complexity class *is*, but
>> whether it matters)
>>
>
> The OP stopped participating in this exciting thread a long time ago. I
> went and read through the code, and it seems pretty clear to me that it's
> linear.
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CA%2BYjuxvQgnTKMM4FF4%3D4pspM-2nBJScNfCNinDv-2cNA09N%3DaQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/CA%2BYjuxvQgnTKMM4FF4%3D4pspM-2nBJScNfCNinDv-2cNA09N%3DaQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/885CBC71-3268-4BEA-983E-A67B824AC654%40gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/885CBC71-3268-4BEA-983E-A67B824AC654%40gmail.com?utm_medium=email&utm_source=footer>
> .
>
>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "golang-nuts" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/golang-nuts/8M-qVbRKIWA/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/DECADAAC-2F98-463C-9202-132D6D0F93F6%40gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/DECADAAC-2F98-463C-9202-132D6D0F93F6%40gmail.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Ray

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CANZUSAJf6%3DdfGiy6LSqTkpx3z-AKRcxEgwmfY%2Bh5EQA%3DYD1DqA%40mail.gmail.com.

Reply via email to