Skip to main content

Aleph - 0.45.0

๐Ÿš€ Highlightsโ€‹

  • Aleph scripts now have less name-lookup and allocation overhead. Compared with the baseline recorded before this performance work began, the runtime is 3.4% faster across the original 11-benchmark suite, with targeted name-heavy workloads improving by up to 62.2%. Further runtime optimizations are planned as part of this ongoing work.
  • Numerical Pauli strings now support systems of Nโ‰ค256N \leq 256 qubits through the renamed PauliString and PauliStringSum.

โœจ New Featuresโ€‹

  • Aleph functions, overloads, methods, and constructors can now declare AlephDoc metadata in JSDoc-style /** ... */ comments for editor hovers and generated API documentation.
  • Numerical Pauli strings are now more powerful:
    • Renamed PauliTerm โ†’ PauliString and PauliSum โ†’ PauliStringSum to be more expressive.
    • They support Nโ‰ค256N \leq 256 qubits.
    • Added a new constructor PauliString(string, sites, num_qubits) for easier control over Pauli string creation.
    • Printing now displays the string only for the number of qubits in the Hilbert space.
    • Verbose printing is now available via display() for both PauliString and PauliStringSum.

๐Ÿ›  Improvementsโ€‹

  • Reduced temporary allocations in function calls, arithmetic, container operations, and other interpreter hot paths. Targeted benchmarks perform approximately 50โ€“78% fewer allocations.
  • Optimized variable, function, global, and type-name lookup. Scripts with wide local scopes run 28.3% faster, with 27.6% fewer allocations and 32.6% fewer allocated bytes; lookup in large engine name tables is 62.2% faster.
  • Aleph LSP callable analysis now:
    • Reads typed native and script signatures without executing user code.
    • Infers straightforward function, method, constructor, and overloaded call results for hover.
    • Reports NoMatchingOverload warnings only when every arity-compatible overload is statically impossible.
    • Preserves dynamic any and indeterminate suppression, registered conversions, included callable metadata, and runtime guard behavior.
  • Aleph LSP type analysis now:
    • Shows inferred result types in hover for native and Aleph functions, methods, constructors, operators, assignments, indexing, and member access.
    • Warns when known argument types cannot match an overload or when a value cannot be assigned to a variable's established type.
    • Remains permissive for intentionally dynamic or incomplete code.
  • Document formatting now normalizes Aleph source documentation blocks, while malformed tags produce non-blocking editor warnings.
  • Added hover and API documentation for Aleph-defined standard-library functions.

โš™๏ธ Internal / Technical Changesโ€‹

  • Aleph now resolves names once and uses compact, per-engine identifiers during execution. Human-readable names and portable runtime snapshots are retained for diagnostics, tooling, and interoperability.

โš ๏ธ Breaking Changesโ€‹

  • Replaced the Aleph types PauliTerm and PauliSum with PauliString and PauliStringSum. Constructors and convert_to_pauli_sum(...) now require the number of qubits, while xbits() and zbits() now return lists of 64-bit chunks.

๐Ÿงช Migration Notesโ€‹

  • Rename PauliTerm to PauliString and PauliSum to PauliStringSum, then pass the system size explicitly. For example, use PauliString("XZ", [0, 70], 128) and PauliStringSum(128). Update single-chunk bit access such as p.xbits() to p.xbits()[0].