You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(devguide): file the open items as proposals, and retire the JIT premise
The pending work surfaced by the full devguide read now has documents where
future sessions will look for it, instead of living as notes inside the pages
that happened to mention it.
New:
- opt_in_hover_telemetry.md — stop forwarding hover to the kernel when nobody is
listening. The July round deduplicated identical hovers, which fixes a resting
mouse and does nothing for a moving one, so the original ~16 messages/s during
real hovering remain. Blocked on one decision: what view.hover_target means
when telemetry is off. An empty target that looks like "nothing under the
cursor" is the silent staleness Contract S7 forbids, so the honest option is an
explicit disabled state.
- post_1.0/qt_popout_parity.md — the Qt shell is built with include_popout=False,
so the whole popup control plane runs only on AnyWidget. Staged at Stage 4 of
the host plan, not a defect, but worth naming: the host plan warns about
features that work only in standalone and says nothing about the mirror case,
which is what R3 was about.
- post_1.0/scene_object_owner_field.md — an add-on's shape is indistinguishable
from one the user drew. Records why it must not be built by generalising the
transient-region mechanism: those hide objects the user should not manage, and
an add-on's shape is explicitly theirs to delete.
Retired, same day it was drafted: a JIT cold-start proposal. MolSysMT was
rewritten in Rust for 1.0 and no longer uses Numba — verified, no .py under
molsysmt/ references it and it ships _rust.abi3.so. That removes the premise of
standalone_performance_and_depythonization.md: its Path A is moot, its Path B
already happened years ahead of its v2.0.0 target, and only Path C survives.
The consequence for standalone_v2_evolution_plan.md cuts both ways and both are
recorded. Against Option 3: startup latency was its strongest argument, and the
Rust half already delivered that without removing Python. For it: the
Development Cost row priced a full Rust rewrite that is now done, leaving a
wasm32 target and the JS surface. The startup cost of Option 1 has not been
measured since the rewrite and must not be quoted from the old figures.
pending_proposals/README.md was still directing the reader to finish R2, close
D3 and implement D4, all of which landed. It now states that the two implemented
proposals are retained deliberately as the design record, which is an exception
to its own triage rule and was worth making explicit rather than leaving as an
apparent oversight.
*Note: The high maximum and standard deviation on the `dialanine` loading are caused by the initial python import, dynamic compiler JIT cache load (Numba/MolSysMT), and library warming during the first iteration.*
73
+
*Note: The high maximum and standard deviation on the `dialanine` loading are caused by the initial python import and library warming during the first iteration. (This note used to also credit a "dynamic compiler JIT cache load (Numba/MolSysMT)". **MolSysMT was rewritten in Rust for 1.0 and no longer uses Numba**, so that component of the variance no longer exists and these figures predate the change.)*
74
74
75
75
### 🔄 2. Coordinate Transfer Performance
76
76
Measures coordinate extraction (`get_coordinates`) and replacement/scene-rebuild (`set_coordinates`).
Copy file name to clipboardExpand all lines: devguide/standalone_performance_and_depythonization.md
+27Lines changed: 27 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,32 @@
1
1
# Standalone Performance and De-pythonization Roadmap
2
2
3
+
> **Overtaken by events (2026-07-31). Read the rest of this document as the
4
+
> analysis that led to a decision, not as pending work.**
5
+
>
6
+
> **MolSysMT no longer uses Numba. It was rewritten in Rust for 1.0.** Verified
7
+
> against the installed package: zero `.py` files under `molsysmt/` reference
8
+
> `numba`, and it ships a compiled `_rust.abi3.so`.
9
+
>
10
+
> That means **Path B / Phase 2 has already happened**, years ahead of the
11
+
> v2.0.0 target this roadmap assigned it — and it happened in MolSysMT rather
12
+
> than as a separate `molsys_core` crate. The consequences for this document:
13
+
>
14
+
> | Section | Status |
15
+
> |---|---|
16
+
> | §1 "The Cold Start Problem" — the 3–5 s JIT freeze |**Gone.** The premise no longer exists. |
17
+
> | Path A (Numba cache / AOT) |**Moot.** There are no `@jit` decorators left to cache. |
18
+
> | Path B (Rust + PyO3) |**Done**, in MolSysMT itself. |
19
+
> | Path C (WASM / de-pythonization) |**Still open**, and now much closer: the Rust core it presupposed exists. Its own preconditions — API parity between the Python library and a WASM/JS surface, and a Tauri-class shell — are untouched. |
20
+
> | Phase 1 of the Recommended Roadmap | Withdrawn. |
21
+
>
22
+
> What is worth re-deriving rather than assumed: the standalone host's *actual*
23
+
> startup cost today. This document's numbers all measured JIT compilation. Any
24
+
> remaining startup latency now has a different cause — import cost, Qt WebEngine
25
+
> initialization, or first-load serialization — and none of it has been measured
26
+
> since the rewrite. **Do not quote the 3–5 seconds below as current.**
27
+
>
28
+
> Path C's evaluation stands and is the only part of this file still live.
29
+
3
30
This document outlines the strategic roadmap for addressing the JIT compilation latency ("cold start" problem) in the `molsysmt` / `molsysviewer` backend, particularly for non-programmer desktop environments. It analyzes immediate workarounds and long-term architectural transitions to Rust and WebAssembly (WASM).
0 commit comments