ES version is available. Content is displayed in original English for accuracy.
Advertisement
Advertisement
⚡ Community Insights
Discussion Sentiment
71% Positive
Analyzed from 1072 words in the discussion.
Trending Topics
#regex#https#complete#more#nfa#regexes#engine#turing#move#dfa

Discussion (49 Comments)Read Original on HackerNews
During my CS years I remember being fascinated by NFA's, as opposed to boring single universe DFA's.
For some reason I internalized that I would never see something like an NFA implemented beyond text books.
Then came Carlini.
And we always changed the regex NFA to an equivalent DFA and that was the implementation.
So somehow I managed to internalize the idea that an NFA is purely theoretical and can't be built.
im practice is a good idea to build a DFA from your regex, up front (re2) or lazily (ripgrep)
It would be different, if the number of regexes was maybe below 300, and it still plays acceptably. The sheer number of regexes kind of defeats the purpose.
At that code size, a much better engine can be written, or other kind of code for an engine be generated. Regexes themselves are not really something we should strive to use more either. Maybe its intentional badness kind of makes it art?
Meanwhile, 1K ZX Chess takes fewer bytes of memory than the first four paragraphs from the post.
I guess it's the whole point of such type of blog posts. Similarly, some people write complicated interactive web pages without using JS, like this https://benjaminaster.com/css-minecraft/. But if you look at the HTML / CSS code size, it's usually huge, but still requires creativity to do that because of constraints. Obviously, it's not something practical or even optimal.
There are people who navigate the web with JavaScript turned off, so those experiments do have practical applications.
There are entire projects around not using JavaScript.
https://theosoti.com/you-dont-need-js/
https://github.com/you-dont-need/You-Dont-Need-JavaScript
This is practical (and necessary) for relatively basic stuff, such as text content, navigation, basic form / input validation, and things like that. But when people write more complicated things (requiring state management, logical branches, etc), like games, 3d programs, etc, it's much more challenging (also can be sub-optimal) and requires more creativity. I mean they are more of a demo art rather than some strong necessity.
I wish more submissions began with, “This might be a bit wild, but I wanted to see if it could actually work.”
That is how esoteric programming languages start.
Some of the best things I've ever created started from, "I wonder what would happen if I tried this crazy approach..."
https://www.youtube.com/watch?v=DpXy041BIlA
https://tom7.org/chess/
1. e4 e5 2. Nf3 Nf6 3. Nxe5 Nxe4 4. Qe2 Nxd2 5. Nc6+ Ne4 6. Nxd8 Kxd8 7. Qxe4 a6 8. Bg5+ Be7 9. Qxe7#
In the Stockfish notation this engine uses, White’s moves are:
1. e2e4 2. g1f3 3. f3e5 4. d1e2 5. e5c6 6. c6d8 7. e2e4 8. c1g5 9. e4e7
Here is a Lichess analysis of this game:
https://lichess.org/WnMF3LpX
(In terms of Regexes, Javascript has a very rich Turing complete Regex library; it’s an open question whether Lua 5.1’s regexes are Turing complete, but they are good enough for the text processing I do)
1.d4 d5 2.c4 dxc4 3.Nc3 Qxd4 4.Qxd4 a6 5.Bf4 a5 6.Bxc7 a4 7.Qd8#
Are you sure you typed “c5e5”?
It’s very picky about how you specify a move. “e2e4” is fine as a first move, for example, but auto-capitalized “E2e4” is losing immediately. Quite weird, given that there are guardrails against “e2-e4” and “E2-E4” (an alert pops up telling you how to write moves)
Compiling Python to a Branch-Free SIMD Virtual Machine via Extended Regular Expression String Rewriting