1.12.0
straight-shoota
released this
09 Apr 13:12
·
505 commits
to master
since this release
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
andAsmOperand
(#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
foreval
andspec
(#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
- Add
crystal tool flags
(#14234, thanks @straight-shoota) - (formatter) Add more whitespace around
ProcLiteral
s (#14209, thanks @HertzDevil)
Bugfixes
lang
- (macros) Remove extra newline in top-level
FunDef
's string representation (#14212, thanks @HertzDevil) - (macros) Remove
T*
andT[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 theBig*
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 toString::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
andExternal
nodes (#14267, thanks @HertzDevil) - (parser) Fix end locations of
Alias
nodes (#14271, thanks @HertzDevil)
tools
- (formatter) Fix format for
asm
with comments (#14278, thanks @straight-shoota) - (formatter) Fix formatter for white space in
a.[b]
syntax (#14346, thanks @straight-shoota) - (formatter) Fix formatter on call without parentheses followed by doc comment (#14354, thanks @straight-shoota)
- (formatter) Do not remove the whitespace in
foo ()
when formatting (#14439, thanks @HertzDevil)
Chores
stdlib
- (concurrency) [deprecation] Drop flag
openbsd6.2
(#14233, thanks @straight-shoota) - (files) [deprecation] Deprecate timeout setters with
Number
arguments (#14372, thanks @straight-shoota)
compiler
- (codegen) Drop pinning Dwarf version 2 for android (#14243, thanks @straight-shoota)
Performance
stdlib
- (collection) Optimize hash lookup in
Enumerable#group_by
(#14235, thanks @straight-shoota) - (concurrency) Use per-scheduler stack pools (let's recycle) (#14100, thanks @ysbaddaden)
compiler
- (codegen) on demand distribution to forked processes (#14273, thanks @ysbaddaden)
- (interpreter) Use
Fiber::StackPool
in the interpreter (#14395, thanks @HertzDevil)
Refactor
stdlib
- (files) Replace some Microsoft C runtime funs with Win32 equivalents (#14316, thanks @HertzDevil)
- (files) Move timeout properties to
Socket
andIO::FileDescriptor
(#14367, thanks @straight-shoota) - (files) Add type restrictions to
#unbuffered_*
implementations (#14382, thanks @straight-shoota) - (networking) Refactor
HTTP::Client
timeout ivars toTime::Span
(#14371, thanks @straight-shoota) - (networking) Refactor
Socket#system_receive
to returnAddress
(#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
- Ensure
Crystal::Visitor#visit
returnsBool
(#14266, thanks @HertzDevil) - (parser) Add
Token::Kind#unary_operator?
(#14342, thanks @straight-shoota) - (parser) Add
Lexer#wants_def_or_macro_name
(#14352, thanks @straight-shoota)
Documentation
stdlib
- (collection) Fix docs
:inherit:
pragma forIndexable#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
andtime/format_spec.cr
(#14385, thanks @HertzDevil)
compiler
- Remove the prelude from some compiler specs (#14336, thanks @HertzDevil)
- (interpreter) Fix: don't run thread specs with the interpreter (#14287, thanks @ysbaddaden)
- (interpreter) Add
pending_interpreted
(#14386, thanks @HertzDevil) - (interpreter) Remove
spec/interpreter_std_spec.cr
(#14399, thanks @HertzDevil) - (semantic) Enable
@[Primitive(:va_arg)]
semantic spec on Windows (#14338, thanks @HertzDevil)
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 ingithub-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
fortest_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)