lyng/CHANGELOG.md

4.1 KiB

Changelog

This file tracks user-visible Lyng language/runtime/tooling changes.

History note:

  • The project had periods where changelog maintenance lagged behind commits.
  • Entries below are synchronized and curated for 1.5.x.
  • Earlier history may be incomplete and should be cross-checked with git tags/commits when needed.

1.5.1 (2026-03-25)

Language

  • Added string interpolation:
    • "$name" identifier interpolation.
    • "${expr}" expression interpolation.
  • Added literal-dollar forms in strings:
    • "\$" -> $
    • "$$" -> $
    • \\$x is parsed as backslash + interpolation of x.
  • Added per-file interpolation opt-out via leading directive comment:
    • // feature: interpolation: off

Docs and AI references

  • Updated compiler-accurate AI language docs:
    • interpolation syntax and escaping
    • per-file feature switch behavior
  • Refreshed tutorial examples and doctests to reflect new interpolation semantics.
  • Added/reworked current proposal/reference materials for Lyng common-platform guidance.

Compatibility notes

  • Interpolation is enabled by default for normal string literals.
  • Existing code that intentionally used $name as literal text should use \$name, $$name, or the file directive // feature: interpolation: off.

1.5.0 (2026-03-22)

Major runtime/compiler direction

  • Completed migration to bytecode-first/bytecode-only execution paths.
  • Removed interpreter fallback behavior in core execution hot paths.
  • Continued frame-slot-first local/capture model improvements and related diagnostics.

Language features and semantics

  • Added/finished return semantics including labeled non-local forms (return@label).
  • Added abstract classes/members and interface support (as abstract-class-style construct).
  • Completed and enabled multiple inheritance with C3 MRO by default.
  • Added class properties with accessors (get/set) and restricted setter visibility (private set, protected set).
  • Added late-initialized class val support with Unset protection rules.
  • Added named arguments (name: value) and named splats (...map) with stricter validation.
  • Added assign-if-null operator ?=.
  • Improved nullable/type-checking behavior (including T is nullable and related type checks).
  • Added variadic function types (... in function type declarations) and tighter lambda type checks.

Type system and collections

  • Added immutable collections hierarchy (ImmutableList, ImmutableSet, ImmutableMap).
  • Improved generic runtime binding/checking for explicit type arguments and bounds.
  • Added smarter type-aware collection ops (+=, -=) and stronger declared-member type checks.

Extern/Kotlin bridge

  • Tightened extern declaration rules:
    • explicit extern members are required for extern class/object declarations.
  • Improved extern generic class behavior and diagnostics.
  • Extended bridge APIs for binding global functions/variables and object/member interop scenarios.

Standard library and modules

  • Added lyng.observable improvements (ObservableList hooks/events).
  • Added Random stdlib API used by updated samples.
  • Added/extended lyngio.console support and CLI integration for console interaction.
  • Migrated time APIs to kotlin.time (Instant migration and related docs/tests).

CLI, IDE, and docs/tooling

  • CLI:
    • added first-class fmt command
    • preserved direct script fast-path invocation
    • improved command help/dispatch behavior
  • IntelliJ plugin:
    • improved lightweight completion and documentation/inspection behavior
    • continued highlighter and Grazie/spellchecking integration work
  • Docs:
    • substantial updates across tutorial/OOP/type/runtime references
    • expanded bytecode and advanced topics coverage

Migration checklist for 1.5.x

  • If you rely on literal $... strings:
    • replace with \$... or $$..., or
    • add // feature: interpolation: off at file top.
  • Review any code relying on interpreter-era fallback behavior; 1.5.x assumes bytecode-first execution.
  • For extern declarations, ensure members are explicitly declared where required.
  • For named arguments/splats, verify call sites follow stricter ordering/duplication rules.