Release: v0.17.0

Published

Macroverse

โœจ TL;DR

This release supercharges the REPL with completions and precise error traces, introduces powerful new macros (doto, time, if-let, when-let), adds macroexpand support, enables native yield, improves string handling, and delivers broad performance gains and critical bug fixes.

Highlights

๐Ÿง  Language Features

  • New macros: doto, time, if-let, when-let
  • defexception special form for custom exception types
  • Native yield support
  • Strings in output are now wrapped in quotes
  • Added str\contains? and str\repeat functions
  • New conversion functions: phel->php and php->phel

๐Ÿ›  Macro & Meta Programming

  • macroexpand functions for inspecting macros
  • Deprecated metadata is now visible in doc output
  • Macros now resolve correctly in namespaces with hyphens
  • Namespace encoding improved (hyphens converted to underscores)

๐Ÿ’ป REPL Improvements

  • REPL completion (auto-suggest)
  • REPL exceptions now show filename:line for better traceability
  • Namespace evaluation and re-definition fixes
  • Proper handling of global variables and re-definable bindings

Bug Fixes

๐Ÿงฉ Core Language Fixes

  • Fixed php/echo not working
  • Fixed malfunctioning hash-map
  • Corrected behavior of multibyte string case functions
  • Resolved analyzer null checks and symbol resolution issues
  • Fixed private symbol resolution

๐Ÿงท REPL Stability

  • Fixed global var handling
  • Allowed re-definitions in REPL
  • Fixed issues with html macro when used with when
  • Corrected bracket handling in multiline REPL strings
  • Fixed evaluation bugs in REPL namespaces
  • Fixed the inability to reload the user namespace

๐Ÿ” Security

  • Patched header injection vulnerability

Performance & Internals

  • Optimized vector iteration and overall performance
  • Fixed test placeholders not being replaced in multiline strings
  • Clarified behavior of all? returning true for empty collections
  • Documented internals of the compiler
  • Fixed workflow cache usage in CI
  • Upgraded static analysis to PHPStan level 2

Full list

For a full list of changes, have a look at the release notes.