Releases
1.12.0
1.12.0 (2024-04-09)
Features
lang
Allow multiple parameters and blocks for operators ending in =
(#14159 , thanks @HertzDevil )
stdlib
(concurrency) MT: reduce interleaved backtraces in spawn unhandled exceptions (#14220 , thanks @ysbaddaden )
(concurrency) Fix: opening/reading from fifo/chardev files are blocking the thread (#14255 , thanks @ysbaddaden )
(concurrency) Fix: Atomics and Locks (ARM, AArch64, X86) (#14293 , thanks @ysbaddaden )
(files) Add IO::FileDescriptor::Handle
(#14390 , thanks @straight-shoota )
(macros) Add macro methods for lib-related nodes (#14218 , thanks @HertzDevil )
(macros) Add macro methods for Primitive
(#14263 , thanks @HertzDevil )
(macros) Add macro methods for TypeOf
(#14262 , thanks @HertzDevil )
(macros) Add macro methods for Alias
(#14261 , thanks @HertzDevil )
(macros) Add macro methods for Asm
and AsmOperand
(#14268 , thanks @HertzDevil )
(macros) Relax delegate
's setter detection (#14282 , thanks @HertzDevil )
(numeric) Add BigRational#%
, #tdiv
, #remainder
(#14306 , thanks @HertzDevil )
(runtime) [experimental] Add ReferenceStorage
for manual allocation of references (#14270 , thanks @HertzDevil )
(runtime) Add MSVC invalid parameter handler (#14313 , thanks @HertzDevil )
(system) Add Signal#trap_handler?
(#14126 , thanks @stakach )
(system) Thread: set name (#14257 , thanks @ysbaddaden )
(system) Add Process.on_terminate
(#13694 , thanks @stakach )
(time) Add support for Etc/UTC
time zone identifier without tzdb (#14185 , thanks @femto )
compiler
Add CRYSTAL_CONFIG_CC
compiler config (#14318 , thanks @straight-shoota )
(cli) Respect NO_COLOR
in the compiler (#14260 , thanks @HertzDevil )
(cli) Respect --static
on Windows (#14292 , thanks @HertzDevil )
(cli) Allow --single-module
and --threads
for eval
and spec
(#14341 , thanks @HertzDevil )
(codegen) Add --frame-pointers
to control preservation of frame pointers (#13860 , thanks @refi64 )
(codegen) x86-64 Solaris / illumos support (#14343 , thanks @HertzDevil )
(interpreter) Support @[Link]
's DLL search order in the interpreter on Windows (#14146 , thanks @HertzDevil )
(interpreter) Automatically detect MSVC tools on Windows interpreter (#14391 , thanks @HertzDevil )
(parser) Allow calling #[]=
with a block using method syntax (#14161 , thanks @HertzDevil )
(semantic) Change short_reference for top-level macros to ::foo
(#14203 , thanks @femto )
tools
Bugfixes
lang
(macros) Remove extra newline in top-level FunDef
's string representation (#14212 , thanks @HertzDevil )
(macros) Remove T*
and T[N]
macro interpolation behavior inside libs (#14215 , thanks @HertzDevil )
stdlib
(collection) Fix Hash#update
when default block also adds given key (#14417 , thanks @HertzDevil )
(collection) Fix Hash#put_if_absent
putting duplicate keys (#14427 , thanks @HertzDevil )
(concurrency) Reserve stack space on non-main threads for crash recovery on Windows (#14187 , thanks @HertzDevil )
(concurrency) Add memory barrier to Mutex#unlock
on aarch64 (#14272 , thanks @jgaskins )
(concurrency) init schedulers before we spawn fibers (#14339 , thanks @ysbaddaden )
(files) Make FileUtils.mv
work across filesystems on Windows (#14320 , thanks @HertzDevil )
(llvm) Use correct string size for LLVM::Type#inline_asm
(#14265 , thanks @HertzDevil )
(llvm) Fix System V ABI for packed structs with misaligned fields (#14324 , thanks @HertzDevil )
(networking) OpenSSL 3.x reports unexpected EOF as SSL error (#14219 , thanks @ysbaddaden )
(numeric) Make equality between Complex
and other numbers exact (#14309 , thanks @HertzDevil )
(numeric) Fix #hash
for the Big*
number types (#14308 , thanks @HertzDevil )
(runtime) Do not allocate memory in the segmentation fault signal handler (#14327 , thanks @HertzDevil )
(runtime) Fix crash stack trace decoding on macOS (#14335 , thanks @HertzDevil )
(runtime) Crystal::RWLock
should be a struct (#14345 , thanks @ysbaddaden )
(runtime) Fix min_by?
in IOCP event loop #run_once
(#14394 , thanks @straight-shoota )
(serialization) XML::Reader
: Disallow attributes containing null bytes (#14193 , thanks @HertzDevil )
(serialization) Always call LibXML.xmlInitParser
when requiring XML libraries (#14191 , thanks @HertzDevil )
(system) Fix macro Crystal::LIBRARY_PATH.split
when cross-compiling (#14330 , thanks @HertzDevil )
(system) Add SA_RESTART
flag to sigaction syscall (#14351 , thanks @ysbaddaden )
(text) Add Nil
return type restriction to String::Formatter#consume_substitution
(#14430 , thanks @straight-shoota )
compiler
(cli) build --no-codegen
output file name error (#14239 , thanks @apainintheneck )
(codegen) Do not handle inline assembly with "intel"
flag as AT&T syntax (#14264 , thanks @HertzDevil )
(codegen) [breaking] Respect alignments above alignof(Void*)
inside union values (#14279 , thanks @HertzDevil )
(codegen) Fix stack corruption in union-to-union casts (#14289 , thanks @HertzDevil )
(codegen) Don't copy DLL to output directory if file already exists (#14315 , thanks @HertzDevil )
(codegen) Fix Proc#call
that takes and returns large extern structs by value (#14323 , thanks @HertzDevil )
(codegen) Never discard ivar initializer inside .allocate
and .pre_initialize
(#14337 , thanks @HertzDevil )
(codegen) Use separate names for constant and class variable internals (#14445 , thanks @HertzDevil )
(interpreter) fix fiber's resumable property (#14252 , thanks @ysbaddaden )
(interpreter) Ensure all constants only have one initializer in the interpreter (#14381 , thanks @HertzDevil )
(interpreter) Handle NaN comparisons in the interpreter (#14441 , thanks @HertzDevil )
(interpreter) Check UInt16#to_u8
for overflow in the interpreter (#14436 , thanks @HertzDevil )
(interpreter) Fix interpreter internal overflow for UInt128#to_f32
and #to_f32!
(#14437 , thanks @HertzDevil )
(parser) Fix name locations of FunDef
and External
nodes (#14267 , thanks @HertzDevil )
(parser) Fix end locations of Alias
nodes (#14271 , thanks @HertzDevil )
tools
Chores
stdlib
compiler
Performance
stdlib
compiler
Refactor
stdlib
(files) Replace some Microsoft C runtime funs with Win32 equivalents (#14316 , thanks @HertzDevil )
(files) Move timeout properties to Socket
and IO::FileDescriptor
(#14367 , thanks @straight-shoota )
(files) Add type restrictions to #unbuffered_*
implementations (#14382 , thanks @straight-shoota )
(networking) Refactor HTTP::Client
timeout ivars to Time::Span
(#14371 , thanks @straight-shoota )
(networking) Refactor Socket#system_receive
to return Address
(#14384 , thanks @straight-shoota )
(networking) Refactor #system_connect
without yield (#14383 , thanks @straight-shoota )
(numeric) Add Crystal::Hasher.reduce_num
and #number
(#14304 , thanks @HertzDevil )
(runtime) Refactor and add comments to IOCP #run_once
(#14380 , thanks @straight-shoota )
(specs) [deprecation] Move most of spec runner's state into Spec::CLI
(#14170 , thanks @HertzDevil )
(specs) Add Spec::Formatter#should_print_summary?
(#14397 , thanks @HertzDevil )
compiler
Documentation
stdlib
(collection) Fix docs :inherit:
pragma for Indexable#first
(#14296 , thanks @lachlan )
(collection) Fix Hash.new(initial_capacity, &block)
doc to use relevant example (#14429 , thanks @lachlan )
(crypto) Improve OpenSSL module documentation (#14410 , thanks @summer-alice )
(numeric) Enhance docs for Int#downto
(#14176 , thanks @jkthorne )
(runtime) Document builtin constants (#14276 , thanks @straight-shoota )
(runtime) Fix Pointer#+(offset: Int64)
doc parameter name typo (#14428 , thanks @lachlan )
(runtime) Improve documentation for at_exit
handler conditions (#14426 , thanks @straight-shoota )
(system) Fix typo in Signal docs (#14400 , thanks @joshrickard )
(text) Fix Colorize.enabled?
's documentation (#14258 , thanks @HertzDevil )
Specs
stdlib
Fix spelling in spec/std/uri/params_spec.cr
(#14302 , thanks @jbampton )
(files) Refactor expectations with SpecChannelStatus
to be explicit (#14378 , thanks @straight-shoota )
(files) Move some IO::FileDescriptor
specs to the correct file (#14431 , thanks @HertzDevil )
(system) Always preserve the environment for specs that modify ENV
(#14211 , thanks @HertzDevil )
(system) Ensure Windows time zone specs request SeTimeZonePrivilege
properly (#14297 , thanks @HertzDevil )
(text) Add single source of UTF-8 test sequences for specs (#14433 , thanks @HertzDevil )
(time) Fix requires for time/time_spec.cr
and time/format_spec.cr
(#14385 , thanks @HertzDevil )
compiler
Infrastructure
Changelog for 1.12.0 (#14232 , thanks @straight-shoota )
Remove filtering of already mentioned PRs (#14229 , thanks @straight-shoota )
Mention RFC process in contribution instructions (#14291 , thanks @straight-shoota )
Drop Nikola sponsor mention from Readme (#14290 , thanks @straight-shoota )
Enhance changelog script to pull milestone info from GitHub (#14230 , thanks @straight-shoota )
Add shard.yml
(#14365 , thanks @straight-shoota )
Update vendored dependencies (#14373 , thanks @straight-shoota )
Fix Milestone
JSON bindings in github-changelog
helper (#14404 , thanks @straight-shoota )
Make repository configurable for reusable github-changelog
(#14407 , thanks @straight-shoota )
Use link refs for PR links in changelog (#14406 , thanks @straight-shoota )
Implement pagination for GitHub API in github-changelog
helper (#14412 , thanks @straight-shoota )
Add scripts/update-changelog.sh
(#14231 , thanks @straight-shoota )
Update distribution-scripts (#14457 , thanks @straight-shoota )
Change some line endings from CRLF to LF (#14299 , thanks @HertzDevil )
Update copyright year in NOTICE.md (#14329 , thanks @HertzDevil )
Install system dependencies in the Windows GUI installer (#14328 , thanks @HertzDevil )
Skip building llvm_ext.cc
on LLVM 18 or above (#14357 , thanks @HertzDevil )
(ci) Update previous Crystal release 1.11.0 (#14189 , thanks @straight-shoota )
(ci) Update previous Crystal release 1.11.1 (#14224 , thanks @straight-shoota )
(ci) Update previous Crystal release - 1.11.2 (#14251 , thanks @straight-shoota )
(ci) Update GH Actions (#14246 , thanks @renovate )
(ci) Upgrade resource_class
for test_preview_mt
(#14274 , thanks @straight-shoota )
(ci) Upgrade from old machine images approaching EOL (#14275 , thanks @straight-shoota )
(ci) Update Windows library versions (#14355 , thanks @HertzDevil )
(ci) Update cachix/install-nix-action action to v26 (#14375 , thanks @renovate )
(ci) Update shards 0.18.0 (#14411 , thanks @straight-shoota )
(ci) Support LLVM 18.1 (#14277 , thanks @HertzDevil )
(ci) Use Makefile.win
for Shards on Windows CI (#14414 , thanks @HertzDevil )
You canβt perform that action at this time.