# 2025-09-17 ## rust-analyzer updates from David Barsky Continuing to integrate new trait solver. Main rust-analyzer maintainer continues to be Lukas. ## Persistence Ibraheem hit pause to prioritize other work ## Fixed point in ty * [Unsoundness bugs in fixed point](https://hackmd.io/ssTCBqsLSiioAARm5mlDGw) * Performance bugs in deeply nested cycles ### Sketching ```mermaid flowchart LR subgraph B B2 --> B1 --> B0 end B0 --> A C --calls --> B2 ``` * $A \rightarrow B$ means that A calls B ```python def c(): r = b() def b(): base_result = a() # other stuff that eventually calls b() def a(): ... ``` * Option A: whatever we do today, which we can review * Option B: naively execute gives you 5 memos * Option C: naively execute but then "flatten" the dependencies, so you wind up with ```mermaid flowchart LR C --> B --> A ``` but what about this kind of thing ```mermaid flowchart LR subgraph Cycle A --> B B --> A end A --> X B --> Y ``` problem here is: * where X or Y "comes first" depends on which part of the cycle you start from * Y may take a salsa struct as argument that was created by X, returned via A to B * normally when we validate Y we assume that whoever created its arguments has also been validated * but here because of how cycle recording works we may wind up validating just Y first * the result from prior iterations "burrows" its way without a visible dependency to fix it you could * flatten the head to things outside the cycle * when validating the participant, you make a dependency on the head or etc the diff outputs bug is * do not diff outputs * diff outputs only against the final revision rough options * "the pure option" -- we unfold iterations, making them part of the input/memo-id * benefit: reuse of intermediate cycle results * downside: memory usage may be high, cache footprint becomes bigger, etc * "do what we're doing but do it right" * diff-outputs knows to "hold" on diff until final result * fix deep-verify-memo to start with the head or somethin * and/or isn't diff'd * benefit: compressed memory usage * downside: no reuse of intermediate cycle result * "fixed reuse pattern" * keep iteration 0 + N only ... somehow