Release: v0.17.0
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?
andstr\repeat
functions - New conversion functions:
phel->php
andphp->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.