chore(deps): update dependency crystal-lang/crystal to v1.22.0 #421

Open
renovate-bot wants to merge 1 commit from renovate/crystal-lang-crystal-1.x into master
Collaborator

This PR contains the following updates:

Package Type Update Change
crystal-lang/crystal uses-with minor 1.20.3 → 1.22.0

⚠️ Warning

Some dependencies could not be looked up. Check the warning logs for more information.


Release Notes

crystal-lang/crystal

v1.22.0

Compare Source

Breaking changes
stdlib
Features
lang
stdlib
compiler
tools
Bugfixes
stdlib
compiler
tools
Chores
lang
stdlib
compiler
other
Performance
stdlib
Refactor
stdlib
compiler
other
Documentation
stdlib
compiler
other
Specs
stdlib
compiler
Infrastructure

v1.21.1

Compare Source

Bugfixes
stdlib
Infrastructure

v1.21.0

Compare Source

Breaking changes
stdlib
Features
lang
stdlib
compiler
tools
  • (docs-generator) Improve wording in warning about doc generator without LibXML2 (#​16926, thanks @​kojix2)
Bugfixes
stdlib
compiler
tools
Chores
stdlib
Performance
stdlib
Refactor
stdlib
compiler
tools
other
Documentation
stdlib
other
Specs
stdlib
compiler
other
Infrastructure

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [crystal-lang/crystal](https://github.com/crystal-lang/crystal) | uses-with | minor | `1.20.3` → `1.22.0` | --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the warning logs for more information. --- ### Release Notes <details> <summary>crystal-lang/crystal</summary> ### [`v1.22.0`](https://github.com/crystal-lang/crystal/releases/tag/1.22.0) [Compare Source](https://github.com/crystal-lang/crystal/compare/1.21.1...1.22.0) ##### Breaking changes ##### stdlib - *(system)* Drop `Process.fork` ([#&#8203;17367], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17367]: https://github.com/crystal-lang/crystal/pull/17367 ##### Features ##### lang - Allow constants with type declarations ([#&#8203;16951], thanks [@&#8203;stakach](https://github.com/stakach)) - *(macros)* Add `StringLiteral#bytesize` ([#&#8203;17176], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(macros)* Add `NumberLiteral#chr` ([#&#8203;17169], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(macros)* Support `CharLiteral` in `RangeLiteral#each` ([#&#8203;17170], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16951]: https://github.com/crystal-lang/crystal/pull/16951 [#&#8203;17169]: https://github.com/crystal-lang/crystal/pull/17169 [#&#8203;17170]: https://github.com/crystal-lang/crystal/pull/17170 [#&#8203;17176]: https://github.com/crystal-lang/crystal/pull/17176 ##### stdlib - Add warning about minimum supported Crystal version in `prelude` ([#&#8203;17349], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(crypto)* Enable OpenSSL Kernel TLS support by default ([#&#8203;17059], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(crypto)* Add `OpenSSL::Cipher#gcm_tag` and `#gcm_tag=` for AEAD ciphers ([#&#8203;17096], thanks [@&#8203;paulocoghi](https://github.com/paulocoghi)) - *(files)* Add `IO::Memory#writable?` ([#&#8203;17167], thanks [@&#8203;spuun](https://github.com/spuun)) - *(llvm)* Support LLVM 23.1 and 24.0 ([#&#8203;17432], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(macros)* Add all enum types to `Enum`'s list of subclasses ([#&#8203;17425], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(networking)* Add `HTTP::Context#remote_address`, `#local_address` ([#&#8203;17196], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Validate method, version, and host in `HTTP::WebSocketHandler` ([#&#8203;17235], thanks [@&#8203;hahwul](https://github.com/hahwul)) - *(networking)* `HTTP::Client::Request` support `Content-Encoding: x-gzip` ([#&#8203;17263], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Add `HTTP::Headers#merge` ([#&#8203;17326], thanks [@&#8203;jgaskins](https://github.com/jgaskins)) - *(networking)* Serialize `IO::Memory` in HTTP body with `Content-Length` header ([#&#8203;17388], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(runtime)* Add `GC.syscall(&)` ([#&#8203;17150], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Add `Thread#wait` and `Thread#wake` methods ([#&#8203;17226], [#&#8203;17243], [#&#8203;17247], [#&#8203;17380], [#&#8203;17419], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Add `Crystal::LRUCache` ([#&#8203;17284], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Add `GC.max_heap_size=` ([#&#8203;17346], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(runtime)* Use epoll event loop on Solaris targets ([#&#8203;17370], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* DWARF: build function names table for fast binary search ([#&#8203;17410], [#&#8203;17433], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Enable kqueue event-loop by default on all BSD targets ([#&#8203;17421], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* DWARF: build index of `.debug_line` section ([#&#8203;17455], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Support `Bytes` in `Crystal::System.printf(%s)` ([#&#8203;17463], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Support `DW_FORM_addrx<n>` and `DW_FORM_strx<n>` from DWARF 5 ([#&#8203;17445], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Add `Fiber::ExecutionContext::Parallel#scale_up` to manually scale parallel contexts ([#&#8203;17438], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Re-enable pretty backtraces in UNIX segfault handler ([#&#8203;17456], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(serialization)* Add `XML::Node#line_number` ([#&#8203;17179], thanks [@&#8203;n-rodriguez](https://github.com/n-rodriguez)) - *(system)* Include exit code in `Process::Status#description` ([#&#8203;17087], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Add `File::Info#inspect` ([#&#8203;17375], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Add `File.exists?(follow_symlinks: true)` ([#&#8203;17307], [#&#8203;17600], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota), [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(system)* `File::Info.readable?`, `.writable?`, `.executable?` `follow_symlinks: false` ([#&#8203;17391], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Add `Char::Reader.new(Bytes)` ([#&#8203;17428], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(time)* Add `Time::Span#to_nanoseconds` etc. ([#&#8203;17190], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17059]: https://github.com/crystal-lang/crystal/pull/17059 [#&#8203;17087]: https://github.com/crystal-lang/crystal/pull/17087 [#&#8203;17096]: https://github.com/crystal-lang/crystal/pull/17096 [#&#8203;17150]: https://github.com/crystal-lang/crystal/pull/17150 [#&#8203;17167]: https://github.com/crystal-lang/crystal/pull/17167 [#&#8203;17179]: https://github.com/crystal-lang/crystal/pull/17179 [#&#8203;17190]: https://github.com/crystal-lang/crystal/pull/17190 [#&#8203;17196]: https://github.com/crystal-lang/crystal/pull/17196 [#&#8203;17226]: https://github.com/crystal-lang/crystal/pull/17226 [#&#8203;17235]: https://github.com/crystal-lang/crystal/pull/17235 [#&#8203;17243]: https://github.com/crystal-lang/crystal/pull/17243 [#&#8203;17247]: https://github.com/crystal-lang/crystal/pull/17247 [#&#8203;17263]: https://github.com/crystal-lang/crystal/pull/17263 [#&#8203;17284]: https://github.com/crystal-lang/crystal/pull/17284 [#&#8203;17307]: https://github.com/crystal-lang/crystal/pull/17307 [#&#8203;17326]: https://github.com/crystal-lang/crystal/pull/17326 [#&#8203;17346]: https://github.com/crystal-lang/crystal/pull/17346 [#&#8203;17349]: https://github.com/crystal-lang/crystal/pull/17349 [#&#8203;17370]: https://github.com/crystal-lang/crystal/pull/17370 [#&#8203;17375]: https://github.com/crystal-lang/crystal/pull/17375 [#&#8203;17380]: https://github.com/crystal-lang/crystal/pull/17380 [#&#8203;17388]: https://github.com/crystal-lang/crystal/pull/17388 [#&#8203;17391]: https://github.com/crystal-lang/crystal/pull/17391 [#&#8203;17410]: https://github.com/crystal-lang/crystal/pull/17410 [#&#8203;17419]: https://github.com/crystal-lang/crystal/pull/17419 [#&#8203;17421]: https://github.com/crystal-lang/crystal/pull/17421 [#&#8203;17425]: https://github.com/crystal-lang/crystal/pull/17425 [#&#8203;17428]: https://github.com/crystal-lang/crystal/pull/17428 [#&#8203;17432]: https://github.com/crystal-lang/crystal/pull/17432 [#&#8203;17433]: https://github.com/crystal-lang/crystal/pull/17433 [#&#8203;17438]: https://github.com/crystal-lang/crystal/pull/17438 [#&#8203;17445]: https://github.com/crystal-lang/crystal/pull/17445 [#&#8203;17455]: https://github.com/crystal-lang/crystal/pull/17455 [#&#8203;17456]: https://github.com/crystal-lang/crystal/pull/17456 [#&#8203;17463]: https://github.com/crystal-lang/crystal/pull/17463 [#&#8203;17600]: https://github.com/crystal-lang/crystal/pull/17600 ##### compiler - *(cli)* Improve compiler error when writing cross-compile output fails ([#&#8203;17457], thanks [@&#8203;ralsina](https://github.com/ralsina)) - *(parser)* Fix parsing suffix form of `ensure` after an `ExceptionHandler` ([#&#8203;17426], [#&#8203;17460], thanks [@&#8203;Sija](https://github.com/Sija)) - *(semantic)* Add `Crystal::ALL_FLAGS` and `USER_FLAGS` ([#&#8203;17392], [#&#8203;17621], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(semantic)* Fix `method_missing` call location metadata ([#&#8203;17465], thanks [@&#8203;nobodywasishere](https://github.com/nobodywasishere)) [#&#8203;17392]: https://github.com/crystal-lang/crystal/pull/17392 [#&#8203;17426]: https://github.com/crystal-lang/crystal/pull/17426 [#&#8203;17457]: https://github.com/crystal-lang/crystal/pull/17457 [#&#8203;17460]: https://github.com/crystal-lang/crystal/pull/17460 [#&#8203;17465]: https://github.com/crystal-lang/crystal/pull/17465 [#&#8203;17621]: https://github.com/crystal-lang/crystal/pull/17621 ##### tools - *(docs-generator)* Update markd 0.6.0 ([#&#8203;17269], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17269]: https://github.com/crystal-lang/crystal/pull/17269 ##### Bugfixes ##### stdlib - *(cli)* Fix bundled short options not consuming a value from the next argument ([#&#8203;17473], thanks [@&#8203;alter](https://github.com/alter)) - *(collection)* Fix invalid access in `BitArray#[](Int, Int)` ([#&#8203;17205], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(collection)* Fix `Range#step` raise on zero step size ([#&#8203;17225], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(collection)* Fix `Range#size` overflow on max integer value ([#&#8203;17266], thanks [@&#8203;mvanhorn](https://github.com/mvanhorn)) - *(collection)* Fix each_repeated_combination iterator raising on an empty collection ([#&#8203;17275], thanks [@&#8203;SAY-5](https://github.com/SAY-5)) - *(concurrency)* `Sync::RWLock#try_write_lock?` skips type protection ([#&#8203;17472], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(files)* invalid resize when writing `IO::Memory` to itself ([#&#8203;17241], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(llvm)* Add pointer indirection for `__crystal_type_id_to_class_name_map` ([#&#8203;17502], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(llvm)* Fix `LLVM#gep` and `#inbounds_gep` signatures with multiple indices ([#&#8203;17538], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(networking)* Reject unrecognized HTTP `Transfer-Encoding` header ([#&#8203;17140], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Reject `HTTP::Client::Response` with invalid `Content-Encoding` ([#&#8203;17262], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `HTTP::Request.from_io` parsing empty header name ([#&#8203;17254], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* **\[breaking]** Fix `HTTP::Request#body=` return value ([#&#8203;17257], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `Content-Encoding: deflate` ([#&#8203;17261], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix validation in `Request#hostname` ([#&#8203;17258], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `HTTP::Request#form_params?` to ignore invalid content-type ([#&#8203;17256], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `HTTP.parse_headers_and_body` to not raise with `without_zlib` ([#&#8203;17272], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Validate `HTTP::Request#method` ([#&#8203;17255], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Validate `HTTP::Request#version` ([#&#8203;17304], [#&#8203;17374], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota), [@&#8203;Sija](https://github.com/Sija)) - *(networking)* Fix `HTTP::Request#content_length=` return value ([#&#8203;17273], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Validate `HTTP::Request#resource` ([#&#8203;17310], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `Socket#sendfile` when `count > file.size` ([#&#8203;17286], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `File#sendfile` should not move `#pos` ([#&#8203;17293], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix IPv6 address passed to `OpenSSL::SSL::Socket::Client.new` for OpenSSL 4.0 ([#&#8203;17321], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(networking)* Fix `HTTP::VALID_TOKEN_CHAR_MAP` for Crystal < 1.16 ([#&#8203;17333], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix validate `HTTP::Headers` name ([#&#8203;17317], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Close `HTTP::Client` on `IO::Error` during request ([#&#8203;17318], thanks [@&#8203;jgaskins](https://github.com/jgaskins)) - *(networking)* Fix reject invalid HTTP trailer ([#&#8203;17337], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Validate `HTTP::Request#content_length` and type as `Int64` ([#&#8203;17312], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix keep `HTTP::Request#content_length` in sync with `#body` ([#&#8203;17389], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `WebSocket` buffer corruption with interleaved control frame ([#&#8203;17553], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `WebSocket::Protocol#receive` to validate masked/unmasked state ([#&#8203;17562], [#&#8203;17603], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `WebSocket` reject mixed opcode continuation ([#&#8203;17552], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(numeric)* Fix `BigRational#<=>` with an infinite `Float` ([#&#8203;17223], thanks [@&#8203;youdie006](https://github.com/youdie006)) - *(numeric)* Fix `Int#humanize_bytes` to use `KiB` in IEC format ([#&#8203;17234], thanks [@&#8203;kojix2](https://github.com/kojix2)) - *(runtime)* `ThreadPool#main_thread_loop` ([#&#8203;17194], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* free dead fiber stack when there's no stack pool ([#&#8203;17229], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* support bare threads in crystal/once ([#&#8203;17228], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* io_uring event loop hangs on sendfile ([#&#8203;17299], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* correctly iterate ELF file sections ([#&#8203;17327], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* backtraces on musl-libc when linking with `-static-pie` ([#&#8203;17316], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* abort on out-of-memory instead of segfaulting ([#&#8203;17111], [#&#8203;17345], thanks [@&#8203;carlhoerberg](https://github.com/carlhoerberg), [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(runtime)* enqueue thread once into thread pool ([#&#8203;17350], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* save stdio closed state on program start ([#&#8203;17378], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* rewrite thread pool logic to avoid race conditions ([#&#8203;17400], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* don't propagate trace environment variables to sub-processes ([#&#8203;17402], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* tracing 128 bit integers ([#&#8203;17403], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* kqueue event loop on NetBSD ([#&#8203;17420], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* **\[regression]** Fix COFF symbols table being empty on MinGW-w64 ([#&#8203;17442], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(runtime)* Fix running on CPUs with `cpu_count > UInt8::MAX` ([#&#8203;17437], thanks [@&#8203;willhbr](https://github.com/willhbr)) - *(runtime)* parallel schedulers may deadlock each other ([#&#8203;17491], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* crystal/once must cleanup when an exception is raised ([#&#8203;17546], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* auto-scaling of multiple execution contexts ([#&#8203;17514], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Distinguish kqueue registration errors from kevent errors ([#&#8203;17599], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(serialization)* Fix CSV error line numbers with CRLF input ([#&#8203;17381], thanks [@&#8203;cuishuang](https://github.com/cuishuang)) - *(serialization)* Fix CSV builder to escape CR characters ([#&#8203;17548], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(system)* **\[regression]** Fix missing NULL terminator for `execve` vargs ([#&#8203;17184], thanks [@&#8203;sdogruyol](https://github.com/sdogruyol)) - *(system)* Fix `Process.new` to close pipes on error ([#&#8203;17297], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* **\[breaking]** Add `IO::FileDescriptor#exit_on_broken_pipe` ([#&#8203;17335], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Skip inaccessible candidates for `Process.find_executable` ([#&#8203;17409], thanks [@&#8203;mvanhorn](https://github.com/mvanhorn)) - *(system)* Fix `FileUtils.mv(Enumerable)` swallowing errors ([#&#8203;17407], thanks [@&#8203;LaskaIDK](https://github.com/LaskaIDK)) - *(system)* Ignore all `File::Error` in `Process.find_executable` ([#&#8203;17542], thanks [@&#8203;jochenseeber](https://github.com/jochenseeber)) - *(text)* Fix `String#gsub` when `Regex` pattern matches empty string and advances ([#&#8203;17204], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(text)* Fix `URI#resolve` for path without `/` ([#&#8203;17213], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Handle consecutive whitespace in `String#titleize` ([#&#8203;17206], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(text)* Fix `String#each_line(remove_empty: true)` with many empty lines ([#&#8203;17242], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Fix `Char::Reader#pos=` to raise on negative position ([#&#8203;17382], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Fix `Char::Reader#current_char_width` to be zero at end ([#&#8203;17405], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Fix `String#compare(case_insensitive: true)` to order invalid byte sequences ([#&#8203;17314], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Fix `Char::Reader.new` to raise on an invalid position ([#&#8203;17416], thanks [@&#8203;youdie006](https://github.com/youdie006)) - *(text)* Fix `PCRE2#jit_compile` to accept nomemory error for implicit fallback ([#&#8203;17559], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(time)* Fix local timezone location name for Android ([#&#8203;17248], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(time)* Fix `Time::Location.load?` for Android ([#&#8203;17249], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) [#&#8203;17111]: https://github.com/crystal-lang/crystal/pull/17111 [#&#8203;17140]: https://github.com/crystal-lang/crystal/pull/17140 [#&#8203;17184]: https://github.com/crystal-lang/crystal/pull/17184 [#&#8203;17194]: https://github.com/crystal-lang/crystal/pull/17194 [#&#8203;17204]: https://github.com/crystal-lang/crystal/pull/17204 [#&#8203;17205]: https://github.com/crystal-lang/crystal/pull/17205 [#&#8203;17206]: https://github.com/crystal-lang/crystal/pull/17206 [#&#8203;17213]: https://github.com/crystal-lang/crystal/pull/17213 [#&#8203;17223]: https://github.com/crystal-lang/crystal/pull/17223 [#&#8203;17225]: https://github.com/crystal-lang/crystal/pull/17225 [#&#8203;17228]: https://github.com/crystal-lang/crystal/pull/17228 [#&#8203;17229]: https://github.com/crystal-lang/crystal/pull/17229 [#&#8203;17234]: https://github.com/crystal-lang/crystal/pull/17234 [#&#8203;17241]: https://github.com/crystal-lang/crystal/pull/17241 [#&#8203;17242]: https://github.com/crystal-lang/crystal/pull/17242 [#&#8203;17248]: https://github.com/crystal-lang/crystal/pull/17248 [#&#8203;17249]: https://github.com/crystal-lang/crystal/pull/17249 [#&#8203;17254]: https://github.com/crystal-lang/crystal/pull/17254 [#&#8203;17255]: https://github.com/crystal-lang/crystal/pull/17255 [#&#8203;17256]: https://github.com/crystal-lang/crystal/pull/17256 [#&#8203;17257]: https://github.com/crystal-lang/crystal/pull/17257 [#&#8203;17258]: https://github.com/crystal-lang/crystal/pull/17258 [#&#8203;17261]: https://github.com/crystal-lang/crystal/pull/17261 [#&#8203;17262]: https://github.com/crystal-lang/crystal/pull/17262 [#&#8203;17266]: https://github.com/crystal-lang/crystal/pull/17266 [#&#8203;17272]: https://github.com/crystal-lang/crystal/pull/17272 [#&#8203;17273]: https://github.com/crystal-lang/crystal/pull/17273 [#&#8203;17275]: https://github.com/crystal-lang/crystal/pull/17275 [#&#8203;17286]: https://github.com/crystal-lang/crystal/pull/17286 [#&#8203;17293]: https://github.com/crystal-lang/crystal/pull/17293 [#&#8203;17297]: https://github.com/crystal-lang/crystal/pull/17297 [#&#8203;17299]: https://github.com/crystal-lang/crystal/pull/17299 [#&#8203;17304]: https://github.com/crystal-lang/crystal/pull/17304 [#&#8203;17310]: https://github.com/crystal-lang/crystal/pull/17310 [#&#8203;17312]: https://github.com/crystal-lang/crystal/pull/17312 [#&#8203;17314]: https://github.com/crystal-lang/crystal/pull/17314 [#&#8203;17316]: https://github.com/crystal-lang/crystal/pull/17316 [#&#8203;17317]: https://github.com/crystal-lang/crystal/pull/17317 [#&#8203;17318]: https://github.com/crystal-lang/crystal/pull/17318 [#&#8203;17321]: https://github.com/crystal-lang/crystal/pull/17321 [#&#8203;17327]: https://github.com/crystal-lang/crystal/pull/17327 [#&#8203;17333]: https://github.com/crystal-lang/crystal/pull/17333 [#&#8203;17335]: https://github.com/crystal-lang/crystal/pull/17335 [#&#8203;17337]: https://github.com/crystal-lang/crystal/pull/17337 [#&#8203;17345]: https://github.com/crystal-lang/crystal/pull/17345 [#&#8203;17350]: https://github.com/crystal-lang/crystal/pull/17350 [#&#8203;17374]: https://github.com/crystal-lang/crystal/pull/17374 [#&#8203;17378]: https://github.com/crystal-lang/crystal/pull/17378 [#&#8203;17381]: https://github.com/crystal-lang/crystal/pull/17381 [#&#8203;17382]: https://github.com/crystal-lang/crystal/pull/17382 [#&#8203;17389]: https://github.com/crystal-lang/crystal/pull/17389 [#&#8203;17400]: https://github.com/crystal-lang/crystal/pull/17400 [#&#8203;17402]: https://github.com/crystal-lang/crystal/pull/17402 [#&#8203;17403]: https://github.com/crystal-lang/crystal/pull/17403 [#&#8203;17405]: https://github.com/crystal-lang/crystal/pull/17405 [#&#8203;17407]: https://github.com/crystal-lang/crystal/pull/17407 [#&#8203;17409]: https://github.com/crystal-lang/crystal/pull/17409 [#&#8203;17416]: https://github.com/crystal-lang/crystal/pull/17416 [#&#8203;17420]: https://github.com/crystal-lang/crystal/pull/17420 [#&#8203;17437]: https://github.com/crystal-lang/crystal/pull/17437 [#&#8203;17442]: https://github.com/crystal-lang/crystal/pull/17442 [#&#8203;17472]: https://github.com/crystal-lang/crystal/pull/17472 [#&#8203;17473]: https://github.com/crystal-lang/crystal/pull/17473 [#&#8203;17491]: https://github.com/crystal-lang/crystal/pull/17491 [#&#8203;17502]: https://github.com/crystal-lang/crystal/pull/17502 [#&#8203;17514]: https://github.com/crystal-lang/crystal/pull/17514 [#&#8203;17538]: https://github.com/crystal-lang/crystal/pull/17538 [#&#8203;17542]: https://github.com/crystal-lang/crystal/pull/17542 [#&#8203;17546]: https://github.com/crystal-lang/crystal/pull/17546 [#&#8203;17548]: https://github.com/crystal-lang/crystal/pull/17548 [#&#8203;17552]: https://github.com/crystal-lang/crystal/pull/17552 [#&#8203;17553]: https://github.com/crystal-lang/crystal/pull/17553 [#&#8203;17559]: https://github.com/crystal-lang/crystal/pull/17559 [#&#8203;17562]: https://github.com/crystal-lang/crystal/pull/17562 [#&#8203;17599]: https://github.com/crystal-lang/crystal/pull/17599 [#&#8203;17603]: https://github.com/crystal-lang/crystal/pull/17603 ##### compiler - Fix vswhere ignoring ARM64-only MSVC installations ([#&#8203;17395], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(codegen)* Codegen doesn't materialize an unused yield block value in debug builds, pt. 2 ([#&#8203;17130], thanks [@&#8203;nobodywasishere](https://github.com/nobodywasishere)) - *(codegen)* Unify LLVM types used for `ReferenceStorage` ([#&#8203;17397], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(codegen)* Do not access owner type in dispatch if it is not passed at runtime ([#&#8203;17424], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(codegen)* cross-compile crashes when combined with emit llvm-bc or obj ([#&#8203;17510], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(codegen)* Fix memory leak in mixed union assignments ([#&#8203;17518], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(codegen)* Fix SysV ABI classification of word containing `Float32` followed by integer ([#&#8203;17572], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(codegen)* Respect ABI info when explicitly returning inside top-level funs ([#&#8203;17616], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(debugger)* Fix lldb-dap crash on Windows when loading Crystal formatters ([#&#8203;17448], thanks [@&#8203;magynhard](https://github.com/magynhard)) - *(interpreter)* Fix interpreter dispatch on a virtual struct narrowed from a union ([#&#8203;17450], thanks [@&#8203;jochenseeber](https://github.com/jochenseeber)) - *(parser)* Fix parse `OP_SLASH` after block ([#&#8203;17159], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Fix suffix `ExceptionHandler#location` in an assignment ([#&#8203;17365], thanks [@&#8203;Sija](https://github.com/Sija)) - *(parser)* Fix global calls shadowed by local variables ([#&#8203;17558], thanks [@&#8203;grepsedawk](https://github.com/grepsedawk)) - *(semantic)* Fix instance variable initializer using a class variable assignment ([#&#8203;17148], thanks [@&#8203;nobodywasishere](https://github.com/nobodywasishere)) - *(semantic)* Fix bug allowing `self` in private top-level method ([#&#8203;17149], thanks [@&#8203;nobodywasishere](https://github.com/nobodywasishere)) - *(semantic)* Fix dynamic class declaration macro error ([#&#8203;17274], thanks [@&#8203;nobodywasishere](https://github.com/nobodywasishere)) - *(semantic)* Backfill included type to existing instantiations ([#&#8203;17094], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(semantic)* Fix ICE when module with ivar is included in a type that can't have them ([#&#8203;17386], thanks [@&#8203;bcardiff](https://github.com/bcardiff)) - *(semantic)* Disallow `instance_sizeof` and `instance_alignof` on `Void` or `NoReturn` ([#&#8203;17453], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) [#&#8203;17094]: https://github.com/crystal-lang/crystal/pull/17094 [#&#8203;17130]: https://github.com/crystal-lang/crystal/pull/17130 [#&#8203;17148]: https://github.com/crystal-lang/crystal/pull/17148 [#&#8203;17149]: https://github.com/crystal-lang/crystal/pull/17149 [#&#8203;17159]: https://github.com/crystal-lang/crystal/pull/17159 [#&#8203;17274]: https://github.com/crystal-lang/crystal/pull/17274 [#&#8203;17365]: https://github.com/crystal-lang/crystal/pull/17365 [#&#8203;17386]: https://github.com/crystal-lang/crystal/pull/17386 [#&#8203;17395]: https://github.com/crystal-lang/crystal/pull/17395 [#&#8203;17397]: https://github.com/crystal-lang/crystal/pull/17397 [#&#8203;17424]: https://github.com/crystal-lang/crystal/pull/17424 [#&#8203;17448]: https://github.com/crystal-lang/crystal/pull/17448 [#&#8203;17450]: https://github.com/crystal-lang/crystal/pull/17450 [#&#8203;17453]: https://github.com/crystal-lang/crystal/pull/17453 [#&#8203;17510]: https://github.com/crystal-lang/crystal/pull/17510 [#&#8203;17518]: https://github.com/crystal-lang/crystal/pull/17518 [#&#8203;17558]: https://github.com/crystal-lang/crystal/pull/17558 [#&#8203;17572]: https://github.com/crystal-lang/crystal/pull/17572 [#&#8203;17616]: https://github.com/crystal-lang/crystal/pull/17616 ##### tools - *(formatter)* Fix formatter for setter assignment with parenthesized values ([#&#8203;17083], thanks [@&#8203;mamantoha](https://github.com/mamantoha)) - *(formatter)* formatter unescapes fresh variables ([#&#8203;17517], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) [#&#8203;17083]: https://github.com/crystal-lang/crystal/pull/17083 [#&#8203;17517]: https://github.com/crystal-lang/crystal/pull/17517 ##### Chores ##### lang - **\[deprecation]** Deprecate uppercase instance and class variables ([#&#8203;17160], thanks [@&#8203;nobodywasishere](https://github.com/nobodywasishere)) [#&#8203;17160]: https://github.com/crystal-lang/crystal/pull/17160 ##### stdlib - *(llvm)* **\[deprecation]** Deprecate `LLVM::Type#size` and `#alignment` ([#&#8203;17494], [#&#8203;17533], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(networking)* **\[deprecation]** Deprecate `HTTP::Request#local_address` and `#remote_address` ([#&#8203;17260], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17260]: https://github.com/crystal-lang/crystal/pull/17260 [#&#8203;17494]: https://github.com/crystal-lang/crystal/pull/17494 [#&#8203;17533]: https://github.com/crystal-lang/crystal/pull/17533 ##### compiler - *(codegen)* Drop `Compiler#fork_codegen` ([#&#8203;16417], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16417]: https://github.com/crystal-lang/crystal/pull/16417 ##### other - Fix deprecation warnings in samples ([#&#8203;17342], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) [#&#8203;17342]: https://github.com/crystal-lang/crystal/pull/17342 ##### Performance ##### stdlib - *(networking)* Optimize `HTTP.header_name` ([#&#8203;14503], thanks [@&#8203;jgaskins](https://github.com/jgaskins)) - *(runtime)* Keep decoded backtrace lines into LRU cache ([#&#8203;17285], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(text)* Optimize `String#byte_index(Int)` ([#&#8203;17303], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(text)* Optimize `String#gsub(String)` and `#scan(String)` ([#&#8203;17305], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) [#&#8203;14503]: https://github.com/crystal-lang/crystal/pull/14503 [#&#8203;17285]: https://github.com/crystal-lang/crystal/pull/17285 [#&#8203;17303]: https://github.com/crystal-lang/crystal/pull/17303 [#&#8203;17305]: https://github.com/crystal-lang/crystal/pull/17305 ##### Refactor ##### stdlib - *(collection)* Optimize buffer size in `Enum.parse?` with `StringLiteral#bytesize` ([#&#8203;17193], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Refactor `Socket::IPAddress` interface index conversion ([#&#8203;17250], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(networking)* Refactor `RequestProcessor#process` to receive a single IO ([#&#8203;17461], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(numeric)* Use unchecked arithmetic in compiler-rt ports ([#&#8203;17180], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(numeric)* Use native `UInt128` in Dragonbox ([#&#8203;16262], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(numeric)* Format `Int` `MIN`and `MAX` constants as hex numbers ([#&#8203;17352], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(numeric)* Use 128-bit literals ([#&#8203;5545], thanks [@&#8203;Sija](https://github.com/Sija)) - *(runtime)* Execution contexts directly enqueue fibers during event loop runs ([#&#8203;17158], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Add `Runnables#lazy_grab?` to skip the mutex on quick dequeue ([#&#8203;17151], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Refactor file lock ([#&#8203;17105], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Refactor `Exception::CallStack.decode_backtrace_frame` ([#&#8203;17282], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* DWARF: scan sections instead of building large tables ([#&#8203;17283], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(text)* Refactor `Char::Reader#next_char` and ivar initialization ([#&#8203;17383], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(time)* Change `Time.zero` to create new instance instead of returning `ZERO` ([#&#8203;17216], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(time)* Replace `Time::Span::ZERO` with `.zero` ([#&#8203;17217], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(time)* Use `Time::Span#to_seconds` etc. ([#&#8203;17259], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;5545]: https://github.com/crystal-lang/crystal/pull/5545 [#&#8203;16262]: https://github.com/crystal-lang/crystal/pull/16262 [#&#8203;17105]: https://github.com/crystal-lang/crystal/pull/17105 [#&#8203;17151]: https://github.com/crystal-lang/crystal/pull/17151 [#&#8203;17158]: https://github.com/crystal-lang/crystal/pull/17158 [#&#8203;17180]: https://github.com/crystal-lang/crystal/pull/17180 [#&#8203;17193]: https://github.com/crystal-lang/crystal/pull/17193 [#&#8203;17216]: https://github.com/crystal-lang/crystal/pull/17216 [#&#8203;17217]: https://github.com/crystal-lang/crystal/pull/17217 [#&#8203;17250]: https://github.com/crystal-lang/crystal/pull/17250 [#&#8203;17259]: https://github.com/crystal-lang/crystal/pull/17259 [#&#8203;17282]: https://github.com/crystal-lang/crystal/pull/17282 [#&#8203;17283]: https://github.com/crystal-lang/crystal/pull/17283 [#&#8203;17352]: https://github.com/crystal-lang/crystal/pull/17352 [#&#8203;17383]: https://github.com/crystal-lang/crystal/pull/17383 [#&#8203;17461]: https://github.com/crystal-lang/crystal/pull/17461 ##### compiler - Refactor `Program#define_crystal_constants` ([#&#8203;17268], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(codegen)* Remove `Crystal::LLVMBuilderHelper#llvm_size` and friends ([#&#8203;17452], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(semantic)* Refactor `RangeLiteral#each` ([#&#8203;17195], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(semantic)* Refactor `#interpret_to_range` ([#&#8203;17227], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17195]: https://github.com/crystal-lang/crystal/pull/17195 [#&#8203;17227]: https://github.com/crystal-lang/crystal/pull/17227 [#&#8203;17268]: https://github.com/crystal-lang/crystal/pull/17268 [#&#8203;17452]: https://github.com/crystal-lang/crystal/pull/17452 ##### other - Remove unnecessary requires ([#&#8203;17306], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Do not use relative requires for the standard library ([#&#8203;17320], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) [#&#8203;17306]: https://github.com/crystal-lang/crystal/pull/17306 [#&#8203;17320]: https://github.com/crystal-lang/crystal/pull/17320 ##### Documentation ##### stdlib - *(collection)* Fix doc example for `Hash#put` ([#&#8203;17459], thanks [@&#8203;spuun](https://github.com/spuun)) - *(concurrency)* Clarify docs for `Channel` buffered channel close and drain semantics ([#&#8203;17423], thanks [@&#8203;renich](https://github.com/renich)) - *(numeric)* Fix typo in doc comment for `Int` ([#&#8203;17238], thanks [@&#8203;swsch](https://github.com/swsch)) - *(runtime)* Undocument internal `GC` methods ([#&#8203;17451], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(serialization)* Mention `#to_pretty_json` in `JSON` documentation ([#&#8203;17131], thanks [@&#8203;LaskaIDK](https://github.com/LaskaIDK)) - *(specs)* Fix summary line of `Spec::Expectations#be` docs ([#&#8203;17556], thanks [@&#8203;SatvikMishra08](https://github.com/SatvikMishra08)) - *(system)* Document error behaviour for `Dir.mkdir` and `.mkdir_p` ([#&#8203;17240], thanks [@&#8203;LaskaIDK](https://github.com/LaskaIDK)) [#&#8203;17131]: https://github.com/crystal-lang/crystal/pull/17131 [#&#8203;17238]: https://github.com/crystal-lang/crystal/pull/17238 [#&#8203;17240]: https://github.com/crystal-lang/crystal/pull/17240 [#&#8203;17423]: https://github.com/crystal-lang/crystal/pull/17423 [#&#8203;17451]: https://github.com/crystal-lang/crystal/pull/17451 [#&#8203;17459]: https://github.com/crystal-lang/crystal/pull/17459 [#&#8203;17556]: https://github.com/crystal-lang/crystal/pull/17556 ##### compiler - *(cli)* Fix short option order in docs help ([#&#8203;17129], thanks [@&#8203;kojix2](https://github.com/kojix2)) [#&#8203;17129]: https://github.com/crystal-lang/crystal/pull/17129 ##### other - Fix typos in doc comments ([#&#8203;17244], thanks [@&#8203;swsch](https://github.com/swsch)) [#&#8203;17244]: https://github.com/crystal-lang/crystal/pull/17244 ##### Specs ##### stdlib - *(networking)* Reorganize `HTTP::Request` spec ([#&#8203;17166], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Add more specs for `HTTP::Request` ([#&#8203;17218], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Assert return value of `Socket#sendfile` ([#&#8203;17292], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix: link-local zone interface fails with ENXIO on Solaris targets ([#&#8203;17371], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* Fix `getaddrinfo` with `AF_UNSPEC` failing with `EAI_ADDRFAMILY` on FreeBSD ([#&#8203;17358], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* Fix: loopback interface may not be the first interface ([#&#8203;17359], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* Fix: disable dual stack specs on FreeBSD and DragonFly ([#&#8203;17411], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* Add spec for explicit decompressing HTTP request body \[follow-up [#&#8203;17476](https://github.com/crystal-lang/crystal/issues/17476)] ([#&#8203;17531], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(numeric)* Add specs for `Big*` types compaing against float infinity ([#&#8203;17224], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(runtime)* Relax threshold for `sleep` spec with libevent ([#&#8203;17232], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Add `process-utils` for testing process execution ([#&#8203;17047], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Always ignore `%PROCESSOR_ARCHITECTURE%` when running `Process` specs on MSVC ([#&#8203;17362], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(system)* Add spec for `FileUtils.ln_sf` replacing a dangling symlink ([#&#8203;17289], thanks [@&#8203;SAY-5](https://github.com/SAY-5)) - *(text)* Improve specs for `Char::Reader` ([#&#8203;17354], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Add regression spec for multibyte `String#split` separator ([#&#8203;17338], thanks [@&#8203;wangyusheng1985](https://github.com/wangyusheng1985)) [#&#8203;17047]: https://github.com/crystal-lang/crystal/pull/17047 [#&#8203;17166]: https://github.com/crystal-lang/crystal/pull/17166 [#&#8203;17218]: https://github.com/crystal-lang/crystal/pull/17218 [#&#8203;17224]: https://github.com/crystal-lang/crystal/pull/17224 [#&#8203;17232]: https://github.com/crystal-lang/crystal/pull/17232 [#&#8203;17289]: https://github.com/crystal-lang/crystal/pull/17289 [#&#8203;17292]: https://github.com/crystal-lang/crystal/pull/17292 [#&#8203;17338]: https://github.com/crystal-lang/crystal/pull/17338 [#&#8203;17354]: https://github.com/crystal-lang/crystal/pull/17354 [#&#8203;17358]: https://github.com/crystal-lang/crystal/pull/17358 [#&#8203;17359]: https://github.com/crystal-lang/crystal/pull/17359 [#&#8203;17362]: https://github.com/crystal-lang/crystal/pull/17362 [#&#8203;17371]: https://github.com/crystal-lang/crystal/pull/17371 [#&#8203;17411]: https://github.com/crystal-lang/crystal/pull/17411 [#&#8203;17531]: https://github.com/crystal-lang/crystal/pull/17531 ##### compiler - Refactor `new_program` spec helper to concat program flags ([#&#8203;17356], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Remove obsolete `FIXME`s for array literal parsing ([#&#8203;17347], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17347]: https://github.com/crystal-lang/crystal/pull/17347 [#&#8203;17356]: https://github.com/crystal-lang/crystal/pull/17356 ##### Infrastructure - Update previous Crystal release 1.21.0 ([#&#8203;17137], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Makefile: Add `build` and `manpages` targets ([#&#8203;17142], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Makefile: Remove `all` target from help (alias for `crystal`) ([#&#8203;17157], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update `devenv.lock` ([#&#8203;17147], [#&#8203;17210], [#&#8203;17245], [#&#8203;17253], [#&#8203;17290], [#&#8203;17330], [#&#8203;17379], [#&#8203;17415], [#&#8203;17181], [#&#8203;17143], thanks [@&#8203;crysbot](https://github.com/crysbot)) - Enable FIXME rules in `rumdl.toml` configuration ([#&#8203;17171], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update distribution-scripts ([#&#8203;17178], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update `crystal` version in `shard.yml` ([#&#8203;17351], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - `bin/crystal`: Avoid symlinks in `CRYSTAL_PATH` ([#&#8203;17355], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Fix `update-changelog.sh` for patch releases ([#&#8203;17479], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Merge `release/1.21`@&#8203;`1.21.1` into `master` ([#&#8203;17526], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - devenv: Remove actionlint because it's broken ([#&#8203;17527], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - renovate: Add custom config for updating shards repo checkout (\[[#&#8203;17547](https://github.com/crystal-lang/crystal/issues/17547)], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Support ARM64 for the MSVC-based toolchain's GUI installer ([#&#8203;17398], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Fix Inno Setup download URL ([#&#8203;17135], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Update GH Actions ([#&#8203;17185], [#&#8203;17336], [#&#8203;17427], [#&#8203;17458], [#&#8203;17146], [#&#8203;17512], thanks [@&#8203;renovate](https://github.com/renovate)) - *(ci)* Update cachix/install-nix-action action to v31.11.1 ([#&#8203;17252], thanks [@&#8203;renovate](https://github.com/renovate)) - *(ci)* Upgrade runner to `windows-11-vs2026-arm` ([#&#8203;17267], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Limit `forward-compatibility` to last 8 releases ([#&#8203;17332], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Fix allow unsafe PR checkout in `backport` workflow ([#&#8203;17340], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Switch `uses:` in GHA workflows to self-repository syntax ([#&#8203;17513], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* run std specs on FreeBSD 14 ([#&#8203;17361], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(ci)* Run smoke tests on changes that affect codegen ([#&#8203;17545], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Use newer GitHub Action to set up MSVC developer command prompt ([#&#8203;17396], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Update MSVC CI library versions ([#&#8203;17301], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Use explicit development branch version number for LLVM CI ([#&#8203;17497], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Drop `macos-14` runner on GitHub CI ([#&#8203;17532], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Bootstrap ARM64 MSVC-based Crystal compiler ([#&#8203;17154], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Use clang-cl to build OpenSSL for ARM64 MSVC CI ([#&#8203;17251], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Build stage-2 compiler on ARM64 MSVC CI ([#&#8203;17363], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Use Cygwin to build libffi for MSVC CI ([#&#8203;17163], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Split MSVC CI third-party libraries onto own workflow ([#&#8203;17287], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(ci)* Set up NASM manually on MSVC CI ([#&#8203;17429], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) [#&#8203;17135]: https://github.com/crystal-lang/crystal/pull/17135 [#&#8203;17137]: https://github.com/crystal-lang/crystal/pull/17137 [#&#8203;17142]: https://github.com/crystal-lang/crystal/pull/17142 [#&#8203;17143]: https://github.com/crystal-lang/crystal/pull/17143 [#&#8203;17146]: https://github.com/crystal-lang/crystal/pull/17146 [#&#8203;17147]: https://github.com/crystal-lang/crystal/pull/17147 [#&#8203;17154]: https://github.com/crystal-lang/crystal/pull/17154 [#&#8203;17157]: https://github.com/crystal-lang/crystal/pull/17157 [#&#8203;17163]: https://github.com/crystal-lang/crystal/pull/17163 [#&#8203;17171]: https://github.com/crystal-lang/crystal/pull/17171 [#&#8203;17178]: https://github.com/crystal-lang/crystal/pull/17178 [#&#8203;17181]: https://github.com/crystal-lang/crystal/pull/17181 [#&#8203;17185]: https://github.com/crystal-lang/crystal/pull/17185 [#&#8203;17210]: https://github.com/crystal-lang/crystal/pull/17210 [#&#8203;17245]: https://github.com/crystal-lang/crystal/pull/17245 [#&#8203;17251]: https://github.com/crystal-lang/crystal/pull/17251 [#&#8203;17252]: https://github.com/crystal-lang/crystal/pull/17252 [#&#8203;17253]: https://github.com/crystal-lang/crystal/pull/17253 [#&#8203;17267]: https://github.com/crystal-lang/crystal/pull/17267 [#&#8203;17287]: https://github.com/crystal-lang/crystal/pull/17287 [#&#8203;17290]: https://github.com/crystal-lang/crystal/pull/17290 [#&#8203;17301]: https://github.com/crystal-lang/crystal/pull/17301 [#&#8203;17330]: https://github.com/crystal-lang/crystal/pull/17330 [#&#8203;17332]: https://github.com/crystal-lang/crystal/pull/17332 [#&#8203;17336]: https://github.com/crystal-lang/crystal/pull/17336 [#&#8203;17340]: https://github.com/crystal-lang/crystal/pull/17340 [#&#8203;17351]: https://github.com/crystal-lang/crystal/pull/17351 [#&#8203;17355]: https://github.com/crystal-lang/crystal/pull/17355 [#&#8203;17361]: https://github.com/crystal-lang/crystal/pull/17361 [#&#8203;17363]: https://github.com/crystal-lang/crystal/pull/17363 [#&#8203;17379]: https://github.com/crystal-lang/crystal/pull/17379 [#&#8203;17396]: https://github.com/crystal-lang/crystal/pull/17396 [#&#8203;17398]: https://github.com/crystal-lang/crystal/pull/17398 [#&#8203;17415]: https://github.com/crystal-lang/crystal/pull/17415 [#&#8203;17427]: https://github.com/crystal-lang/crystal/pull/17427 [#&#8203;17429]: https://github.com/crystal-lang/crystal/pull/17429 [#&#8203;17458]: https://github.com/crystal-lang/crystal/pull/17458 [#&#8203;17479]: https://github.com/crystal-lang/crystal/pull/17479 [#&#8203;17497]: https://github.com/crystal-lang/crystal/pull/17497 [#&#8203;17512]: https://github.com/crystal-lang/crystal/pull/17512 [#&#8203;17513]: https://github.com/crystal-lang/crystal/pull/17513 [#&#8203;17526]: https://github.com/crystal-lang/crystal/pull/17526 [#&#8203;17527]: https://github.com/crystal-lang/crystal/pull/17527 [#&#8203;17532]: https://github.com/crystal-lang/crystal/pull/17532 [#&#8203;17545]: https://github.com/crystal-lang/crystal/pull/17545 ### [`v1.21.1`](https://github.com/crystal-lang/crystal/releases/tag/1.21.1) [Compare Source](https://github.com/crystal-lang/crystal/compare/1.21.0...1.21.1) ##### Bugfixes ##### stdlib - *(collection)* **\[regression]** Override `Channel#tap(&)` to reinstate original behaviour ([#&#8203;17296], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* **\[security]** Fix `HTTP::Request::Processor` resuming connection on unconsumed request ([#&#8203;17434], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix non-blocking `Socket#connect` on Unix ([#&#8203;17436], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* **\[security]** Fix `HTTP::Server::RequestProcessor` to consume request body before upgrade ([#&#8203;17466], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* **\[security]** Fix do not automatically decompress HTTP request body ([#&#8203;17476], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(serialization)* Fix `XML::Node#namespace` for node types without namespace ([#&#8203;17435], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(serialization)* Fix `YAML::Any#hash` with self-referencing containers ([#&#8203;17477], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17296]: https://github.com/crystal-lang/crystal/pull/17296 [#&#8203;17434]: https://github.com/crystal-lang/crystal/pull/17434 [#&#8203;17435]: https://github.com/crystal-lang/crystal/pull/17435 [#&#8203;17436]: https://github.com/crystal-lang/crystal/pull/17436 [#&#8203;17466]: https://github.com/crystal-lang/crystal/pull/17466 [#&#8203;17476]: https://github.com/crystal-lang/crystal/pull/17476 [#&#8203;17477]: https://github.com/crystal-lang/crystal/pull/17477 ##### Infrastructure - Add changelog for 1.21.1 ([#&#8203;17478], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update distribution-scripts ([#&#8203;17480], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17478]: https://github.com/crystal-lang/crystal/pull/17478 [#&#8203;17480]: https://github.com/crystal-lang/crystal/pull/17480 ### [`v1.21.0`](https://github.com/crystal-lang/crystal/releases/tag/1.21.0) [Compare Source](https://github.com/crystal-lang/crystal/compare/1.20.3...1.21.0) ##### Breaking changes ##### stdlib - *(runtime)* Release: Execution Contexts ([#&#8203;17100], [#&#8203;17104], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(text)* Disable automatic fallback to legacy `PCRE` ([#&#8203;16924], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16924]: https://github.com/crystal-lang/crystal/pull/16924 [#&#8203;17100]: https://github.com/crystal-lang/crystal/pull/17100 [#&#8203;17104]: https://github.com/crystal-lang/crystal/pull/17104 ##### Features ##### lang - Add `%W` percent string array literals with interpolation ([#&#8203;16919], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(macros)* Add `TypeNode#all_methods` that includes the type's ancestor's methods ([#&#8203;16902], thanks [@&#8203;Blacksmoke16](https://github.com/Blacksmoke16)) [#&#8203;16902]: https://github.com/crystal-lang/crystal/pull/16902 [#&#8203;16919]: https://github.com/crystal-lang/crystal/pull/16919 ##### stdlib - *(cli)* Align long-only options in OptionParser help ([#&#8203;16914], thanks [@&#8203;kojix2](https://github.com/kojix2)) - *(collection)* Make `Channel(T)` an `Iterator(T)` ([#&#8203;16916], thanks [@&#8203;jgaskins](https://github.com/jgaskins)) - *(crypto)* Add support for OpenSSL 4.0 ([#&#8203;16839], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(crypto)* Support OpenSSL 4.x DLLs on Windows MSVC ([#&#8203;17116], thanks [@&#8203;HertzDevil](https://github.com/HertzDevil)) - *(networking)* **\[experimental]** Add `Socket#sendfile` (and `Crystal::EventLoop::Socket#sendfile`) ([#&#8203;16665], [#&#8203;17133], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden), [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Add `HTTP::WebSocket#receive` as a synchronous call ([#&#8203;16689], thanks [@&#8203;jgaskins](https://github.com/jgaskins)) - *(runtime)* Add `Crystal::EventLoop::FileDescriptor#pread` ([#&#8203;17068], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Add `without_main` flag ([#&#8203;17074], thanks [@&#8203;kojix2](https://github.com/kojix2)) - *(runtime)* OpenBSD: use kqueue event loop by default ([#&#8203;17123], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(serialization)* Support nested `root` properties in `JSON::Field` ([#&#8203;17016], thanks [@&#8203;tcoatswo](https://github.com/tcoatswo)) - *(serialization)* Add `URI::Params::Field(ignore:)`, `ignore_serialize`, `ignore_deserialize` ([#&#8203;17029], thanks [@&#8203;trypsynth](https://github.com/trypsynth)) - *(specs)* Allow chaining `#should`, `#should_not` expectations ([#&#8203;17020], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Expose `Path#kind` ([#&#8203;16917], thanks [@&#8203;Sija](https://github.com/Sija)) - *(system)* Add splat overloads for `Process.capture`, `.run` and `.new` ([#&#8203;16975], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Add `Process::Status.[]` constructor ([#&#8203;17003], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Add `String#present?` ([#&#8203;16930], thanks [@&#8203;Sija](https://github.com/Sija)) - *(text)* Add `UUID.v6` and `.v8` generators ([#&#8203;17010], thanks [@&#8203;trypsynth](https://github.com/trypsynth)) [#&#8203;16665]: https://github.com/crystal-lang/crystal/pull/16665 [#&#8203;16689]: https://github.com/crystal-lang/crystal/pull/16689 [#&#8203;16839]: https://github.com/crystal-lang/crystal/pull/16839 [#&#8203;16914]: https://github.com/crystal-lang/crystal/pull/16914 [#&#8203;16916]: https://github.com/crystal-lang/crystal/pull/16916 [#&#8203;16917]: https://github.com/crystal-lang/crystal/pull/16917 [#&#8203;16930]: https://github.com/crystal-lang/crystal/pull/16930 [#&#8203;16975]: https://github.com/crystal-lang/crystal/pull/16975 [#&#8203;17003]: https://github.com/crystal-lang/crystal/pull/17003 [#&#8203;17010]: https://github.com/crystal-lang/crystal/pull/17010 [#&#8203;17016]: https://github.com/crystal-lang/crystal/pull/17016 [#&#8203;17020]: https://github.com/crystal-lang/crystal/pull/17020 [#&#8203;17029]: https://github.com/crystal-lang/crystal/pull/17029 [#&#8203;17068]: https://github.com/crystal-lang/crystal/pull/17068 [#&#8203;17074]: https://github.com/crystal-lang/crystal/pull/17074 [#&#8203;17116]: https://github.com/crystal-lang/crystal/pull/17116 [#&#8203;17123]: https://github.com/crystal-lang/crystal/pull/17123 [#&#8203;17133]: https://github.com/crystal-lang/crystal/pull/17133 ##### compiler - *(cli)* Classify compiler exit reasons ([#&#8203;17028], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(debugger)* Improve proc debug metadata ([#&#8203;16830], thanks [@&#8203;skuznetsov](https://github.com/skuznetsov)) - *(debugger)* Emit debug metadata for constants and class vars ([#&#8203;16831], thanks [@&#8203;skuznetsov](https://github.com/skuznetsov)) - *(debugger)* Improve LLDB collection formatters ([#&#8203;16832], thanks [@&#8203;skuznetsov](https://github.com/skuznetsov)) - *(parser)* Add `ASTNode#inspect` ([#&#8203;16699], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Parse `MacroVar` with empty expressions: `%var{}` ([#&#8203;16772], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(semantic)* Split branches on `when Bar, Baz` ([#&#8203;17072], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16699]: https://github.com/crystal-lang/crystal/pull/16699 [#&#8203;16772]: https://github.com/crystal-lang/crystal/pull/16772 [#&#8203;16830]: https://github.com/crystal-lang/crystal/pull/16830 [#&#8203;16831]: https://github.com/crystal-lang/crystal/pull/16831 [#&#8203;16832]: https://github.com/crystal-lang/crystal/pull/16832 [#&#8203;17028]: https://github.com/crystal-lang/crystal/pull/17028 [#&#8203;17072]: https://github.com/crystal-lang/crystal/pull/17072 ##### tools - *(docs-generator)* Improve wording in warning about doc generator without LibXML2 ([#&#8203;16926], thanks [@&#8203;kojix2](https://github.com/kojix2)) [#&#8203;16926]: https://github.com/crystal-lang/crystal/pull/16926 ##### Bugfixes ##### stdlib - *(cli)* Fix summary wrapping condition in OptionParser ([#&#8203;16915], thanks [@&#8203;kojix2](https://github.com/kojix2)) - *(cli)* Avoid `Process.exec` on Windows and explicitly spawn subprocess ([#&#8203;17049], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(collection)* Fix `Iterator#compact_map` with `EmptyIterator` ([#&#8203;16928], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(collection)* Fix `Iterator#compact_map` with non-nilable compactor proc ([#&#8203;16927], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(concurrency)* Fix swapped atomic orderings in `Sync::MU` fast paths ([#&#8203;17063], thanks [@&#8203;stevegeek](https://github.com/stevegeek)) - *(llvm)* Fix use line 0 for unknown debug location ([#&#8203;17013], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `HTTP::Request.form_params?` to recognize `Content-Type` and `charset` ([#&#8203;16934], [#&#8203;16971], thanks [@&#8203;swsch](https://github.com/swsch), [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Fix `HTTP::Client` to retry for connection recovery only ([#&#8203;16981], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(networking)* Disable transport read-ahead for Kernel TLS sockets ([#&#8203;17053], thanks [@&#8203;jage](https://github.com/jage)) - *(runtime)* `Fiber::ExecutionContext::Monitor` compat with old Crystal releases ([#&#8203;17007], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* `EventLoop::IoUring#open` musn't set `O_NONBLOCK` when blocking ([#&#8203;17035], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* underperforming unlock conditions in `Sync::MU` ([#&#8203;17070], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* `fdlock#try_close?` must release ref after yielding to the block ([#&#8203;17089], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* `Fiber::ExecutionContext.current?` ([#&#8203;17092], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Refactor Win32 iocp evloop ([#&#8203;17101], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(serialization)* memory leak in `XML::Node#each_namespace` ([#&#8203;17038], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(system)* skip Windows registry MIME entries with an invalid Content Type ([#&#8203;17106], thanks [@&#8203;SAY-5](https://github.com/SAY-5)) - *(text)* Fix `IO::Encoder#write` when operating on long strings ([#&#8203;16797], thanks [@&#8203;jgaskins](https://github.com/jgaskins)) [#&#8203;16797]: https://github.com/crystal-lang/crystal/pull/16797 [#&#8203;16915]: https://github.com/crystal-lang/crystal/pull/16915 [#&#8203;16927]: https://github.com/crystal-lang/crystal/pull/16927 [#&#8203;16928]: https://github.com/crystal-lang/crystal/pull/16928 [#&#8203;16934]: https://github.com/crystal-lang/crystal/pull/16934 [#&#8203;16971]: https://github.com/crystal-lang/crystal/pull/16971 [#&#8203;16981]: https://github.com/crystal-lang/crystal/pull/16981 [#&#8203;17007]: https://github.com/crystal-lang/crystal/pull/17007 [#&#8203;17013]: https://github.com/crystal-lang/crystal/pull/17013 [#&#8203;17035]: https://github.com/crystal-lang/crystal/pull/17035 [#&#8203;17038]: https://github.com/crystal-lang/crystal/pull/17038 [#&#8203;17049]: https://github.com/crystal-lang/crystal/pull/17049 [#&#8203;17053]: https://github.com/crystal-lang/crystal/pull/17053 [#&#8203;17063]: https://github.com/crystal-lang/crystal/pull/17063 [#&#8203;17070]: https://github.com/crystal-lang/crystal/pull/17070 [#&#8203;17089]: https://github.com/crystal-lang/crystal/pull/17089 [#&#8203;17092]: https://github.com/crystal-lang/crystal/pull/17092 [#&#8203;17101]: https://github.com/crystal-lang/crystal/pull/17101 [#&#8203;17106]: https://github.com/crystal-lang/crystal/pull/17106 ##### compiler - *(cli)* Remedy short-flag conflict for `crystal spec -p` ([#&#8203;17062], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(codegen)* Fix codegen treating distinct lib `type` aliases as the same type ([#&#8203;16961], thanks [@&#8203;stakach](https://github.com/stakach)) - *(interpreter)* Add interpreter `upcast_distinct` for `Pointer` to `Pointer` ([#&#8203;16962], thanks [@&#8203;stakach](https://github.com/stakach)) - *(interpreter:repl)* Fix auto-indentation in the REPL when typing classes. ([#&#8203;16910], thanks [@&#8203;I3oris](https://github.com/I3oris)) - *(interpreter:repl)* Fix interpreter multidispatch cache collision ([#&#8203;16958], thanks [@&#8203;stakach](https://github.com/stakach)) - *(parser)* Fix lexing `MacroVar` syntax in literal ([#&#8203;16779], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Fix parsing macro var without exps followed by macro expression ([#&#8203;16879], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Fix parse parenthesized expression in block arg assignment ([#&#8203;16894], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Do not merge nested `Expression` and `ExceptionHandler` ([#&#8203;16852], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Fix parser silently ignoring `&(...)`, `&[...]`, `&{...}` in assignment ([#&#8203;16960], thanks [@&#8203;stakach](https://github.com/stakach)) - *(parser)* Fix parser allow `/` and `//` immediately after `self`, `nil`, `true`, `false` ([#&#8203;16942], thanks [@&#8203;stakach](https://github.com/stakach)) - *(parser)* Fix short block setter call end location ([#&#8203;17039], thanks [@&#8203;Sija](https://github.com/Sija)) - *(semantic)* Fix freeze type of variable declared with `out` ([#&#8203;16870], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(semantic)* Fix `lookup_matches_in_type` to reject partial matches ([#&#8203;16867], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(semantic)* Fix location of double splat named tuple typenode entry locations ([#&#8203;16889], thanks [@&#8203;Blacksmoke16](https://github.com/Blacksmoke16)) - *(semantic)* Fix `sizeof`, `offsetof` as generic type argument in inferred ivar type ([#&#8203;16811], thanks [@&#8203;kojix2](https://github.com/kojix2)) - *(semantic)* Fix macro argument errors for path receiver calls ([#&#8203;16923], thanks [@&#8203;kojix2](https://github.com/kojix2)) - *(semantic)* Detect uninitialized ancestor ivars through macro_def initializers ([#&#8203;16959], thanks [@&#8203;stakach](https://github.com/stakach)) - *(semantic)* Preserve `nil_if_read?` across while cond filters ([#&#8203;16963], thanks [@&#8203;stakach](https://github.com/stakach)) - *(semantic)* Keep wider subclass observer when call owner narrows ([#&#8203;16947](https://github.com/crystal-lang/crystal/issues/16947)) ([#&#8203;16990], thanks [@&#8203;stakach](https://github.com/stakach)) - *(semantic)* Symmetric `common_descendent` for two generic class types ([#&#8203;10831](https://github.com/crystal-lang/crystal/issues/10831)) ([#&#8203;16999], thanks [@&#8203;stakach](https://github.com/stakach)) [#&#8203;16779]: https://github.com/crystal-lang/crystal/pull/16779 [#&#8203;16811]: https://github.com/crystal-lang/crystal/pull/16811 [#&#8203;16852]: https://github.com/crystal-lang/crystal/pull/16852 [#&#8203;16867]: https://github.com/crystal-lang/crystal/pull/16867 [#&#8203;16870]: https://github.com/crystal-lang/crystal/pull/16870 [#&#8203;16879]: https://github.com/crystal-lang/crystal/pull/16879 [#&#8203;16889]: https://github.com/crystal-lang/crystal/pull/16889 [#&#8203;16894]: https://github.com/crystal-lang/crystal/pull/16894 [#&#8203;16910]: https://github.com/crystal-lang/crystal/pull/16910 [#&#8203;16923]: https://github.com/crystal-lang/crystal/pull/16923 [#&#8203;16942]: https://github.com/crystal-lang/crystal/pull/16942 [#&#8203;16958]: https://github.com/crystal-lang/crystal/pull/16958 [#&#8203;16959]: https://github.com/crystal-lang/crystal/pull/16959 [#&#8203;16960]: https://github.com/crystal-lang/crystal/pull/16960 [#&#8203;16961]: https://github.com/crystal-lang/crystal/pull/16961 [#&#8203;16962]: https://github.com/crystal-lang/crystal/pull/16962 [#&#8203;16963]: https://github.com/crystal-lang/crystal/pull/16963 [#&#8203;16990]: https://github.com/crystal-lang/crystal/pull/16990 [#&#8203;16999]: https://github.com/crystal-lang/crystal/pull/16999 [#&#8203;17039]: https://github.com/crystal-lang/crystal/pull/17039 [#&#8203;17062]: https://github.com/crystal-lang/crystal/pull/17062 ##### tools - *(formatter)* Fix format empty `then` with trailing comment ([#&#8203;16878], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(formatter)* Fix formatting whitespace in ternary `if` with trailing comments ([#&#8203;16880], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(formatter)* Fix formatter on empty string literal continuation ([#&#8203;16817], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(formatter)* Fix format annotations of splat parameter ([#&#8203;16987], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(formatter)* Fix formatter strip empty lines in heredoc ([#&#8203;17034], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16817]: https://github.com/crystal-lang/crystal/pull/16817 [#&#8203;16878]: https://github.com/crystal-lang/crystal/pull/16878 [#&#8203;16880]: https://github.com/crystal-lang/crystal/pull/16880 [#&#8203;16987]: https://github.com/crystal-lang/crystal/pull/16987 [#&#8203;17034]: https://github.com/crystal-lang/crystal/pull/17034 ##### Chores ##### stdlib - *(cli)* **\[deprecation]** Deprecate `Colorize.on_tty_only!` ([#&#8203;16859], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(concurrency)* **\[deprecation]** Deprecate `spawn(same_thread:)` ([#&#8203;17097], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(files)* **\[deprecation]** Rename parameter to `writable` in `IO::Memory.new` ([#&#8203;16858], [#&#8203;16883], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* **\[deprecation]** Hide platform-specific `Process::Status` constructor ([#&#8203;16997], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16858]: https://github.com/crystal-lang/crystal/pull/16858 [#&#8203;16859]: https://github.com/crystal-lang/crystal/pull/16859 [#&#8203;16883]: https://github.com/crystal-lang/crystal/pull/16883 [#&#8203;16997]: https://github.com/crystal-lang/crystal/pull/16997 [#&#8203;17097]: https://github.com/crystal-lang/crystal/pull/17097 ##### Performance ##### stdlib - *(collection)* Preallocate correct size for hash in `Hash.zip` ([#&#8203;17054], thanks [@&#8203;carlhoerberg](https://github.com/carlhoerberg)) [#&#8203;17054]: https://github.com/crystal-lang/crystal/pull/17054 ##### Refactor ##### stdlib - *(cli)* Split error helper for compiler CLI into independent methods ([#&#8203;16984], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(cli)* Refactor compiler code to raise `CompilerError` instead of `abort` ([#&#8203;16995], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(concurrency)* simplify read console (windows) ([#&#8203;17098], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(concurrency)* `Process#wait` on Windows ([#&#8203;17099], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* Refactor bubbling exceptions from user code in `HTTP::Client#exec(&)` ([#&#8203;16969], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(runtime)* Internalize `IO::Evented` into `Crystal::EventLoop::Wasi` ([#&#8203;17030], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Fix: thread safety of the libevent event loop ([#&#8203;17031], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Drop unused `IO::Evented` and `Crystal::ThreadLocalValue` ([#&#8203;17032], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* Consolidate `#overlapped_connect` and `#overlapped_accept` into `EventLoop::IOCP` ([#&#8203;17090], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(runtime)* OpenBSD now supports EVFILT_USER ([#&#8203;17121], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(system)* Refactor `Dir::Globber` to a struct with instance methods ([#&#8203;16899], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* Refactor internal `Process` constructor to receive `Crystal::System::Process` ([#&#8203;16933], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(system)* dont parse but mmap ELF, Mach-O, PE files and some DWARF sections ([#&#8203;16939], [#&#8203;17134], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) [#&#8203;16899]: https://github.com/crystal-lang/crystal/pull/16899 [#&#8203;16933]: https://github.com/crystal-lang/crystal/pull/16933 [#&#8203;16939]: https://github.com/crystal-lang/crystal/pull/16939 [#&#8203;16969]: https://github.com/crystal-lang/crystal/pull/16969 [#&#8203;16984]: https://github.com/crystal-lang/crystal/pull/16984 [#&#8203;16995]: https://github.com/crystal-lang/crystal/pull/16995 [#&#8203;17030]: https://github.com/crystal-lang/crystal/pull/17030 [#&#8203;17031]: https://github.com/crystal-lang/crystal/pull/17031 [#&#8203;17032]: https://github.com/crystal-lang/crystal/pull/17032 [#&#8203;17090]: https://github.com/crystal-lang/crystal/pull/17090 [#&#8203;17098]: https://github.com/crystal-lang/crystal/pull/17098 [#&#8203;17099]: https://github.com/crystal-lang/crystal/pull/17099 [#&#8203;17121]: https://github.com/crystal-lang/crystal/pull/17121 [#&#8203;17134]: https://github.com/crystal-lang/crystal/pull/17134 ##### compiler - Replace backticks with `Process.capture` ([#&#8203;17012], [#&#8203;17122], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota), [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(codegen)* Set `optsize` and `minsize` fun attributes for the `-Os` and `-Oz` optimization modes ([#&#8203;16983], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(parser)* Parse parens in type grammar into `Union#parens` ([#&#8203;16744], [#&#8203;16908], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Refactor whitespace branch in `Lexer#next_macro_token` \[follow-up [#&#8203;16771](https://github.com/crystal-lang/crystal/issues/16771)] ([#&#8203;16776], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(parser)* Refactor formatter, remove internal `delimited_pair(advance)` ([#&#8203;17023], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16744]: https://github.com/crystal-lang/crystal/pull/16744 [#&#8203;16776]: https://github.com/crystal-lang/crystal/pull/16776 [#&#8203;16908]: https://github.com/crystal-lang/crystal/pull/16908 [#&#8203;16983]: https://github.com/crystal-lang/crystal/pull/16983 [#&#8203;17012]: https://github.com/crystal-lang/crystal/pull/17012 [#&#8203;17023]: https://github.com/crystal-lang/crystal/pull/17023 [#&#8203;17122]: https://github.com/crystal-lang/crystal/pull/17122 ##### tools - *(formatter)* **\[breaking]** Standardize parsing of symbol and string array literals ([#&#8203;16748], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(formatter)* Drop `format_binary` parameter `alternative` ([#&#8203;16912], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16748]: https://github.com/crystal-lang/crystal/pull/16748 [#&#8203;16912]: https://github.com/crystal-lang/crystal/pull/16912 ##### other - Fix violations reported by ameba 1.7 ([#&#8203;17021], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;17021]: https://github.com/crystal-lang/crystal/pull/17021 ##### Documentation ##### stdlib - *(cli)* Add missing_option to OptionParser example ([#&#8203;17112], thanks [@&#8203;LaskaIDK](https://github.com/LaskaIDK)) - *(macros)* Improve docs for `::delegate` ([#&#8203;16854], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Document null-termination on `String#to_unsafe` ([#&#8203;16869], thanks [@&#8203;mvanhorn](https://github.com/mvanhorn)) - *(text)* Document `String` is not inheritable ([#&#8203;17000], thanks [@&#8203;LaskaIDK](https://github.com/LaskaIDK)) [#&#8203;16854]: https://github.com/crystal-lang/crystal/pull/16854 [#&#8203;16869]: https://github.com/crystal-lang/crystal/pull/16869 [#&#8203;17000]: https://github.com/crystal-lang/crystal/pull/17000 [#&#8203;17112]: https://github.com/crystal-lang/crystal/pull/17112 ##### other - Fix typo `writable` in documentation ([#&#8203;16848], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Format asciidoc ([#&#8203;16992], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - rumdl: Fix MD077: Continuation line over-indented ([#&#8203;17085], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16848]: https://github.com/crystal-lang/crystal/pull/16848 [#&#8203;16992]: https://github.com/crystal-lang/crystal/pull/16992 [#&#8203;17085]: https://github.com/crystal-lang/crystal/pull/17085 ##### Specs ##### stdlib - *(cli)* Refactor `run_git` spec helper to use `Process.capture_result?` ([#&#8203;17079], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(collection)* Add specs for `Iterator.empty` ([#&#8203;17014], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(concurrency)* Fix: Crystal 1.0.0 is confused by file private types ([#&#8203;17067], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - *(networking)* Extract spec helpers `close_connection` and `client_for` for HTTP client specs ([#&#8203;16968], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(text)* Add specs for range accessor with open ended exclusive range ([#&#8203;16849], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16849]: https://github.com/crystal-lang/crystal/pull/16849 [#&#8203;16968]: https://github.com/crystal-lang/crystal/pull/16968 [#&#8203;17014]: https://github.com/crystal-lang/crystal/pull/17014 [#&#8203;17067]: https://github.com/crystal-lang/crystal/pull/17067 [#&#8203;17079]: https://github.com/crystal-lang/crystal/pull/17079 ##### compiler - *(cli)* Add `compiler-cli` test suite ([#&#8203;17033], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(debugger)* Fix `lldb-check` expectations in debug tests for compatibility with modern LLDB ([#&#8203;16860], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16860]: https://github.com/crystal-lang/crystal/pull/16860 [#&#8203;17033]: https://github.com/crystal-lang/crystal/pull/17033 ##### other - Remove unnecessary `not_nil!` in spec suite ([#&#8203;16865], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Replace `not_nil!` with `should_not(be_nil)` in spec suite ([#&#8203;16906], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) [#&#8203;16865]: https://github.com/crystal-lang/crystal/pull/16865 [#&#8203;16906]: https://github.com/crystal-lang/crystal/pull/16906 ##### Infrastructure - Changelog for 1.21.0 ([#&#8203;17095], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update previous Crystal release 1.20.0 ([#&#8203;16844], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) - Update previous Crystal release 1.20.1 ([#&#8203;16901], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Merge `release/1.19`@&#8203;`1.19.2` into `master` ([#&#8203;16905], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Merge `release/1.20`@&#8203;`1.20.1` into `master` ([#&#8203;16900], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update `devenv.lock` ([#&#8203;16819], [#&#8203;16935], [#&#8203;17006], [#&#8203;17075], [#&#8203;17084], thanks [@&#8203;github-actions](https://github.com/github-actions), [@&#8203;crysbot](https://github.com/crysbot)) - Update changelog script ([#&#8203;16946], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Extract `CRYSTAL_BOOTSTRAP_VERSION` in `bin/ci` ([#&#8203;16966], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update previous Crystal release 1.20.2 ([#&#8203;16954], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Makefile: Split `install` target into subcomponents ([#&#8203;16980], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Update `release-update` script ([#&#8203;16977], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Makefile: Build manpages for `install` target ([#&#8203;16991], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Apply `shfmt` ([#&#8203;17015], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Apply `mbake` formatter for `Makefile` ([#&#8203;17024], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - infra: devenv input for `git-hooks` follows `nixpkgs` ([#&#8203;17064], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Replace `markdownlint` with `rumdl` ([#&#8203;17069], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - Replace `.markdownlint.yaml` with `rumdl.toml` ([#&#8203;17078], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Fix `-Devloop=io_uring` flag in Linux CI ([#&#8203;16843], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Use PAT from GHA environments for `backport` job ([#&#8203;16864], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Use AWS credentials from GHA environments for `deploy_api_docs` job ([#&#8203;16863], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Update GH Actions ([#&#8203;16836], [#&#8203;16944], [#&#8203;17011], [#&#8203;17042], \[[#&#8203;17117](https://github.com/crystal-lang/crystal/issues/17117)], thanks [@&#8203;renovate](https://github.com/renovate)) - *(ci)* Use Crysbot token in `update-devenv` workflow to trigger CI ([#&#8203;16938], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Fix tags for nightly docker images ([#&#8203;16973], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Drop separate `aarch64` workflow ([#&#8203;16965], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Update crate-ci/typos action to v1.46.2 ([#&#8203;16986], thanks [@&#8203;renovate](https://github.com/renovate)) - *(ci)* Update `macos-15` runners to `macos-26` ([#&#8203;17022], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Upgrade library dependencies for Windows CI ([#&#8203;17025], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Upgrade windows runners to VS 2026 ([#&#8203;17043], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Upgrade nixpkgs 26.05 in `Lint` workflow ([#&#8203;17066], thanks [@&#8203;straight-shoota](https://github.com/straight-shoota)) - *(ci)* Update previous Crystal release 1.20.3 ([#&#8203;17114], thanks [@&#8203;ysbaddaden](https://github.com/ysbaddaden)) [#&#8203;16819]: https://github.com/crystal-lang/crystal/pull/16819 [#&#8203;16836]: https://github.com/crystal-lang/crystal/pull/16836 [#&#8203;16843]: https://github.com/crystal-lang/crystal/pull/16843 [#&#8203;16844]: https://github.com/crystal-lang/crystal/pull/16844 [#&#8203;16863]: https://github.com/crystal-lang/crystal/pull/16863 [#&#8203;16864]: https://github.com/crystal-lang/crystal/pull/16864 [#&#8203;16900]: https://github.com/crystal-lang/crystal/pull/16900 [#&#8203;16901]: https://github.com/crystal-lang/crystal/pull/16901 [#&#8203;16905]: https://github.com/crystal-lang/crystal/pull/16905 [#&#8203;16935]: https://github.com/crystal-lang/crystal/pull/16935 [#&#8203;16938]: https://github.com/crystal-lang/crystal/pull/16938 [#&#8203;16944]: https://github.com/crystal-lang/crystal/pull/16944 [#&#8203;16946]: https://github.com/crystal-lang/crystal/pull/16946 [#&#8203;16954]: https://github.com/crystal-lang/crystal/pull/16954 [#&#8203;16965]: https://github.com/crystal-lang/crystal/pull/16965 [#&#8203;16966]: https://github.com/crystal-lang/crystal/pull/16966 [#&#8203;16973]: https://github.com/crystal-lang/crystal/pull/16973 [#&#8203;16977]: https://github.com/crystal-lang/crystal/pull/16977 [#&#8203;16980]: https://github.com/crystal-lang/crystal/pull/16980 [#&#8203;16986]: https://github.com/crystal-lang/crystal/pull/16986 [#&#8203;16991]: https://github.com/crystal-lang/crystal/pull/16991 [#&#8203;17006]: https://github.com/crystal-lang/crystal/pull/17006 [#&#8203;17011]: https://github.com/crystal-lang/crystal/pull/17011 [#&#8203;17015]: https://github.com/crystal-lang/crystal/pull/17015 [#&#8203;17022]: https://github.com/crystal-lang/crystal/pull/17022 [#&#8203;17024]: https://github.com/crystal-lang/crystal/pull/17024 [#&#8203;17025]: https://github.com/crystal-lang/crystal/pull/17025 [#&#8203;17042]: https://github.com/crystal-lang/crystal/pull/17042 [#&#8203;17043]: https://github.com/crystal-lang/crystal/pull/17043 [#&#8203;17064]: https://github.com/crystal-lang/crystal/pull/17064 [#&#8203;17066]: https://github.com/crystal-lang/crystal/pull/17066 [#&#8203;17069]: https://github.com/crystal-lang/crystal/pull/17069 [#&#8203;17075]: https://github.com/crystal-lang/crystal/pull/17075 [#&#8203;17078]: https://github.com/crystal-lang/crystal/pull/17078 [#&#8203;17084]: https://github.com/crystal-lang/crystal/pull/17084 [#&#8203;17095]: https://github.com/crystal-lang/crystal/pull/17095 [#&#8203;17114]: https://github.com/crystal-lang/crystal/pull/17114 </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC45My4yIiwidXBkYXRlZEluVmVyIjoiNDQuMTUxLjQiLCJ0YXJnZXRCcmFuY2giOiJtYXN0ZXIiLCJsYWJlbHMiOltdfQ==-->
renovate-bot force-pushed renovate/crystal-lang-crystal-1.x from 2bdfac5fd0 to 0bcf7644d8 2026-09-26 09:22:02 -03:00 Compare
renovate-bot changed title from Update dependency crystal-lang/crystal to v1.21.0 to Update dependency crystal-lang/crystal to v1.21.1 2026-09-26 09:22:03 -03:00
renovate-bot force-pushed renovate/crystal-lang-crystal-1.x from 0bcf7644d8 to 246feec72d 2026-09-27 09:14:25 -03:00 Compare
renovate-bot changed title from Update dependency crystal-lang/crystal to v1.21.1 to chore(deps): update dependency crystal-lang/crystal to v1.21.1 2026-10-04 03:01:23 -03:00
renovate-bot changed title from chore(deps): update dependency crystal-lang/crystal to v1.21.1 to chore(deps): update dependency crystal-lang/crystal to v1.22.0 2026-10-12 11:21:32 -03:00
renovate-bot force-pushed renovate/crystal-lang-crystal-1.x from 246feec72d to 2ae44132be 2026-10-12 11:21:33 -03:00 Compare
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/crystal-lang-crystal-1.x:renovate/crystal-lang-crystal-1.x
git switch renovate/crystal-lang-crystal-1.x

Merge

Merge the changes and update on Forgejo.
git switch master
git merge --no-ff renovate/crystal-lang-crystal-1.x
git switch renovate/crystal-lang-crystal-1.x
git rebase master
git switch master
git merge --ff-only renovate/crystal-lang-crystal-1.x
git switch renovate/crystal-lang-crystal-1.x
git rebase master
git switch master
git merge --no-ff renovate/crystal-lang-crystal-1.x
git switch master
git merge --squash renovate/crystal-lang-crystal-1.x
git switch master
git merge --ff-only renovate/crystal-lang-crystal-1.x
git switch master
git merge renovate/crystal-lang-crystal-1.x
git push origin master
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Fijxu/invidious!421
No description provided.