1.12.0
·
1340 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
AsmandAsmOperand(#14268, thanks @HertzDevil) - (macros) Relax
delegate's setter detection (#14282, thanks @HertzDevil) - (numeric) Add
BigRational#%,#tdiv,#remainder(#14306, thanks @HertzDevil) - (runtime) [experimental] Add
ReferenceStoragefor 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/UTCtime zone identifier without tzdb (#14185, thanks @femto)
compiler
- Add
CRYSTAL_CONFIG_CCcompiler config (#14318, thanks @straight-shoota) - (cli) Respect
NO_COLORin the compiler (#14260, thanks @HertzDevil) - (cli) Respect
--staticon Windows (#14292, thanks @HertzDevil) - (cli) Allow
--single-moduleand--threadsforevalandspec(#14341, thanks @HertzDevil) - (codegen) Add
--frame-pointersto 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
ProcLiterals (#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#updatewhen default block also adds given key (#14417, thanks @HertzDevil) - (collection) Fix
Hash#put_if_absentputting 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#unlockon aarch64 (#14272, thanks @jgaskins) - (concurrency) init schedulers before we spawn fibers (#14339, thanks @ysbaddaden)
- (files) Make
FileUtils.mvwork 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
Complexand other numbers exact (#14309, thanks @HertzDevil) - (numeric) Fix
#hashfor 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::RWLockshould 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.xmlInitParserwhen requiring XML libraries (#14191, thanks @HertzDevil) - (system) Fix macro
Crystal::LIBRARY_PATH.splitwhen cross-compiling (#14330, thanks @HertzDevil) - (system) Add
SA_RESTARTflag to sigaction syscall (#14351, thanks @ysbaddaden) - (text) Add
Nilreturn type restriction toString::Formatter#consume_substitution(#14430, thanks @straight-shoota)
compiler
- (cli)
build --no-codegenoutput 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#callthat takes and returns large extern structs by value (#14323, thanks @HertzDevil) - (codegen) Never discard ivar initializer inside
.allocateand.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_u8for overflow in the interpreter (#14436, thanks @HertzDevil) - (interpreter) Fix interpreter internal overflow for
UInt128#to_f32and#to_f32!(#14437, thanks @HertzDevil) - (parser) Fix name locations of
FunDefandExternalnodes (#14267, thanks @HertzDevil) - (parser) Fix end locations of
Aliasnodes (#14271, thanks @HertzDevil)
tools
- (formatter) Fix format for
asmwith 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
Numberarguments (#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::StackPoolin 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
SocketandIO::FileDescriptor(#14367, thanks @straight-shoota) - (files) Add type restrictions to
#unbuffered_*implementations (#14382, thanks @straight-shoota) - (networking) Refactor
HTTP::Clienttimeout ivars toTime::Span(#14371, thanks @straight-shoota) - (networking) Refactor
Socket#system_receiveto returnAddress(#14384, thanks @straight-shoota) - (networking) Refactor
#system_connectwithout yield (#14383, thanks @straight-shoota) - (numeric) Add
Crystal::Hasher.reduce_numand#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#visitreturnsBool(#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_exithandler 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
SpecChannelStatusto be explicit (#14378, thanks @straight-shoota) - (files) Move some
IO::FileDescriptorspecs 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
SeTimeZonePrivilegeproperly (#14297, thanks @HertzDevil) - (text) Add single source of UTF-8 test sequences for specs (#14433, thanks @HertzDevil)
- (time) Fix requires for
time/time_spec.crandtime/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
MilestoneJSON bindings ingithub-changeloghelper (#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-changeloghelper (#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.ccon 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_classfortest_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.winfor Shards on Windows CI (#14414, thanks @HertzDevil)