Skip to content

Releases: PerryTS/perry

v0.5.1116

03 Jun 19:49

Choose a tag to compare

Highlights

42 commits since v0.5.1112 — a broad Node.js + TypeScript parity push: language-correctness fixes (assignment evaluation order, arrow binding, default-param TDZ, new.target), more Node built-in surface (Atomics, Intl, X509, child_process options, web stream adapters), and runtime prototype/reflection fixes.

Features

  • Atomics: basic operations + bitwise operations (#4247, #4253)
  • Expose core Intl constructors (#4254)
  • X509Certificate: publicKey, name checks, and extension metadata (#4249, #4252, #4241)
  • node stream → web stream adapters (#4237)
  • Complete Array.fromAsync mapFn semantics (#4238)

Fixes — runtime & Node compat

  • node:events module-level static helpers (once/on/listenerCount/…) now dispatch (#850)
  • Dispatch uncurried hasOwnProperty directly (#4279)
  • Uint8Array.of/from build the buffer-backed representation
  • isPrototypeOf + Reflect.set/getPrototypeOf/deleteProperty throw on non-object (#4265)
  • Install DataView.prototype accessors + get/set methods (#4256)
  • Convert asymmetric KeyObjects to CryptoKey (#4245)
  • Expose HTTP request abort signals (#4248)
  • Invoke registered loader hooks for dynamic imports (#4225)
  • String.matchAll iterator semantics (#4223)
  • Preserve CommonJS require function name (#4220)
  • Materialize array-like receivers for Array.prototype.*.call (#4231)
  • child_process: honor async buffered limits, argv0, and stdio: inherit (#4250, #4246, #4240)
  • Honor closure accessor properties (#4243)
  • Respect symbol enumerability in Object.assign (#4239)
  • Skip sparse array holes in iteration methods (#4236)

Fixes — codegen & language parity

  • Restore scalar method inlining for PutValueSet constructors (#945)
  • Cap pointer local type growth in codegen (#4235)
  • Cache tagged-template objects per call site (#4234)
  • Prototype & super assignment parity (#4233)
  • Assignment evaluation order (#4229)
  • Arrow special binding semantics (#4228)
  • Preserve with references for delete (#4227)
  • Default-parameter TDZ for later bindings (#4226)
  • Preserve lexical new.target for arrows (#4224)
  • Use generator closure prototypes for instances (#4222)
  • Avoid recursive constructor inlining (#4221)
  • Preserve CommonJS require name / honor well-known archives in no-auto links (#4242)
  • Native instance walk for fluent chains (#4219)

Infrastructure / tests

  • Parity: expected-exit=1 for intentional-throw expected-output tests
  • HTTP upgrade-websocket frame coverage (#4251)
  • Optional PTY parity runner for tty (#4232)

v0.5.1112

03 Jun 06:39

Choose a tag to compare

First tagged distribution release since v0.5.1028 — folds in 1198 commits (852 fixes, 42 features, plus tests/docs/refactors). This tag is a clean version-bump checkpoint over a fully CI-green main.

Highlights

  • Broad Node.js builtin parity push: crypto/webcrypto, http/http2/Agent socket pooling, zlib (sync + streaming + Brotli), child_process (streaming spawn, fork + V8-IPC, promisify), util, process, punycode, url, worker_threads, stream (web codec constructors, iterator helpers), dgram, cluster, path, vm.
  • Reflective builtin-prototype brand checks (#3662 family): Function.prototype.apply/call/bind/toString, primitive prototypes (Number/Boolean/Symbol/BigInt), collection prototype methods, namespace member reflection.
  • Typed-array prototype + constructor coverage (join/slice/reverse/fill/subarray, RangeError validation, proto accessors).
  • Generational-GC evacuation + async-resume fixes.

Features (selected)

  • compile: module-graph tree-shaking / DCE for compilePackages.
  • Self-hosted build-time precompile() — Perry runs its own codegen with no node/V8.
  • node:zlib complete sync codec parity + Transform-stream objects + Brotli.
  • node:child_process async spawn reactor, fork + IPC, exec error/encoding parity.
  • node:http Agent socket pooling + createConnection/createSocket on the request path.
  • Generator function expressions, yield* operand iteration, class [Symbol.iterator]/[Symbol.asyncIterator] via member access.
  • perry/ui: continuous pointer/key events, onFrame/cancelFrame display-link callbacks; perry/audio cross-platform sound; GTK4 live CameraView.
  • Object.getOwnPropertyDescriptors, dynamic-import directory-glob template specifiers.

Fixes

  • 852 fixes across codegen, HIR lowering, runtime, and stdlib — Node export hygiene, dispatch correctness, stream construction paths, handle-deref segfaults, and large swaths of the TypeScript/Node compatibility roadmap (#793).

See CHANGELOG.md for the full per-version detail.

v0.5.1028

25 May 06:49
8e3f913

Choose a tag to compare

v0.5.1028 Pre-release
Pre-release

First tag in the v0.5.1025 → HEAD window — also implicitly ships the v0.5.1026 and v0.5.1027 work that never got their own tags. See CHANGELOG.md for the full per-PR history.

Highlights (v0.5.1025 → v0.5.1028):

  • node:timers epic (#1213, 6 PRs in v0.5.1026): node:timers/promises, numeric-id clear*, namespace import, ref() typeof, Symbol.dispose, global setImmediate/clearImmediate
  • node:perf_hooks fan-out (10 PRs in v0.5.1026): typeof methods, globalThis.performance identity, nodeTiming, toJSON, clearResourceTimings, structured-clone detail, observer-arg + buffered + throw cases
  • Windows fixes (v0.5.1027): #1542 black areas after App window resize; restored Windows source build (cp.rs set_path_times cfg-gating)
  • Compile / lockdown / dynamic-import (this batch): --trace/--focus flags (#1738); lockdown #503 allows ns[dynamicKey].staticMember (#1741); literal node: builtin import() (#1742); Blob/URL globals trigger http-client (#1747); win32 path.normalize/basename/toNamespacedPath edges (#1749)
  • Major parallel streams: v0.5.1026 closes #1424 (lazy-tape reviver SIGSEGV); #1429 GC unsafe-zone guards for fastify/hyper; v0.5.1027 + this batch include lockdown #503 polish; #1718-era HTTP trailers + WebSocket upgrades + Buffer encodings (#1709); native .js/.cjs + require() compile (#1711); URLSearchParams iteration (#1668); Web Streams inline property reads (#1670); fetch Request.text()/.json()/.arrayBuffer() (#1688); --debug-symbols retention (#1663); GC barrier on Promise pointer stores (#1715); regex dynamic dispatch (#1731); …

test_async_local_storage_context (#1423) remains skip-listed (.enterWith/.exit pending, sibling slice of #788/#789).

v0.5.1025

22 May 20:03
73ceb70

Choose a tag to compare

Hotfix on top of v0.5.1024, unblocking the gate failures from that release.

simctl iOS: find_geisterhand_lib no longer falls back to host target/release/<lib>.a when a cross-compile target is set — that fallback was producing macOS .a archives in iOS-simulator link commands AND masking the geisterhand auto-build trigger so the cross-target libs never got built.

Parity gate (2 new failures triaged):

  • #1423 test_async_local_storage_contextAsyncLocalStorage.enterWith / .exit aren't implemented end-to-end (sibling slice of #788 #789). Skip-listed.
  • #1424 test_json_lazy_reviverJSON.parse(blob, reviver) on a lazy-tape top-level array exits before any output. Skip-listed.

compile-smoke memory ceiling restore — PR #1422 (dec43e27) put the 290/315 MB test_memory_json_churn ceiling back after #1324 reverted it.

Also folds in the post-v0.5.1024 work that landed on main: #1365 crypto.generateKeyPairSync (RSA + EC) (#1418).

See CHANGELOG.md.

v0.5.1024

22 May 16:15
9402163

Choose a tag to compare

v0.5.1024 Pre-release
Pre-release

Release sweep — 26 PRs rolled up post-v0.5.1023.

Highlights:

  • node:crypto gap-fixesrandomInt, timingSafeEqual, getHashes / getCiphers, sha224 / sha384, base64 digest, Buffer hash input, no-arg digest() typed as Buffer, pbkdf2Sync digest argument, scryptSync (PRs #1386 #1393 #1394 #1402 #1405)
  • node:perf_hooks native impl — performance + User Timing + PerformanceObserver + granular node-suite (#1321 #1328 #1342)
  • #1090 GC checkpoint runtime work (#1324)
  • #1311 geisterhand on iOS--target ios builds + links inspector; SecureField registered; perry-stdlib auto-included (#1316 #1383 #1384 #1385)
  • #1323 wasm timer dispatch through mem_call bridge (#1329)
  • #1317 node:timers/promises segfault on global setTimeout shadow (#1326)
  • #1322 exact-head GC evidence packet diagnostics
  • #1330 node:process suite (#1331)
  • #1292 bcrypt.hash() returns real String (#1307)
  • #1293 fastify .json() / .body external-handle dispatch (#1308)
  • #1296 app-pattern performance gaps
  • #1297 diagnostics_channel parity
  • #1301 iOS App Groups capability (#1313)
  • #1318 #1325 os/methods/modern-methods static dispatch
  • #1315 expanded Node parity test coverage
  • #1382 ui-ios stdlib pump drain for async fetch
  • #1392 ui-wasm reactive state + setText on web/wasm target (#1404)
  • #1319 runtime thread-safety hardening for cross-thread statics
  • #1312 process.env.X (unset) is nullish (#1314)

See CHANGELOG.md for the full per-PR rollup.

v0.5.1022

22 May 02:53
4d80c91

Choose a tag to compare

Sequel to v0.5.1021 + binary-size baseline refresh.

  • #1246 follow-up: perry-ui-gtk4 image.rs now reaches resolve_asset_path at its new home crate::ffi::layout::resolve_asset_path (left private when #1246 split the file). Surfaced on the v0.5.1020 release-packages linux-aarch64-gnu build with error[E0425]: cannot find function resolve_asset_path in the crate root — that failure fail-fast-cancelled four other matrix builds and skipped every publish job (winget / homebrew / npm / apt / apt-repo).
  • binary-size baseline refresh: 566 patches of intentional product delta since the v0.5.455 (7fd1c8b3) baseline pushed perry +22.6% / libperry_runtime +34.0% / libperry_stdlib +6.5%. Same shape as the v0.5.455 refresh — the 15% per-release threshold is for incremental drift, not multi-release catch-up. New baseline captured from f7aaed1a Regression Check macos-14 run. Production binaries are stripped by the linker; the .a / .bin sizes the job measures are unstripped release-build artefacts used as a regression-trend signal, not a deployment-size measurement.

Closes the v0.5.1020 release-packages regression. See CHANGELOG.md.

v0.5.1021

22 May 02:11
f7aaed1

Choose a tag to compare

v0.5.1021 Pre-release
Pre-release

Hotfix on top of v0.5.1020: restore perry-ui-gtk4 image.rs resolve_asset_path access after #1246's file-split refactor moved the function into ffi::layout and left it private. The v0.5.1020 release-packages run (#26249481496) failed on linux-aarch64-gnu with E0425 and fail-fast cancelled the publish pipeline.

Two-line fix in #1298. Local cargo check + PR CI green. See CHANGELOG.md.

v0.5.1020

21 May 19:52
2cd706c

Choose a tag to compare

v0.5.1020 Pre-release
Pre-release

Pre-release tag of current main. Closes the 5 parity failures + memory-ceiling regression from v0.5.1019:

  • #1273 Buffer.from(str, encodingVar) HIR routing (#1282)
  • #1274 EventEmitter numeric/object payload args returned NaN — perry-ext-events still had the legacy (arg: f64) ABI from before PR #1186's NA_VARARGS switch (#1289)
  • #1275 TextEncoder mojibake (#1282)
  • #1276 console.table spurious Values column on array-of-arrays (#1282)
  • #1277 Closed as misdiagnosis (Perry's Instant::now() is correct; the apparent timer divergence is AOT-vs-interpreted speedup on a DCE-able loop)
  • #1278 console.trace stack-format kept as tracked categorical, skip-listed
  • memory test_memory_json_churn Ubuntu RSS budget widened to 290/315 MB to cover #1090 GC rework grace (#1286)

Plus #1088 host-embed staticlib linkdeps sidecar, #1122 iOS UIButton layer.backgroundColor, #1129/#1136 iOS heap-pointer guards, #1162 node:path.win32, #1193 cheerio chains, #1205/#1206/#1210/#1211 node:buffer parity, #1225 Buffer.from shared identity, #1280 App windowState, #1288 jsonwebtoken rust_crypto for ios setup, #1291 android setup keystore validation, plus granular tty + events parity suites.

See CHANGELOG.md for the full rollup.

v0.5.1019

21 May 15:40
d79c3ee

Choose a tag to compare

v0.5.1019 Pre-release
Pre-release

Pre-release tag of current main. Highlights since v0.5.1011: #1088 host-embed --output-type staticlib + Event Loop FFI, #1248/#1249 inspect.custom + nested multi-line break, #1236 aws-lc-sys 0.41 (Linux poly_Rq_mul fix), and the http options-object regression from #1123/#1124 should be addressed in this batch.

v0.5.1011

19 May 18:45
2f653a4

Choose a tag to compare

v0.5.1011 Pre-release
Pre-release

Pre-release tag of current main. Highlights since v0.5.1008: #1131/#1132 Socket.write(string) + arrow-param tag scope, #1123/#1124 net.createServer + http Buffer bodies end-to-end, #1106 GC telemetry + dirty-page remembered scanning.