News for hackers. Stuff that matters.
Re:Show HN: Regular expression compilation visualized by zokier on Tuesday March 23, 2021 @01:26PM (#26557597)
PCRE is hardly used "everywhere". Vim switched from backtracking engine to dfa one. Emacs has it's own non-backtracking engine. As does GNU grep. Ripgrep notoriously is built around rust-regex. VSCode uses ripgrep for searches. Google obviously uses its own re2 in its products. Hyperscan has some case studies of its use:

https://www.hyperscan.io/2016/01/21/rspamd-1-1-released-hype...

https://www.hyperscan.io/2020/09/28/optimize-azure-cloud-sec...

https://www.hyperscan.io/2018/10/19/hyperscan-adopted-by-git...

Even PCRE itself has a dfa mode. Because people want and use that. It's not just some academic navelgazing.

I'm not saying that non-regular engines, pcre in the forefront, are not popular. They are. But at the same time they are not be-all end-all for regex, regular engines still see lot of use especially in performance sensitive applications.

Re:Show HN: Regular expression compilation visualized by bmn__ on Tuesday March 23, 2021 @06:22PM (#26561085)
> PCRE is hardly used "everywhere".

The topic under discussion was extensions that make regex non-regular (as popularised by Perl and libpcre), not PCRE per se. Per this site's rules, I assume good faith and that you simply misunderstood me and did not deliberately put up and topple this straw-man.

Adoption of non-regular extensions is overwhelmingly larger than adoption of the opposite.

1. These non-regular extensions can be found in Java/Kotlin/Scala/etc., Javascript, Perl, PHP, Python, Ruby, C#, R, Swift, Matlab, Julia, Haxe, Ocaml and literally dozens of other languages on various popularity charts, and as a first pick option in C, C++ and Lua. Go and Rust are the exemptions to the rule! There are millions of pieces of software written using these which one can't even see because they are not public.

2. Programmers and end users want features and power much more than they want determinism. (Performance is a red herring because the vast majority of the time, performance is good enough, or even identical to non-extended.) That's why ripgrep and GNU grep and rspamd have them.

https://github.com/BurntSushi/ripgrep/blob/master/FAQ.md#how...

https://www.gnu.org/software/grep/manual/html_node/Regular-E...

https://rspamd.com/announce/2016/03/21/rspamd-1.2.0.html

3. A factual survey where libraries are used. This will be invisible for the aforementioned programming languages because they have built-in regex, but simply libpcre alone versus re2 and libhs shows clearly which paradigm is dominant and which is a niche.

libpcre: ag, apache2, blender, clamav, cppcheck, exim, fish, git, gnome-builder, godot, grep, haproxy, kodi, libvte, lighttpd, lldb, mariadb, mongodb, mutt/neomutt, mysql-workbench, nginx, nmap, pam, postfix, Qt5/Qt6, rspamd, selinux, sway, swig, syslog-ng, systemd, uwsgi, uwsgi, varnish, vlc, wget, zsh … … … and 110 more.

re2: bloaty, chromium/chromedriver/qtwebengine, clickhouse, libgrpc

libhs: libndpi, rspamd