Open markATavail opened 1 year ago
I fear the fix will involve a significant change to the bipartite rendezvous mechanism. That mechanism allows both new subexpression parses and new requests that consume a subexpression to show up in arbitrary order, in different threads, while ensuring that each consumer gets a chance to run with each possible subexpression.
For the specific case of semantic version, the error was about a redundancy of aMinor
, the second local constant. That was probably a consequence of the first local constant, aMajor
, having been parsed two distinct ways, leading to two different constants in the different parsing paths (due to differing parsing instructions).
We're still working on a tiny test case to exhibit the problem (and which will be added as a regression test), but Todd's work with
semantic version
on 2023-08-23 indicated strongly that multiple macro implementations ran. The method was an override of"«…‡,»::=_;"
for exactly 3 local constants, which would have caused an early divergence in the parsing instruction tree, making it unclear whether we even have invented a mechanism that can converge them again to prevent multiple macro implementations from running. The proximal solution involved making the locals list in the override have size [2..∞), like the core implementation, and post-filtering it with a parse rejection if it didn't happen to be 3. That success seems to implicate the divergence of bundle trees due to parsing instruction variation in the plans generated for the implementations.