# Changelog 1.12

## [1.12.2] (2024-05-31)

_Patch release with a bug fix necessary for support of latest libgc._

[1.12.2]: https://github.com/crystal-lang/crystal/releases/1.12.2

### Bugfixes

#### stdlib

- _(runtime)_ Don't allocate in `Fiber.unsafe_each` and `Thread.unsafe_each` ([#14635], thanks @ysbaddaden)

[#14635]: https://github.com/crystal-lang/crystal/pull/14635

### Infrastructure

- Changelog for 1.12.2 ([#14640], thanks @straight-shoota)

[#14640]: https://github.com/crystal-lang/crystal/pull/14640

## [1.12.1] (2024-04-11)

[1.12.1]: https://github.com/crystal-lang/crystal/releases/1.12.1

### Bugfixes

#### tools

- _(formatter)_ **[regression]** Fix formatter with whitespace before closing parenthesis ([#14471], thanks @straight-shoota)

[#14471]: https://github.com/crystal-lang/crystal/pull/14471

### Infrastructure

- Changelog for 1.12.1 ([#14472], thanks @straight-shoota)

[#14472]: https://github.com/crystal-lang/crystal/pull/14472

## [1.12.0] (2024-04-09)

[1.12.0]: https://github.com/crystal-lang/crystal/releases/1.12.0

### Features

#### lang

- Allow multiple parameters and blocks for operators ending in `=` ([#14159], thanks @HertzDevil)

[#14159]: https://github.com/crystal-lang/crystal/pull/14159

#### 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)

[#14220]: https://github.com/crystal-lang/crystal/pull/14220
[#14255]: https://github.com/crystal-lang/crystal/pull/14255
[#14293]: https://github.com/crystal-lang/crystal/pull/14293
[#14390]: https://github.com/crystal-lang/crystal/pull/14390
[#14218]: https://github.com/crystal-lang/crystal/pull/14218
[#14263]: https://github.com/crystal-lang/crystal/pull/14263
[#14262]: https://github.com/crystal-lang/crystal/pull/14262
[#14261]: https://github.com/crystal-lang/crystal/pull/14261
[#14268]: https://github.com/crystal-lang/crystal/pull/14268
[#14282]: https://github.com/crystal-lang/crystal/pull/14282
[#14306]: https://github.com/crystal-lang/crystal/pull/14306
[#14270]: https://github.com/crystal-lang/crystal/pull/14270
[#14313]: https://github.com/crystal-lang/crystal/pull/14313
[#14126]: https://github.com/crystal-lang/crystal/pull/14126
[#14257]: https://github.com/crystal-lang/crystal/pull/14257
[#13694]: https://github.com/crystal-lang/crystal/pull/13694
[#14185]: https://github.com/crystal-lang/crystal/pull/14185

#### 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)

[#14318]: https://github.com/crystal-lang/crystal/pull/14318
[#14260]: https://github.com/crystal-lang/crystal/pull/14260
[#14292]: https://github.com/crystal-lang/crystal/pull/14292
[#14341]: https://github.com/crystal-lang/crystal/pull/14341
[#13860]: https://github.com/crystal-lang/crystal/pull/13860
[#14343]: https://github.com/crystal-lang/crystal/pull/14343
[#14146]: https://github.com/crystal-lang/crystal/pull/14146
[#14391]: https://github.com/crystal-lang/crystal/pull/14391
[#14161]: https://github.com/crystal-lang/crystal/pull/14161
[#14203]: https://github.com/crystal-lang/crystal/pull/14203

#### tools

- Add `crystal tool flags` ([#14234], thanks @straight-shoota)
- _(formatter)_ Add more whitespace around `ProcLiteral`s ([#14209], thanks @HertzDevil)

[#14234]: https://github.com/crystal-lang/crystal/pull/14234
[#14209]: https://github.com/crystal-lang/crystal/pull/14209

### 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)

[#14212]: https://github.com/crystal-lang/crystal/pull/14212
[#14215]: https://github.com/crystal-lang/crystal/pull/14215

#### 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)

[#14417]: https://github.com/crystal-lang/crystal/pull/14417
[#14427]: https://github.com/crystal-lang/crystal/pull/14427
[#14187]: https://github.com/crystal-lang/crystal/pull/14187
[#14272]: https://github.com/crystal-lang/crystal/pull/14272
[#14339]: https://github.com/crystal-lang/crystal/pull/14339
[#14320]: https://github.com/crystal-lang/crystal/pull/14320
[#14265]: https://github.com/crystal-lang/crystal/pull/14265
[#14324]: https://github.com/crystal-lang/crystal/pull/14324
[#14219]: https://github.com/crystal-lang/crystal/pull/14219
[#14309]: https://github.com/crystal-lang/crystal/pull/14309
[#14308]: https://github.com/crystal-lang/crystal/pull/14308
[#14327]: https://github.com/crystal-lang/crystal/pull/14327
[#14335]: https://github.com/crystal-lang/crystal/pull/14335
[#14345]: https://github.com/crystal-lang/crystal/pull/14345
[#14394]: https://github.com/crystal-lang/crystal/pull/14394
[#14193]: https://github.com/crystal-lang/crystal/pull/14193
[#14191]: https://github.com/crystal-lang/crystal/pull/14191
[#14330]: https://github.com/crystal-lang/crystal/pull/14330
[#14351]: https://github.com/crystal-lang/crystal/pull/14351
[#14430]: https://github.com/crystal-lang/crystal/pull/14430

#### 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)

[#14239]: https://github.com/crystal-lang/crystal/pull/14239
[#14264]: https://github.com/crystal-lang/crystal/pull/14264
[#14279]: https://github.com/crystal-lang/crystal/pull/14279
[#14289]: https://github.com/crystal-lang/crystal/pull/14289
[#14315]: https://github.com/crystal-lang/crystal/pull/14315
[#14323]: https://github.com/crystal-lang/crystal/pull/14323
[#14337]: https://github.com/crystal-lang/crystal/pull/14337
[#14445]: https://github.com/crystal-lang/crystal/pull/14445
[#14252]: https://github.com/crystal-lang/crystal/pull/14252
[#14381]: https://github.com/crystal-lang/crystal/pull/14381
[#14441]: https://github.com/crystal-lang/crystal/pull/14441
[#14436]: https://github.com/crystal-lang/crystal/pull/14436
[#14437]: https://github.com/crystal-lang/crystal/pull/14437
[#14267]: https://github.com/crystal-lang/crystal/pull/14267
[#14271]: https://github.com/crystal-lang/crystal/pull/14271

#### 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)

[#14278]: https://github.com/crystal-lang/crystal/pull/14278
[#14346]: https://github.com/crystal-lang/crystal/pull/14346
[#14354]: https://github.com/crystal-lang/crystal/pull/14354
[#14439]: https://github.com/crystal-lang/crystal/pull/14439

### Chores

#### stdlib

- _(concurrency)_ **[deprecation]** Drop flag `openbsd6.2` ([#14233], thanks @straight-shoota)
- _(files)_ **[deprecation]** Deprecate timeout setters with `Number` arguments ([#14372], thanks @straight-shoota)

[#14233]: https://github.com/crystal-lang/crystal/pull/14233
[#14372]: https://github.com/crystal-lang/crystal/pull/14372

#### compiler

- _(codegen)_ Drop pinning Dwarf version 2 for android ([#14243], thanks @straight-shoota)

[#14243]: https://github.com/crystal-lang/crystal/pull/14243

### 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)

[#14235]: https://github.com/crystal-lang/crystal/pull/14235
[#14100]: https://github.com/crystal-lang/crystal/pull/14100

#### compiler

- _(codegen)_ on demand distribution to forked processes ([#14273], thanks @ysbaddaden)
- _(interpreter)_ Use `Fiber::StackPool` in the interpreter ([#14395], thanks @HertzDevil)

[#14273]: https://github.com/crystal-lang/crystal/pull/14273
[#14395]: https://github.com/crystal-lang/crystal/pull/14395

### 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)

[#14316]: https://github.com/crystal-lang/crystal/pull/14316
[#14367]: https://github.com/crystal-lang/crystal/pull/14367
[#14382]: https://github.com/crystal-lang/crystal/pull/14382
[#14371]: https://github.com/crystal-lang/crystal/pull/14371
[#14384]: https://github.com/crystal-lang/crystal/pull/14384
[#14383]: https://github.com/crystal-lang/crystal/pull/14383
[#14304]: https://github.com/crystal-lang/crystal/pull/14304
[#14380]: https://github.com/crystal-lang/crystal/pull/14380
[#14170]: https://github.com/crystal-lang/crystal/pull/14170
[#14397]: https://github.com/crystal-lang/crystal/pull/14397

#### compiler

- Ensure `Crystal::Visitor#visit` returns `Bool` ([#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)

[#14266]: https://github.com/crystal-lang/crystal/pull/14266
[#14342]: https://github.com/crystal-lang/crystal/pull/14342
[#14352]: https://github.com/crystal-lang/crystal/pull/14352

### 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)

[#14296]: https://github.com/crystal-lang/crystal/pull/14296
[#14429]: https://github.com/crystal-lang/crystal/pull/14429
[#14410]: https://github.com/crystal-lang/crystal/pull/14410
[#14176]: https://github.com/crystal-lang/crystal/pull/14176
[#14276]: https://github.com/crystal-lang/crystal/pull/14276
[#14428]: https://github.com/crystal-lang/crystal/pull/14428
[#14426]: https://github.com/crystal-lang/crystal/pull/14426
[#14400]: https://github.com/crystal-lang/crystal/pull/14400
[#14258]: https://github.com/crystal-lang/crystal/pull/14258

### 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)

[#14302]: https://github.com/crystal-lang/crystal/pull/14302
[#14378]: https://github.com/crystal-lang/crystal/pull/14378
[#14431]: https://github.com/crystal-lang/crystal/pull/14431
[#14211]: https://github.com/crystal-lang/crystal/pull/14211
[#14297]: https://github.com/crystal-lang/crystal/pull/14297
[#14433]: https://github.com/crystal-lang/crystal/pull/14433
[#14385]: https://github.com/crystal-lang/crystal/pull/14385

#### 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)

[#14336]: https://github.com/crystal-lang/crystal/pull/14336
[#14287]: https://github.com/crystal-lang/crystal/pull/14287
[#14386]: https://github.com/crystal-lang/crystal/pull/14386
[#14399]: https://github.com/crystal-lang/crystal/pull/14399
[#14338]: https://github.com/crystal-lang/crystal/pull/14338

### 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)

[#14232]: https://github.com/crystal-lang/crystal/pull/14232
[#14229]: https://github.com/crystal-lang/crystal/pull/14229
[#14291]: https://github.com/crystal-lang/crystal/pull/14291
[#14290]: https://github.com/crystal-lang/crystal/pull/14290
[#14230]: https://github.com/crystal-lang/crystal/pull/14230
[#14365]: https://github.com/crystal-lang/crystal/pull/14365
[#14373]: https://github.com/crystal-lang/crystal/pull/14373
[#14404]: https://github.com/crystal-lang/crystal/pull/14404
[#14407]: https://github.com/crystal-lang/crystal/pull/14407
[#14406]: https://github.com/crystal-lang/crystal/pull/14406
[#14412]: https://github.com/crystal-lang/crystal/pull/14412
[#14231]: https://github.com/crystal-lang/crystal/pull/14231
[#14457]: https://github.com/crystal-lang/crystal/pull/14457
[#14299]: https://github.com/crystal-lang/crystal/pull/14299
[#14329]: https://github.com/crystal-lang/crystal/pull/14329
[#14328]: https://github.com/crystal-lang/crystal/pull/14328
[#14357]: https://github.com/crystal-lang/crystal/pull/14357
[#14189]: https://github.com/crystal-lang/crystal/pull/14189
[#14224]: https://github.com/crystal-lang/crystal/pull/14224
[#14251]: https://github.com/crystal-lang/crystal/pull/14251
[#14246]: https://github.com/crystal-lang/crystal/pull/14246
[#14274]: https://github.com/crystal-lang/crystal/pull/14274
[#14275]: https://github.com/crystal-lang/crystal/pull/14275
[#14355]: https://github.com/crystal-lang/crystal/pull/14355
[#14375]: https://github.com/crystal-lang/crystal/pull/14375
[#14411]: https://github.com/crystal-lang/crystal/pull/14411
[#14277]: https://github.com/crystal-lang/crystal/pull/14277
[#14414]: https://github.com/crystal-lang/crystal/pull/14414
