github PerryTS/perry v0.5.1219

latest release: v0.5.1220
4 hours ago

394 commits since v0.5.1182.

Highlights

  • Native NestJS support — express adapter, DI container, decorators + reflect-metadata, rxjs interceptor interop, guards/pipes/filters (#5739, #5758#5760, #5721)
  • New current-thread async runtime — JS-loop-driven runtime with wait-driver and gated fast-native-drive; native I/O and JS interleave on one thread, Node's model, eliminating the cross-thread lost-wakeup family (#5831, supersedes #5779). A link-order bug that could strand the new runtime (test-only perry_ffi shims shadowing the real bridge) was found and fixed in the same release (#5892, #5911)
  • CPS async lowering for async class methods, capturing-closure functions, and nested async closures (#5854)
  • Representation-aware type lowering with a native-ABI material-evidence gate in CI (#5466)
  • Embed static assets into standalone executables (#5754) and eval-mode worker_threads Workers from inline source (#5799)
  • Promise spec-compliance batch — then/finally SpeciesConstructor + error propagation (#5767), user-defined own then honored (#5748), own-property dispatch fixes (#5865), reaction-slot clobber fix for the webpack/Turbopack shared-chunk-promise hang (#5867)

Node.js compatibility

  • fetch: AbortSignal cancel/timeout (#5690), byte-exact binary request/response bodies (#5661, #5778, #5660), Request-init header merge (#5704)
  • http: IncomingMessage.pipe() so node-fetch/gaxios bodies flow (#5787), streamed-body chunks carried as Bytes (#5419), requestTimeout validation (#5670)
  • process.stdin as a functional raw-mode Readable (#5733); gc() exposed on globalThis (#5712); old-gen arena included in process.memoryUsage() (#5713)
  • net/tls: TCP_NODELAY by default + socket.setNoDelay (#5658), zero-copy socket reads (#5623), SSO short-string value conversion (#5638)
  • zlib late-attaching stream consumers (#5809), truly-async live Readable consumption (#5810), node:vm runInContext against the context global (#5722)
  • fastify performance batch: O(1) static-route lookup, per-request context caching, SIMD WebSocket frame unmasking, SO_REUSEPORT for cluster workers (#5691#5699, #5644, #5646)

Language & conformance (test262)

  • Large conformance waves across Object, String, JSON, Function, Promise, Proxy, WeakMap/WeakSet, RegExp, Temporal, Intl, annexB, and eval/global-scope semantics (#5579#5592 clusters, #5824, #5842#5849, #5876#5883)
  • switch inside async/generator state machines no longer miscompiles (#5885)
  • Intl additions: Intl.DisplayNames (#5512), Intl.DurationFormat (#5405), NumberFormat.formatRange (#5771), Locale info methods (#5602), BigInt toLocaleString (#5879)
  • WeakMap/WeakSet are now actually weak (#5468); Symbol.hasInstance honored in instanceof (#5667); new.target in registered-class constructors (#2768/#5656)
  • Regex: Unicode 16 scripts, lone surrogates, quantified lookaround, Annex B.1.4 under /u, cached-pattern revalidation skips (#5781, #5629, #5749, #5808)

Performance

  • Typed-array element access fast path (~2× bcrypt) (#5525 cluster)
  • O(1) wide-object property insertion and lookup (#5528, #5738)
  • Oversized-module codegen: full-outlined dispatch towers and IC diamonds, -Os instead of -O0 for oversized IR units (#5674#5682)

Platforms, UI, packaging

  • Windows plugin support (#5409) + wgpu-on-win64 link/ABI fixes (#5814); arm64_32 watchOS startup crash fix (#5801); android-x86_64 target triple (#5743)
  • BloomView embedding with live-render plumbing on every backend (#5518, #5538); perry/ads end-to-end (#5578); window-less menu-bar app launch (#5813)
  • sharp: AVIF encode, EXIF auto-orient, extend/trim/composite, SIMD resize (#5448#5456)
  • Configurable compile cache dir, defaulting to node_modules/.cache/perry (#5416)
  • Dependencies: bson 3.1 (with the mongodb bson-3 feature migration, #5887), cairo-rs 0.22, sha3 0.12, sqlite stack on libsqlite3-sys 0.35 (#5802)

Stability

  • CI/test-infra hardening: production ext archives no longer carry test-only perry_ffi shims that could shadow the real async bridge at link time and strand the event loop (#5892, #5911)
  • Segfault/SIGBUS fixes: JSON.stringify on handle-band values (#5723), class extends <Proxy> (#5634), string-coercing a class method (#5633), new C(...spread) (#5710), dayjs timestamp computed-member get (#5465)
  • Object.setPrototypeOf cycle-detection walked past the chain end, making every set on a ≥2-deep prototype chain throw (#5866)
  • GC: dead old-gen block reclamation under pressure (#5734), full collection on explicit gc() (#5714)
  • Next.js/webpack bundle correctness cluster (#5437): capture snapshots for cross-module member-new, class/local shadowing, boxing analysis descending into labeled blocks (#5871), captured-undefined tag preservation (#5648)

Don't miss a new perry release

NewReleases is sending notifications on new releases.