131 lines
6.5 KiB
Markdown
131 lines
6.5 KiB
Markdown
# 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.
|
|
|
|
## Unreleased
|
|
|
|
### Database access
|
|
- Added the portable `lyng.io.db` SQL contract and the first concrete provider, `lyng.io.db.sqlite`.
|
|
- Added SQLite support on JVM and Linux Native with:
|
|
- generic `openDatabase("sqlite:...")` dispatch
|
|
- typed `openSqlite(...)` helper
|
|
- real nested transactions via savepoints
|
|
- generated keys through `ExecutionResult.getGeneratedKeys()`
|
|
- strict schema-driven value conversion for `Bool`, `Decimal`, `Date`, `DateTime`, and `Instant`
|
|
- documented option handling for `readOnly`, `createIfMissing`, `foreignKeys`, and `busyTimeoutMillis`
|
|
- Added public docs for database usage and SQLite provider behavior.
|
|
|
|
### Time
|
|
- Added `Date` to `lyng.time` and the core library as a first-class calendar-date type.
|
|
- Added `Instant.toDate(...)`, `DateTime.date`, `DateTime.toDate()`, `Date.toDateTime(...)`, and related date arithmetic.
|
|
- Added docs, stdlib reference updates, serialization support, and comprehensive tests for `Date`.
|
|
|
|
### Release notes
|
|
- Full `:lyngio:jvmTest` and `:lyngio:linuxX64Test` pass on the release tree after SQLite hardening.
|
|
|
|
## 1.5.4 (2026-04-03)
|
|
|
|
### Runtime and compiler stability
|
|
- Stabilized the recent `piSpigot` benchmark/compiler work for release.
|
|
- Fixed numeric-mix regressions introduced by overly broad int-coercion in bytecode compilation.
|
|
- Restored correct behavior for decimal arithmetic, mixed real/int flows, list literals, list size checks, and national-character script cases.
|
|
- Fixed plain-list index fast paths so they no longer bypass subclass behavior such as `ObservableList` hooks and flow notifications.
|
|
- Hardened local numeric compare fast paths to correctly handle primitive-coded frame slots.
|
|
|
|
### Performance and examples
|
|
- Added `piSpigot` benchmark/example coverage:
|
|
- `examples/pi-test.lyng`
|
|
- `examples/pi-bench.lyng`
|
|
- JVM benchmark test for release-baseline verification
|
|
- Kept the safe list/index/runtime wins that improve the optimized `piSpigot` path without reintroducing type-unsound coercions.
|
|
- Changed the default `RVAL_FASTPATH` setting off on JVM/Android and in the benchmark preset after verification that it no longer helps the stabilized `piSpigot` workload.
|
|
|
|
### Release notes
|
|
- Full JVM and wasm test gates pass on the release tree.
|
|
- Benchmark findings and remaining post-release optimization targets are documented in `notes/pi_spigot_benchmark_baseline_2026-04-03.md`.
|
|
|
|
## 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.
|