What's New in v1.10
"The Quality Release" — no new language features. Every change makes Wyn faster, safer, and more stable.
Highlights
- Zero memory leaks — every string, array, and HashMap freed deterministically
- Faster than Go on compute — fib(35): 33ms vs Go's 38ms
- 5,306x faster string append than Go — 6ms vs 31,834ms for 1M appends
- 49KB binaries — down from 425KB
.sort()works — was silently a no-op in v1.9, now in-place qsort- Stdlib APIs fixed — Json, Http, Db, Crypto all work with correct param counts
Performance
| Benchmark | v1.9 | v1.10 |
|---|---|---|
| fib(35) | 120ms | 33ms |
| Sort 1M ints | broken | 15ms |
| 1M string append | 12,143ms | 6ms |
1M .len() | ~100ms | 1ms |
wyn build | ~4s | 411ms |
| Binary size | 425KB | 49KB |
| Memory (1M ops) | ~3GB (leaked) | 1.4MB |
Memory Safety
- 50+ string functions converted to RC-tracked allocation
- All buffer overflows eliminated (6 fixed-size buffers → dynamic)
- Thread-safe RC with atomic CAS operations
- Concurrent string operations: 30/30 correct, zero crashes
- Verified with AddressSanitizer + UndefinedBehaviorSanitizer
Bug Fixes
.sort()was a no-op — codegen discarded the sorted copy- String array
.sort()— used int comparator instead of strcmp - Signed division —
-7 / 2gave-4instead of-3 - Division by zero — now panics with clear message (was silent 0)
- Triple method chain —
"hello".trim().upper().reverse()crashed - Stdlib param counts — all builtin module functions had hardcoded 1-param limit
- Method chain leak —
"hello".upper().trim()leaked the intermediate - println/print leak —
println(x.to_string())leaked every call
Testing
- 110 unit tests + 32 expect/regression tests = 142 total
- All tests pass on macOS, Linux, Windows (ARM + x64)
- Zero ASan/UBSan errors
Other Releases
- What's New in v1.11 — developer experience
- What's New in v1.9 — generators, debugger