# Changelog 1.16

## [1.16.3] (2025-05-12)

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

### Bugfixes

#### stdlib

- _(runtime)_ Fix `Crystal::EventLoop::LibEvent` and `FiberExecutionContext`  integration ([#15759], backported from [#15743], thanks @ysbaddaden)

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

#### compiler

- _(codegen)_ Add fallback if `__crystal_raise_cast_failed` is missing ([#15769], backported from [#15762], thanks @HertzDevil)
- _(semantic)_ **[regression]** Remove type binding on `T` for `Pointer(T)#value=` ([#15757], backported from [#15751], thanks @HertzDevil)

[#15769]: https://github.com/crystal-lang/crystal/pull/15769
[#15762]: https://github.com/crystal-lang/crystal/pull/15762
[#15757]: https://github.com/crystal-lang/crystal/pull/15757
[#15751]: https://github.com/crystal-lang/crystal/pull/15751

### Infrastructure

- Changelog for 1.16.3 ([#15758], thanks @straight-shoota)

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

## [1.16.2] (2025-04-29)

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

### Bugfixes

#### stdlib

- _(numeric)_ Fix show `unit_separator` in `#humanize_bytes` with empty prefix ([#15717], backported from [#15683], thanks @straight-shoota)
- _(runtime)_ `CRYSTAL_LOAD_DEBUG_INFO=1` fails with `-Dexecution_context` ([#15715], backported from [#15704], thanks @ysbaddaden)
- _(runtime)_ Fix `-Dtracing` raises math overflows on fiber sleep ([#15725], backported from [#15722], thanks @ysbaddaden)
- _(runtime)_ Fix `Fiber::ExecutionContext::Isolated#wait` must suspend fiber ([#15723], backported from [#15720], thanks @ysbaddaden)
- _(runtime)_ Fix run win32 console reader in bare thread ([#15726], backported from [#15724], thanks @ysbaddaden)

[#15717]: https://github.com/crystal-lang/crystal/pull/15717
[#15683]: https://github.com/crystal-lang/crystal/pull/15683
[#15715]: https://github.com/crystal-lang/crystal/pull/15715
[#15704]: https://github.com/crystal-lang/crystal/pull/15704
[#15725]: https://github.com/crystal-lang/crystal/pull/15725
[#15722]: https://github.com/crystal-lang/crystal/pull/15722
[#15723]: https://github.com/crystal-lang/crystal/pull/15723
[#15720]: https://github.com/crystal-lang/crystal/pull/15720
[#15726]: https://github.com/crystal-lang/crystal/pull/15726
[#15724]: https://github.com/crystal-lang/crystal/pull/15724

#### compiler

- _(semantic)_ Do not add `ReferenceStorage` to `Value`'s subclasses twice ([#15718], backported from [#15706], thanks @HertzDevil)

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

### Refactor

#### compiler

- _(codegen)_ Add `__crystal_raise_cast_failed` for non-interpreted code ([#15712], backported from [#15708], thanks @HertzDevil)

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

### Infrastructure

- Changelog for 1.16.2 ([#15716], thanks @straight-shoota)
- _(ci)_ Fix package shards on MinGW ([#15719], thanks @straight-shoota)
- _(ci)_ Only set up Cygwin on Windows CI if truly required ([#15713], backported from [#15661], thanks @HertzDevil)

[#15716]: https://github.com/crystal-lang/crystal/pull/15716
[#15719]: https://github.com/crystal-lang/crystal/pull/15719
[#15713]: https://github.com/crystal-lang/crystal/pull/15713
[#15661]: https://github.com/crystal-lang/crystal/pull/15661

## [1.16.1] (2025-04-16)

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

### Bugfixes

#### stdlib

- _(runtime)_ Correctly transfer FD ownership in polling event loop ([#15650], thanks @ysbaddaden)
- _(runtime)_ Fix error message when `PollDescriptor` can't transfer fd ([#15663], thanks @ysbaddaden)
- _(runtime)_ Fix `libgc` pkg-config name for version discovery ([#15636], thanks @straight-shoota)
- _(serialization)_ **[regression]** Fix link `bcrypt` with `libxml2` on Windows ([#15651], thanks @straight-shoota)

[#15650]: https://github.com/crystal-lang/crystal/pull/15650
[#15663]: https://github.com/crystal-lang/crystal/pull/15663
[#15636]: https://github.com/crystal-lang/crystal/pull/15636
[#15651]: https://github.com/crystal-lang/crystal/pull/15651

#### compiler

- _(cli)_ **[regression]** Fix `crystal eval` read from stdin ([#15655], thanks @straight-shoota)

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

### Documentation

#### stdlib

- _(runtime)_ Enable docs for `ExecutionContext` ([#15644], thanks @straight-shoota)
- _(runtime)_ Fix mark method overrides on `ExecutionContext` as `:nodoc:` ([#15659], thanks @ysbaddaden)
- _(runtime)_ Update docs for `Fiber::ExecutionContext.default_workers_count` ([#15664], thanks @ysbaddaden)
- _(runtime)_ Enhance documentation for `ExecutionContext` ([#15665], thanks @straight-shoota)

[#15644]: https://github.com/crystal-lang/crystal/pull/15644
[#15659]: https://github.com/crystal-lang/crystal/pull/15659
[#15664]: https://github.com/crystal-lang/crystal/pull/15664
[#15665]: https://github.com/crystal-lang/crystal/pull/15665

### Infrastructure

- Changelog for 1.16.1 ([#15666], thanks @straight-shoota)

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

## [1.16.0] (2025-04-09)

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

### Features

#### lang

- Support `Slice.literal` in the interpreter ([#15531], thanks @HertzDevil)
- Support `Slice.literal` with inferred element type ([#15529], thanks @HertzDevil)
- _(macros)_ Error on `TypeNode#instance_vars`, `#has_inner_pointers?` macros in top-level scope ([#15293], thanks @straight-shoota)
- _(macros)_ Support `sizeof` and `alignof` inside macros for stable types ([#15497], thanks @HertzDevil)

[#15531]: https://github.com/crystal-lang/crystal/pull/15531
[#15529]: https://github.com/crystal-lang/crystal/pull/15529
[#15293]: https://github.com/crystal-lang/crystal/pull/15293
[#15497]: https://github.com/crystal-lang/crystal/pull/15497

#### stdlib

- Fix `Box(Pointer).box` to not allocate pointer storage on the heap ([#15562], thanks @ysbaddaden)
- _(collection)_ Add `Indexable#find` and `#find!` ([#15552], [#15589], thanks @punteek, @Sija)
- _(llvm)_ Add `LLVM.version` ([#15354], thanks @straight-shoota)
- _(llvm)_ Support LLVM 20 ([#15412], [#15418], thanks @HertzDevil, @straight-shoota)
- _(llvm)_ Add `LLVM.init_native_target` and `LLVM.init_all_targets` ([#15466], thanks @HertzDevil)
- _(llvm)_ Support `$LLVM_VERSION`, `$LLVM_TARGETS`, and `$LLVM_LDFLAGS` ([#15091], thanks @HertzDevil)
- _(llvm)_ Add `LLVM::CodeModel::Tiny` ([#15608], thanks @HertzDevil)
- _(macros)_ Implement `StringLiteral#scan` ([#15398], thanks @homonoidian)
- _(networking)_ Add `Path` as possible argument type to `UNIXSocket` and `UNIXServer` ([#15260], thanks @BigBoyBarney)
- _(networking)_ Add `Cookies#==` ([#15463], thanks @straight-shoota)
- _(runtime)_ Add `EventLoop#wait_readable`, `#wait_writable` methods methods ([#15376], thanks @ysbaddaden)
- _(runtime)_ Initialize `Fiber` with an explicit stack ([#15409], thanks @ysbaddaden)
- _(runtime)_ Add fiber queues for execution context schedulers ([#15345], thanks @ysbaddaden)
- _(runtime)_ RFC 2: Skeleton for ExecutionContext  ([#15350], [#15596], thanks @ysbaddaden)
- _(runtime)_ RFC 2: Add `Fiber::ExecutionContext::SingleThreaded` scheduler ([#15511], thanks @ysbaddaden)
- _(runtime)_ RFC 2: Add `Fiber::ExecutionContext::Isolated` ([#15513], thanks @ysbaddaden)
- _(runtime)_ RFC 2: Add `Fiber::ExecutionContext::Monitor` ([#15599], thanks @ysbaddaden)
- _(runtime)_ RFC 2: Add `Fiber::ExecutionContext::MultiThreaded` ([#15517], thanks @ysbaddaden)
- _(serialization)_ Add `Union.from_json_object_key?` ([#15411], thanks @straight-shoota)
- _(system)_ Add `Process::Status#description` ([#15468], thanks @straight-shoota)
- _(text)_ Add `IO` overloads to `Char#upcase`, `#downcase`, `#titlecase` ([#15508], thanks @HertzDevil)
- _(text)_ **[breaking]** New algorithm for `File.match?` ([#15607], thanks @straight-shoota)

[#15562]: https://github.com/crystal-lang/crystal/pull/15562
[#15552]: https://github.com/crystal-lang/crystal/pull/15552
[#15589]: https://github.com/crystal-lang/crystal/pull/15589
[#15354]: https://github.com/crystal-lang/crystal/pull/15354
[#15412]: https://github.com/crystal-lang/crystal/pull/15412
[#15418]: https://github.com/crystal-lang/crystal/pull/15418
[#15466]: https://github.com/crystal-lang/crystal/pull/15466
[#15091]: https://github.com/crystal-lang/crystal/pull/15091
[#15608]: https://github.com/crystal-lang/crystal/pull/15608
[#15398]: https://github.com/crystal-lang/crystal/pull/15398
[#15260]: https://github.com/crystal-lang/crystal/pull/15260
[#15463]: https://github.com/crystal-lang/crystal/pull/15463
[#15376]: https://github.com/crystal-lang/crystal/pull/15376
[#15409]: https://github.com/crystal-lang/crystal/pull/15409
[#15345]: https://github.com/crystal-lang/crystal/pull/15345
[#15350]: https://github.com/crystal-lang/crystal/pull/15350
[#15596]: https://github.com/crystal-lang/crystal/pull/15596
[#15511]: https://github.com/crystal-lang/crystal/pull/15511
[#15513]: https://github.com/crystal-lang/crystal/pull/15513
[#15599]: https://github.com/crystal-lang/crystal/pull/15599
[#15517]: https://github.com/crystal-lang/crystal/pull/15517
[#15411]: https://github.com/crystal-lang/crystal/pull/15411
[#15468]: https://github.com/crystal-lang/crystal/pull/15468
[#15508]: https://github.com/crystal-lang/crystal/pull/15508
[#15607]: https://github.com/crystal-lang/crystal/pull/15607

#### compiler

- _(cli)_ Support `--output` long option in `crystal build` ([#15519], thanks @HertzDevil)
- _(cli)_ Support directory name in `--output` CLI option ([#15471], thanks @straight-shoota)
- _(cli)_ **[breaking]** Add compiler path to `$PATH` and `$CRYSTAL_EXEC_PATH` for subcommands ([#15186], thanks @straight-shoota)
- _(cli)_ Respect `--mcpu=help` in the compiler ([#15595], thanks @HertzDevil)
- _(cli)_ Add `CRYSTAL_EXEC_PATH` to `crystal env` [followup #15186] ([#15632], thanks @straight-shoota)
- _(codegen)_ Set linkage of `__crystal_*` funs to internal ([#15439], thanks @ysbaddaden)
- _(codegen)_ Add function name to `CRYSTAL_DEBUG_CODEGEN` log helper ([#15506], thanks @HertzDevil)
- _(parser)_ Handle properly stringifying multiline macro expressions ([#15305], thanks @Blacksmoke16)
- _(parser)_ **[breaking]** Check that def, macro, and block parameters don't end with `?` or `!` ([#12197], thanks @potomak)

[#15519]: https://github.com/crystal-lang/crystal/pull/15519
[#15471]: https://github.com/crystal-lang/crystal/pull/15471
[#15186]: https://github.com/crystal-lang/crystal/pull/15186
[#15595]: https://github.com/crystal-lang/crystal/pull/15595
[#15632]: https://github.com/crystal-lang/crystal/pull/15632
[#15439]: https://github.com/crystal-lang/crystal/pull/15439
[#15506]: https://github.com/crystal-lang/crystal/pull/15506
[#15305]: https://github.com/crystal-lang/crystal/pull/15305
[#12197]: https://github.com/crystal-lang/crystal/pull/12197

#### tools

- _(docs-generator)_ Add docs to enum member helper methods ([#15379], thanks @nobodywasishere)
- _(docs-generator)_ Add `:showdoc:` directive for `private` and `protected` objects (RFC #0011) ([#15337], thanks @nobodywasishere)
- _(docs-generator)_ Add documentation support for `lib`, `fun`, `union`, `cstruct`, `external`, and `type` (RFC #0011) ([#15447], thanks @nobodywasishere)

[#15379]: https://github.com/crystal-lang/crystal/pull/15379
[#15337]: https://github.com/crystal-lang/crystal/pull/15337
[#15447]: https://github.com/crystal-lang/crystal/pull/15447

### Bugfixes

#### stdlib

- _(collection)_ Fix hash `@indices` can grow larger than `Int32::MAX` bytes ([#15347], thanks @ysbaddaden)
- _(collection)_ Fix `Tuple#to_a(&)` for arbitrary block output type ([#15431], thanks @straight-shoota)
- _(collection)_ Fix `Range#size` for unsigned edge cases ([#14978], thanks @straight-shoota)
- _(collection)_ **[breaking]** Fix the return type of `Enumerable#sum`, `#product` for union elements ([#15314], thanks @rvprasad)
- _(concurrency)_ Fix `Reference#exec_recursive`, `#exec_recursive_clone` to be fiber aware ([#15361], thanks @ysbaddaden)
- _(concurrency)_ RFC 2: MT safe fiber context switch on ARM ([#15582], thanks @ysbaddaden)
- _(crypto)_ Fix argument type for `EVP_CIPHER_get_flags` ([#15392], thanks @miry)
- _(files)_ Never remove UNC share name in `Path#dirname` ([#15583], thanks @HertzDevil)
- _(files)_ Fix `File.exists?` for special devices on Windows ([#15587], thanks @HertzDevil)
- _(llvm)_ Fix LLVM version detection for `-rc1` ([#15410], thanks @HertzDevil)
- _(networking)_ **[breaking]** Fix parsing HTTP resource string that looks like absolute URL ([#15499], thanks @straight-shoota)
- _(runtime)_ Fix `pkg_config` name for `libgc` bindings on FreeBSD ([#15532], thanks @straight-shoota)
- _(runtime)_ RFC 2: MT safe fiber context switch on AArch64 ([#15581], thanks @ysbaddaden)
- _(runtime)_ Add thread safety to `at_exit` ([#15598], thanks @ysbaddaden)
- _(runtime)_ Remove top-level calls to `LibGC.has_method?` for backwards compat ([#15635], thanks @straight-shoota)
- _(serialization)_ Fix `Union.from_yaml` to prioritize `String` for quoted scalar ([#15405], thanks @straight-shoota)
- _(system)_ signal handler mustn't depend on the event loop ([#15325], thanks @ysbaddaden)
- _(system)_ Corrects Windows lib lookup in case-sensitive OSes ([#15362], thanks @luislavena)
- _(system)_ Fix permissions application in `File.copy` ([#15520], thanks @straight-shoota)
- _(system)_ **[security]** Strip periods, spaces for batch file filtering on Windows ([#15573], thanks @GeopJr)
- _(system)_ Extend Windows `Process` completion key's lifetime ([#15597], thanks @HertzDevil)

[#15347]: https://github.com/crystal-lang/crystal/pull/15347
[#15431]: https://github.com/crystal-lang/crystal/pull/15431
[#14978]: https://github.com/crystal-lang/crystal/pull/14978
[#15314]: https://github.com/crystal-lang/crystal/pull/15314
[#15361]: https://github.com/crystal-lang/crystal/pull/15361
[#15582]: https://github.com/crystal-lang/crystal/pull/15582
[#15392]: https://github.com/crystal-lang/crystal/pull/15392
[#15583]: https://github.com/crystal-lang/crystal/pull/15583
[#15587]: https://github.com/crystal-lang/crystal/pull/15587
[#15410]: https://github.com/crystal-lang/crystal/pull/15410
[#15499]: https://github.com/crystal-lang/crystal/pull/15499
[#15532]: https://github.com/crystal-lang/crystal/pull/15532
[#15581]: https://github.com/crystal-lang/crystal/pull/15581
[#15598]: https://github.com/crystal-lang/crystal/pull/15598
[#15635]: https://github.com/crystal-lang/crystal/pull/15635
[#15405]: https://github.com/crystal-lang/crystal/pull/15405
[#15325]: https://github.com/crystal-lang/crystal/pull/15325
[#15362]: https://github.com/crystal-lang/crystal/pull/15362
[#15520]: https://github.com/crystal-lang/crystal/pull/15520
[#15573]: https://github.com/crystal-lang/crystal/pull/15573
[#15597]: https://github.com/crystal-lang/crystal/pull/15597

#### compiler

- _(cli)_ Fix query runtime version of LLVM ([#15355], thanks @straight-shoota)
- _(cli)_ Fix handling of double dashes `--` in crystal `eval` command ([#15477], thanks @kojix2)
- _(codegen)_ don't set external linkage when `@[NoInline]` is specified ([#15424], thanks @ysbaddaden)
- _(codegen)_ Allow multiple redefinitions of the same top-level fun ([#15553], thanks @HertzDevil)
- _(codegen)_ Respect `$MACOSX_DEPLOYMENT_TARGET` on macOS hosts ([#15603], thanks @HertzDevil)
- _(interpreter)_ Fix `pkg_config` name for `libffi` bindings ([#15533], thanks @straight-shoota)
- _(parser)_ Lexer: Fix location of token after line continuation ([#15454], thanks @FnControlOption)
- _(parser)_ Add locations to `When` nodes ([#15481], thanks @Sija)
- _(parser)_ Fix end location of call with block arg and no parentheses ([#15502], thanks @FnControlOption)
- _(parser)_ Fix location of `MacroExpression` nodes ([#15524], thanks @Sija)
- _(parser)_ Reject invalid operator names for implicit object calls ([#15526], thanks @nobodywasishere)

[#15355]: https://github.com/crystal-lang/crystal/pull/15355
[#15477]: https://github.com/crystal-lang/crystal/pull/15477
[#15424]: https://github.com/crystal-lang/crystal/pull/15424
[#15553]: https://github.com/crystal-lang/crystal/pull/15553
[#15603]: https://github.com/crystal-lang/crystal/pull/15603
[#15533]: https://github.com/crystal-lang/crystal/pull/15533
[#15454]: https://github.com/crystal-lang/crystal/pull/15454
[#15481]: https://github.com/crystal-lang/crystal/pull/15481
[#15502]: https://github.com/crystal-lang/crystal/pull/15502
[#15524]: https://github.com/crystal-lang/crystal/pull/15524
[#15526]: https://github.com/crystal-lang/crystal/pull/15526

#### tools

- _(formatter)_ Add uninitialized variables to formatter variable scopes ([#15578], thanks @HertzDevil)

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

### Chores

#### stdlib

- _(llvm)_ **[breaking]** Remove the `LibLLVM::IS_*` constants ([#15464], thanks @HertzDevil)

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

#### compiler

- _(interpreter:repl)_ Update REPLy version ([#15328], thanks @oprypin)

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

### Performance

#### stdlib

- _(files)_ Optimize `Path#drive`, `#root`, and `#anchor` ([#15584], thanks @HertzDevil)
- _(files)_ Optimize `Path#relative_to?` ([#15594], thanks @HertzDevil)
- _(runtime)_ Shrink `Crystal::System.print_error`'s output size ([#15490], thanks @HertzDevil)

[#15584]: https://github.com/crystal-lang/crystal/pull/15584
[#15594]: https://github.com/crystal-lang/crystal/pull/15594
[#15490]: https://github.com/crystal-lang/crystal/pull/15490

#### compiler

- _(codegen)_ Replace inline type IDs with global constants in LLVM IR ([#15485], [#15505], thanks @HertzDevil)
- _(codegen)_ Do not load `Path` call receiver if known to be pure load ([#15488], thanks @HertzDevil)
- _(codegen)_ Only refer to LLVM symbol table in calls to `Symbol#to_s` ([#15486], thanks @HertzDevil)
- _(debugger)_ Read all DWARF abbreviations tables in a single pass ([#15515], thanks @HertzDevil)
- _(debugger)_ Use binary search to search DWARF line numbers ([#15539], thanks @HertzDevil)
- _(debugger)_ Remove `op_index` and `end_sequence` from `Crystal::DWARF::LineNumbers::Row` ([#15538], thanks @HertzDevil)

[#15485]: https://github.com/crystal-lang/crystal/pull/15485
[#15505]: https://github.com/crystal-lang/crystal/pull/15505
[#15488]: https://github.com/crystal-lang/crystal/pull/15488
[#15486]: https://github.com/crystal-lang/crystal/pull/15486
[#15515]: https://github.com/crystal-lang/crystal/pull/15515
[#15539]: https://github.com/crystal-lang/crystal/pull/15539
[#15538]: https://github.com/crystal-lang/crystal/pull/15538

### Refactor

#### stdlib

- Use splat parameter to put `Tuple`s in large `Array` constants ([#15495], thanks @HertzDevil)
- _(collection)_ Simplify `Enumerable#to_a` ([#15432], thanks @straight-shoota)
- _(concurrency)_ Use `Crystal::PointerLinkedList` instead of `Deque` in `Mutex` ([#15330], thanks @ysbaddaden)
- _(concurrency)_ Add fiber safety to crystal/once ([#15370], thanks @ysbaddaden)
- _(concurrency)_ ARM: reduce duplication in fiber context switch ([#15585], thanks @ysbaddaden)
- _(files)_ Add nanosecond precision to `File.utime` on Unix ([#15335], thanks @ysbaddaden)
- _(llvm)_ **[deprecation]** Make `LLVM::ABI` internal ([#15559], thanks @HertzDevil)
- _(llvm)_ Only initialize `LLVM::Attribute`'s class variables on demand ([#15534], thanks @HertzDevil)
- _(macros)_ Generate Object getter/property macros to remove duplications ([#15386], thanks @ysbaddaden)
- _(networking)_ Refactor extract `HTTP::Cookies` to its own file ([#15500], [#15618], thanks @straight-shoota)
- _(runtime)_ Add `Crystal.print_buffered(io)` and `Crystal.print_error_buffered` ([#15343], thanks @ysbaddaden)
- _(runtime)_ Explicit init of Thread and Fiber class variables ([#15369], thanks @ysbaddaden)
- _(runtime)_ Add `Crystal.once_init` replacing `__crystal_once_init` ([#15371], thanks @ysbaddaden)
- _(runtime)_ Move shadow space reservation to x86_64 makecontext ([#15434], thanks @ysbaddaden)
- _(runtime)_ Add `Crystal::EventLoop#sleep(duration)` method ([#15564], thanks @ysbaddaden)
- _(system)_ Extract `File.match?` to separate source file ([#15574], thanks @straight-shoota)

[#15495]: https://github.com/crystal-lang/crystal/pull/15495
[#15432]: https://github.com/crystal-lang/crystal/pull/15432
[#15330]: https://github.com/crystal-lang/crystal/pull/15330
[#15370]: https://github.com/crystal-lang/crystal/pull/15370
[#15585]: https://github.com/crystal-lang/crystal/pull/15585
[#15335]: https://github.com/crystal-lang/crystal/pull/15335
[#15559]: https://github.com/crystal-lang/crystal/pull/15559
[#15534]: https://github.com/crystal-lang/crystal/pull/15534
[#15386]: https://github.com/crystal-lang/crystal/pull/15386
[#15500]: https://github.com/crystal-lang/crystal/pull/15500
[#15618]: https://github.com/crystal-lang/crystal/pull/15618
[#15343]: https://github.com/crystal-lang/crystal/pull/15343
[#15369]: https://github.com/crystal-lang/crystal/pull/15369
[#15371]: https://github.com/crystal-lang/crystal/pull/15371
[#15434]: https://github.com/crystal-lang/crystal/pull/15434
[#15564]: https://github.com/crystal-lang/crystal/pull/15564
[#15574]: https://github.com/crystal-lang/crystal/pull/15574

#### compiler

- _(codegen)_ Rework initialization of constants & class variables ([#15333], thanks @ysbaddaden)
- _(codegen)_ Remove unnecessary calls to `Crystal::CodeGenVisitor#union_type_and_value_pointer` ([#15491], thanks @HertzDevil)
- _(parser)_ Simplify `Call.new` convenience overloads ([#15427], thanks @straight-shoota)
- _(parser)_ Add `Call.new` constructor overload without `obj` parameter ([#15441], thanks @straight-shoota)
- _(semantic)_ Extract `regex_value` helper for macro methods ([#15435], thanks @straight-shoota)

[#15333]: https://github.com/crystal-lang/crystal/pull/15333
[#15491]: https://github.com/crystal-lang/crystal/pull/15491
[#15427]: https://github.com/crystal-lang/crystal/pull/15427
[#15441]: https://github.com/crystal-lang/crystal/pull/15441
[#15435]: https://github.com/crystal-lang/crystal/pull/15435

### Documentation

#### lang

- Document `alignof` and `instance_alignof` ([#15576], thanks @HertzDevil)
- _(macros)_ Document macro `sizeof` and `alignof` [followup #15497] ([#15575], thanks @HertzDevil)

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

#### stdlib

- Fix `Colorize::ObjectExtensions#colorize(r, g, b)` comment ([#15521], thanks @Sija)
- Rework docs for `getter`, `setter` and `property` macros ([#15428], thanks @ysbaddaden)
- Add missing files for API docs ([#15622], thanks @straight-shoota)
- _(runtime)_ Document `::debugger` ([#15579], thanks @HertzDevil)

[#15521]: https://github.com/crystal-lang/crystal/pull/15521
[#15428]: https://github.com/crystal-lang/crystal/pull/15428
[#15622]: https://github.com/crystal-lang/crystal/pull/15622
[#15579]: https://github.com/crystal-lang/crystal/pull/15579

#### compiler

- _(cli)_ Convert `crystal.1` manpage to asciidoc ([#15478], thanks @straight-shoota)
- _(cli)_ Split combined manpage into individual ones for each command ([#15509], thanks @straight-shoota)
- _(cli)_ Document environment variable `CRYSTAL_EXEC_PATH` [followup #15186] ([#15631], thanks @straight-shoota)

[#15478]: https://github.com/crystal-lang/crystal/pull/15478
[#15509]: https://github.com/crystal-lang/crystal/pull/15509
[#15631]: https://github.com/crystal-lang/crystal/pull/15631

#### other

- Add sample fibonacci numbers ([#15550], thanks @666hwll)

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

### Specs

#### stdlib

- Fix invalid returns in class getter's lazy evaluation blocks ([#15364], thanks @ysbaddaden)
- _(specs)_ Add specs for `File.match?` ([#15348], thanks @straight-shoota)
- _(text)_ Add specs for `File.match?` from fast-glob ([#15604], thanks @straight-shoota)
- _(text)_ Add specs for `File.match?` with multibyte characters ([#15601], thanks @straight-shoota)

[#15364]: https://github.com/crystal-lang/crystal/pull/15364
[#15348]: https://github.com/crystal-lang/crystal/pull/15348
[#15604]: https://github.com/crystal-lang/crystal/pull/15604
[#15601]: https://github.com/crystal-lang/crystal/pull/15601

#### compiler

- _(parser)_ Add specs for block association in nested calls ([#15461], thanks @straight-shoota)

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

### Infrastructure

- Changelog for 1.16.0 ([#15602], thanks @straight-shoota)
- Update previous Crystal release 1.15.0 ([#15339], thanks @straight-shoota)
- Make: Fix `make uninstall` to remove fish completion ([#15367], thanks @straight-shoota)
- Merge `release/1.15`@1.15.1 ([#15422], thanks @straight-shoota)
- Fix: Remove reverted PR from changelog for 1.15.1 ([#15415], thanks @straight-shoota)
- Update previous release: 1.15.1 ([#15417], thanks @straight-shoota)
- Add backports to changelog generator ([#15413], thanks @straight-shoota)
- Makefile: Expand `DESTDIR` outside of prefixed dir variables ([#15444], thanks @straight-shoota)
- Add git mailmap ([#15396], thanks @straight-shoota)
- Rename `find-llvm-config` to `find-llvm-config.sh` ([#15448], thanks @straight-shoota)
- Makefile: Remove `crystal` from `DATADIR` ([#15467], thanks @straight-shoota)
- Add `scripts/update-shards.sh` ([#15462], thanks @straight-shoota)
- Enhance `.gitignore` ([#15469], thanks @straight-shoota)
- Introduce shellcheck to lint shell scripts ([#15169], thanks @straight-shoota)
- Trim `CHANGELOG.md` ([#15627], thanks @straight-shoota)
- Update `scripts/generate_llvm_version_info.cr` ([#15465], thanks @HertzDevil)
- _(ci)_ Fix shards packaging for mingw-w64 ([#15451], thanks @straight-shoota)
- _(ci)_ Add workflow for backporting PRs to release branches ([#15372], [#15378], thanks @straight-shoota)
- _(ci)_ Update cygwin/cygwin-install-action action to v5 ([#15346], thanks @renovate)
- _(ci)_ Extract forward compatibility checks and run on nightly schedule ([#15437], thanks @straight-shoota)
- _(ci)_ Use MSYS2 Crystal package for `mingw-w64` workflow ([#15453], [#15476], thanks @HertzDevil, @straight-shoota)
- _(ci)_ Filter runs of LLVM Test workflow ([#15458], thanks @straight-shoota)
- _(ci)_ Filter runs of regex engine workflow ([#15460], thanks @straight-shoota)
- _(ci)_ Filter runs of OpenSSL Test workflow ([#15459], thanks @straight-shoota)
- _(ci)_ Filter runs of Smoke Test workflow ([#15457], thanks @straight-shoota)
- _(ci)_ Introduce actionlint to lint GitHub Actions workflows ([#15449], thanks @straight-shoota)
- _(ci)_ Fix MinGW-W64 workflow to run compiler tests with fresh compiler ([#15522], thanks @straight-shoota)
- _(ci)_ Update GH Actions ([#15525], thanks @renovate)
- _(ci)_ Update GH Actions ([#15551], thanks @renovate)
- _(ci)_ Update library versions for MSVC CI ([#15554], thanks @HertzDevil)
- _(ci)_ Increase memory for `aarch64-*-test-compiler` runners to 16GB ([#15572], thanks @straight-shoota)
- _(ci)_ Add AArch64 Linux workflow using GitHub's runner ([#15600], thanks @HertzDevil)

[#15602]: https://github.com/crystal-lang/crystal/pull/15602
[#15339]: https://github.com/crystal-lang/crystal/pull/15339
[#15367]: https://github.com/crystal-lang/crystal/pull/15367
[#15422]: https://github.com/crystal-lang/crystal/pull/15422
[#15415]: https://github.com/crystal-lang/crystal/pull/15415
[#15417]: https://github.com/crystal-lang/crystal/pull/15417
[#15413]: https://github.com/crystal-lang/crystal/pull/15413
[#15444]: https://github.com/crystal-lang/crystal/pull/15444
[#15396]: https://github.com/crystal-lang/crystal/pull/15396
[#15448]: https://github.com/crystal-lang/crystal/pull/15448
[#15467]: https://github.com/crystal-lang/crystal/pull/15467
[#15462]: https://github.com/crystal-lang/crystal/pull/15462
[#15469]: https://github.com/crystal-lang/crystal/pull/15469
[#15169]: https://github.com/crystal-lang/crystal/pull/15169
[#15627]: https://github.com/crystal-lang/crystal/pull/15627
[#15465]: https://github.com/crystal-lang/crystal/pull/15465
[#15451]: https://github.com/crystal-lang/crystal/pull/15451
[#15372]: https://github.com/crystal-lang/crystal/pull/15372
[#15378]: https://github.com/crystal-lang/crystal/pull/15378
[#15346]: https://github.com/crystal-lang/crystal/pull/15346
[#15437]: https://github.com/crystal-lang/crystal/pull/15437
[#15453]: https://github.com/crystal-lang/crystal/pull/15453
[#15476]: https://github.com/crystal-lang/crystal/pull/15476
[#15458]: https://github.com/crystal-lang/crystal/pull/15458
[#15460]: https://github.com/crystal-lang/crystal/pull/15460
[#15459]: https://github.com/crystal-lang/crystal/pull/15459
[#15457]: https://github.com/crystal-lang/crystal/pull/15457
[#15449]: https://github.com/crystal-lang/crystal/pull/15449
[#15522]: https://github.com/crystal-lang/crystal/pull/15522
[#15525]: https://github.com/crystal-lang/crystal/pull/15525
[#15551]: https://github.com/crystal-lang/crystal/pull/15551
[#15554]: https://github.com/crystal-lang/crystal/pull/15554
[#15572]: https://github.com/crystal-lang/crystal/pull/15572
[#15600]: https://github.com/crystal-lang/crystal/pull/15600
