CrimsonCape
Joined 4 years ago
Joined 4 years ago
That said, it has a problem with 'rootedness' as in 'what is the root of this attribute string'.
Firstly, 'with' keyword allows you to silently slice off the front end when the attribute string originates from a passed-in argument variable.
Secondly, when you arrive at foo in foo.bar, you have no concept of what the ancestor path looks like; someone is going to do an import of this file, likely store it in a named variable in the context it is needed, and then dispose it. Every time we need foo, it's being referenced from some ephemeral external context. So it's impossible to say or know "foo has 5 references" via static analysis unless we are just grepping it.
Thirdly, (related to above), when you declare services.tailscale.enable = true; you are relying on some ephemeral other location to find meaning in services-dot as declared in the current file. Metaphorically, we can't actually turn and face upstream looking up the call stack to easily see how we arrived (nor how many times we expect to arrive) at this site.
'Self' in the context of flakes is another great example of emphemeral-ness and non-discoverability...what is accessible under 'self'? It takes a PHD to describe it.
Allowing strings mixed in (foo.bar."baz".biz) and the expectation that you might be interpolating (foo.bar."${baz}".biz) is a whole nother ball of wax...
var service = thisSystem.GetService("rss-news-feed");
service.SetRefresh(TimeSpan.FromHours(1));
service. //<----now we can autocomplete everything a service can do.
Edit: it's a travesty that OO get's shoehorned into architectural design of large systems whereas it would be ideally suited in a Nix-like API for interacting with operating systems which are 'solved'.
I can't help but feel that when I mimic their behavior with an LLM, it works great. Just keep pounding claude saying what I want, prove it with tests, and have claude give me a 1 shot script to build and launch the app. I get hands-on time with the UX a lot more (I think?) and claude happily iterates. Most people stop happily iterating after like iteration 2; then becomes teeth-pulling.
So to your point, claude's tests are gibberish but the 'testing' via user interaction is what I think the future is going to look like.
We will need some novel systems where hot-reloading is the default experience and you are looking at the build output constantly as opposed to the source.
claude was like "I took your logic, removed the shared state, ran the tests 600 times in parallel, proved no state is leaking across runs". I was impressed...
You could assume that { and } as a structural delimiter only applies to node types that can nest. Since blobs do not nest, then a tag followed by a backtick (or multiple backticks) could be a valid delimiter in lieu of braces. In this case, tags would extend to blobs.
In my opinion, pairing minimal node types with differing delimiters helps legibility and is not overly mentally taxing to learn when node types are few.
I'm assuming any tool in this regard would expect the user to write an EBNF grammar.
I found ANTLR to be nice but it's way too convoluted to use as a tool with Java dependencies and seems to be stagnating. And tree sitter just is too convoluted and requires the added C/C++ overhead to understand how to use it.
It's paranoia, but until they release the source, it's not proven paranoia.
Not sure if Gen Z or Millenials will get the idea first, but we have not experienced a move to 'I should dress like my parents'. So far it's still been 'let's resurrect this old look'. Mom-look and dad-look is not in currently. It will come back.