1,564 karma · joined January 29, 2008
Blog: http://conquerthelawn.com
Email: david@conquerthelawn.com
[ my public key: https://keybase.io/davidkellis; my proof: https://keybase.io/davidkellis/sigs/AKzpifIiRgWa97aNiKrbrC3neurZKW15R583o5vwxKI ]
Toasts:
- https://maxschmitt.me/posts/toasts-bad-ux
- https://youtu.be/LeCKu0HqGFQ?si=xKApVFSqdzLGF0SD
Modals (being a special case of modes):
- https://modalzmodalzmodalz.com/
Modes:
- https://www.nngroup.com/articles/modes/
- https://ilyabirman.net/meanwhile/all/timed-modes/
What else?
I run PopOS
I've been working fully remote for a year and a half, and homeschooling doesn't hinder my remote work in any way. I periodically have a "break-in", where one of the kids barges into the office during a meeting, but it's no more interruption than any other common interruption (e.g. someone comes in late, someone pardons themself to the restroom, etc.).
I think V is an impressive language, but it isn't quite geared toward my vision of what a language ought to be.
I am more a Rubyist than a C, Rust, or Go developer, and so my preference is for a higher level language that's a little more pleasant to use and doesn't make me think about some details that I consider "irrelevant". I'm firmly in the "sufficiently smart compiler" camp, and think that I shouldn't have to think about those low level details that only matter for the sake of performance - the compiler ought to handle that for me.
My takeaway from Tratt's explanation was that the general technique of growing the seed bottom-up style when in left-recursion - I think I've also seen that idea termed "recursive ascent" somewhere else but I can't place it offhand - seemed reasonable, so that's what I kept working on until I figured out something that seemed to work.
Later on, I ran across https://github.com/PhilippeSigaud/Pegged/wiki/Left-Recursion, which describes Sergio Medeiros' technique at a high level. One of the nice things I used from the Pegged project was the unit test suite. I re-implemented some of the unit tests from Pegged in my own PEG implementation and discovered that it failed at those unit tests.
It took me another number of months to figure out why my implementation failed the unit tests. I re-jiggered my implementation to make it handle the scenarios captured by those unit tests, and then naively thought "hey, it works!"...
All was well until I ran across another set of unit tests in the Autumn PEG parser (see https://github.com/norswap/autumn). My implementation failed some of those as well. After another number of months, I had a fix for those too.
Long long long story short, this process continued until I couldn't find any more unit tests that my implementation would fail, so once again I'm at the point where I think "well, I think it works".
There have been a number of occasions where I've thought "if this doesn't work, I'm just going to re-implement Pegged in Crystal!". Perhaps that's what I should've done. Ha ha! In a few months, when I find another test case that breaks my implementation, I may just do that. We'll see. I hope it doesn't come to that. Fingers crossed. :-)
My rationale for starting this project was that I like specific features or facilities of many individual languages, but I dislike those languages for a host of other reasons. Furthermore, I dislike those languages enough that I don't want to use them to build the projects I want to build.
I'm still at a relatively early point in the project, but it has been challenging so far. I'm implementing the compiler in Crystal, and I needed a PEG parser combinator library or a parser generator that targeted Crystal, but there wasn't a PEG parser in Crystal that supported left recursive grammar rules in a satisfactory way, so that was sub-project number 1. It took two years, I'm ashamed to say, but now I have a functioning PEG parser (with seemingly good support for left recursive grammar rules) in Crystal that I can use to implement the grammar for my language.
There is still a ton more to be done - see http://www.semanticdesigns.com/Products/DMS/LifeAfterParsing... for a list of remaining ToDos - but I'm optimistic I can make it work.
Presumably there are some people who are willing to do a trial, either concurrent with their existing employment, or on the chance that they will be hired after the trial.
What parsing algorithm does chevrotain use under the hood? Does it allow left-recursive and right-recursive productions/rules?
Ohm also has a nice interactive editor: https://ohmlang.github.io/editor/