> On Mar 19, 2025, at 8:18 PM, Jason E. Aten <j.e.a...@gmail.com> wrote: > You reach for super simple code, maybe codedgen that allows > inlining,
There are definitely code generators that exist for lexers and parsers — Pigeon, goyacc, Gocc, Textmapper, etc. — and those are great projects in their own right. But I am working on a fork of an existing hand-coded parser, one that was not created with such a code generator, and that type of coding is much more common in day-to-day work, at least for any projects I have been a part of. For day-to-day coding work — vs. working on a dedicated code generator project — the idea of writing a code generator to generate a state machine for a lexer reminds me of that old meme "The developer had a problem so they thought 'Hey, I can use a regex for this!' Now the developer has two problems." > I don't know what quirk of human nature is that causes > so many to want to change a language to fit their whims, While some people view other's motivations as "whims" the people being viewed pejoratively are often experiencing actually pain points. The pain point I was experiencing is having to write (and later having to read) this tortured control structure in many different places: switch c { case ' ', '\t', '\n': return Token } } Since I envisioned that Go could have a much simpler, clearer, and easier to read alternative, it seemed to me like it would be a great fit for the Go language especially given the more ergonomic recent improvements the Go team made to the for loop: if c is ' ', '\t', '\n': return Token } This construct could have leveraged the existing multi-matching behavior of switch-case and it felt smaller in scope but with similar utility compared to the recent for loop enhancements. > when that language has as a principal virtue that it wants to be super > readable Given the specific pain point that was my motivation to request a language enhancement, I find that comment to be super ironic. > You can always write assembly or SIMD AVX512 code if you really need it > to go faster. That's all supported today. It sounds like you are suggesting jumping out of the frying pan — e.g. having to write and later read five (5) lines with two (2) lines of indent vs. three (3) lines with one (1) level of indent — and planting one's self firmly in the fire. AFAICT, an assembly/SIMD AVX512 solution would create more pain for this use-case, not less. BTW, I replied a second time to Ian after my initial email because — even though my primary interest was in having improved readability — I discovered that what I proposed would perform typically ~75% better than the generic Is(), assuming the current switch case is any indication. So since it seemed to me like a wonderful "kill two birds with one stone" kind of win — an easier-to-write and easier-to-read construct that performs better than the offered alternative — I made the incorrect assumption that such a feature would be a no-brainer enhancement to Go so I asked to verify if performance would provide any addition motivation to revive what I was told was a dead horse. But given my intuition on this idea failed — and it clearly is a dead horse, with no hope for revival on the horizon — is there any upside to continue beating it? -Mike P.S. I was not planning to continue this thread because Ian shut down the idea so AFAICT further discussion was a moot point. OTOH, since you took the effort to write a detailed argument I felt I should at least give you the courtesy of responding. -- 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 visit https://groups.google.com/d/msgid/golang-nuts/31FAFEE2-04AE-48CC-A3BB-2E5BA269D76E%40newclarity.net.