diff --git a/CHANGELOG.md b/CHANGELOG.md index b3835db..1ca4ac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,27 @@ History note: - 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.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 diff --git a/lynglib/build.gradle.kts b/lynglib/build.gradle.kts index 7289dac..fe1b836 100644 --- a/lynglib/build.gradle.kts +++ b/lynglib/build.gradle.kts @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget group = "net.sergeych" -version = "1.5.4-SNAPSHOT" +version = "1.5.4" // Removed legacy buildscript classpath declarations; plugins are applied via the plugins DSL below diff --git a/lynglib/src/androidMain/kotlin/net/sergeych/lyng/PerfDefaults.android.kt b/lynglib/src/androidMain/kotlin/net/sergeych/lyng/PerfDefaults.android.kt index e15992f..beb252a 100644 --- a/lynglib/src/androidMain/kotlin/net/sergeych/lyng/PerfDefaults.android.kt +++ b/lynglib/src/androidMain/kotlin/net/sergeych/lyng/PerfDefaults.android.kt @@ -36,7 +36,7 @@ actual object PerfDefaults { actual val PIC_DEBUG_COUNTERS: Boolean = false actual val PRIMITIVE_FASTOPS: Boolean = true - actual val RVAL_FASTPATH: Boolean = true + actual val RVAL_FASTPATH: Boolean = false // Regex caching aligns with JVM behavior on Android (Dalvik/ART) actual val REGEX_CACHE: Boolean = true actual val ARG_SMALL_ARITY_12: Boolean = false diff --git a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/PerfProfiles.kt b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/PerfProfiles.kt index 19276a9..b1bcaf4 100644 --- a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/PerfProfiles.kt +++ b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/PerfProfiles.kt @@ -180,7 +180,7 @@ object PerfProfiles { PerfFlags.PIC_DEBUG_COUNTERS = false PerfFlags.PRIMITIVE_FASTOPS = true - PerfFlags.RVAL_FASTPATH = true + PerfFlags.RVAL_FASTPATH = false // Keep regex cache/platform setting; enable on JVM typically PerfFlags.REGEX_CACHE = PerfDefaults.REGEX_CACHE diff --git a/lynglib/src/jvmMain/kotlin/net/sergeych/lyng/PerfDefaults.jvm.kt b/lynglib/src/jvmMain/kotlin/net/sergeych/lyng/PerfDefaults.jvm.kt index 60078ee..ed271e5 100644 --- a/lynglib/src/jvmMain/kotlin/net/sergeych/lyng/PerfDefaults.jvm.kt +++ b/lynglib/src/jvmMain/kotlin/net/sergeych/lyng/PerfDefaults.jvm.kt @@ -36,7 +36,7 @@ actual object PerfDefaults { actual val PIC_DEBUG_COUNTERS: Boolean = false actual val PRIMITIVE_FASTOPS: Boolean = true - actual val RVAL_FASTPATH: Boolean = true + actual val RVAL_FASTPATH: Boolean = false // Regex caching (JVM-first): enabled by default on JVM actual val REGEX_CACHE: Boolean = true