diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b9a1e379d45..452c53e1a213 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,44 +13,59 @@ - *(concurrency)* Implement the ARM64 Windows context switch ([#15155], thanks @HertzDevil) - *(concurrency)* Add optional `name` parameter forward to `WaitGroup#spawn` ([#15189], thanks @spuun) - *(crypto)* Enable bindings for functions in LibreSSL ([#15177], thanks @straight-shoota) -- *(networking)* Add `Socket::Address.from` without `addrlen` ([#15060], thanks @mamantoha) +- *(log)* Add `Log` overloads for logging exceptions without giving a block ([#15257], thanks @lachlan) - *(networking)* Better handle explicit chunked encoding responses ([#15092], thanks @Blacksmoke16) - *(networking)* Support OpenSSL on MSYS2 ([#15111], thanks @HertzDevil) +- *(networking)* Add `Socket::Address.from` without `addrlen` ([#15060], thanks @mamantoha) +- *(networking)* Add stringification for `HTTP::Cookie` ([#15240], thanks @straight-shoota) +- *(networking)* Add stringification for `HTTP::Cookies` ([#15246], thanks @straight-shoota) - *(runtime)* Support call stacks for MinGW-w64 builds ([#15117], thanks @HertzDevil) - *(runtime)* Support MSYS2's CLANGARM64 environment on ARM64 Windows ([#15159], thanks @HertzDevil) -- *(text)* Add `unit_separator` to `#humanize` and `#humanize_bytes` ([#15176], thanks @CTC97) +- *(system)* Add `Process::Status#exit_code?` ([#15247], thanks @straight-shoota) +- *(system)* Add `Process::Status#abnormal_exit?` ([#15266], thanks @straight-shoota) - *(text)* Add `Regex::CompileOptions::MULTILINE_ONLY` ([#14870], thanks @ralsina) - *(text)* Add type restrictions to Levenshtein ([#15168], thanks @beta-ziliani) +- *(text)* Add `unit_separator` to `Int#humanize` and `#humanize_bytes` ([#15176], thanks @CTC97) +- *(text)* Add `String#byte_index(Regex)` ([#15248], thanks @Zeljko-Predjeskovic) [#15039]: https://github.com/crystal-lang/crystal/pull/15039 [#14893]: https://github.com/crystal-lang/crystal/pull/14893 [#15155]: https://github.com/crystal-lang/crystal/pull/15155 [#15189]: https://github.com/crystal-lang/crystal/pull/15189 [#15177]: https://github.com/crystal-lang/crystal/pull/15177 -[#15060]: https://github.com/crystal-lang/crystal/pull/15060 +[#15257]: https://github.com/crystal-lang/crystal/pull/15257 [#15092]: https://github.com/crystal-lang/crystal/pull/15092 [#15111]: https://github.com/crystal-lang/crystal/pull/15111 +[#15060]: https://github.com/crystal-lang/crystal/pull/15060 +[#15240]: https://github.com/crystal-lang/crystal/pull/15240 +[#15246]: https://github.com/crystal-lang/crystal/pull/15246 [#15117]: https://github.com/crystal-lang/crystal/pull/15117 [#15159]: https://github.com/crystal-lang/crystal/pull/15159 -[#15176]: https://github.com/crystal-lang/crystal/pull/15176 +[#15247]: https://github.com/crystal-lang/crystal/pull/15247 +[#15266]: https://github.com/crystal-lang/crystal/pull/15266 [#14870]: https://github.com/crystal-lang/crystal/pull/14870 [#15168]: https://github.com/crystal-lang/crystal/pull/15168 +[#15176]: https://github.com/crystal-lang/crystal/pull/15176 +[#15248]: https://github.com/crystal-lang/crystal/pull/15248 #### compiler -- Basic MinGW-w64 cross-compilation support ([#15070], thanks @HertzDevil) +- Basic MinGW-w64 cross-compilation support ([#15070], [#15219], thanks @HertzDevil, @BlobCodes) - *(cli)* Support building from a MinGW-w64-based compiler ([#15077], thanks @HertzDevil) - *(codegen)* Add indirect branch tracking ([#15122], thanks @ysbaddaden) - *(interpreter)* Support "long format" DLL import libraries ([#15119], thanks @HertzDevil) - *(interpreter)* Add `cc`'s search paths to Unix dynamic library loader ([#15127], thanks @HertzDevil) - *(interpreter)* Basic MinGW-w64-based interpreter support ([#15140], thanks @HertzDevil) +- *(parser)* Allow constants to start with non-ascii uppercase and titlecase ([#15148], thanks @nanobowers) [#15070]: https://github.com/crystal-lang/crystal/pull/15070 +[#15219]: https://github.com/crystal-lang/crystal/pull/15219 [#15077]: https://github.com/crystal-lang/crystal/pull/15077 [#15122]: https://github.com/crystal-lang/crystal/pull/15122 [#15119]: https://github.com/crystal-lang/crystal/pull/15119 [#15127]: https://github.com/crystal-lang/crystal/pull/15127 [#15140]: https://github.com/crystal-lang/crystal/pull/15140 +[#15148]: https://github.com/crystal-lang/crystal/pull/15148 #### tools @@ -74,6 +89,7 @@ - *(files)* Treat `WinError::ERROR_DIRECTORY` as an error for non-existent files ([#15114], thanks @HertzDevil) - *(files)* Replace handle atomically in `IO::FileDescriptor#close` on Windows ([#15165], thanks @HertzDevil) - *(llvm)* Fix `find-llvm-config` to ignore `LLVM_CONFIG`'s escape sequences ([#15076], thanks @HertzDevil) +- *(log)* **[regression]** Fix `Log` to emit with `exception` even if block outputs `nil` ([#15253], thanks @lachlan) - *(networking)* **[regression]** Fix `UNIXSocket#receive` ([#15107], thanks @straight-shoota) - *(numeric)* Fix `Complex#/` edge cases ([#15086], thanks @HertzDevil) - *(numeric)* Fix `Number#humanize` printing of `(-)Infinity` and `NaN` ([#15090], thanks @lachlan) @@ -81,12 +97,16 @@ - *(runtime)* **[regression]** Protect constant initializers with mutex on Windows ([#15134], thanks @HertzDevil) - *(runtime)* use `uninitialized LibC::SigsetT` ([#15144], thanks @straight-shoota) - *(runtime)* Fix static linking when using MinGW-w64 ([#15167], thanks @HertzDevil) +- *(system)* Raise on abnormal exit in `Procss::Status#exit_code` ([#15241], thanks @straight-shoota) - *(text)* Fix libiconv build on Windows ([#15095], thanks @HertzDevil) +- *(text)* Change `sprintf "%c"` to support only `Char` and `Int::Primitive` ([#15142], thanks @nanobowers) +- *(time)* Fix proper error handling for early end in `HTTP_DATE` parser ([#15232], thanks @straight-shoota) [#15115]: https://github.com/crystal-lang/crystal/pull/15115 [#15114]: https://github.com/crystal-lang/crystal/pull/15114 [#15165]: https://github.com/crystal-lang/crystal/pull/15165 [#15076]: https://github.com/crystal-lang/crystal/pull/15076 +[#15253]: https://github.com/crystal-lang/crystal/pull/15253 [#15107]: https://github.com/crystal-lang/crystal/pull/15107 [#15086]: https://github.com/crystal-lang/crystal/pull/15086 [#15090]: https://github.com/crystal-lang/crystal/pull/15090 @@ -94,42 +114,68 @@ [#15134]: https://github.com/crystal-lang/crystal/pull/15134 [#15144]: https://github.com/crystal-lang/crystal/pull/15144 [#15167]: https://github.com/crystal-lang/crystal/pull/15167 +[#15241]: https://github.com/crystal-lang/crystal/pull/15241 [#15095]: https://github.com/crystal-lang/crystal/pull/15095 +[#15142]: https://github.com/crystal-lang/crystal/pull/15142 +[#15232]: https://github.com/crystal-lang/crystal/pull/15232 #### compiler - OpenBSD: fix integration and broken specs ([#15118], thanks @ysbaddaden) -- *(interpreter)* setup signal handlers in interpreted code ([#14766], thanks @ysbaddaden, [#15178], thanks @straight-shoota) +- *(interpreter)* setup signal handlers in interpreted code ([#14766], [#15178], thanks @ysbaddaden, @straight-shoota) +- *(parser)* Fix `SyntaxHighlighter` delimiter state ([#15104], thanks @straight-shoota) +- *(parser)* Disallow weird assignments ([#14815], thanks @FnControlOption) [#15118]: https://github.com/crystal-lang/crystal/pull/15118 [#14766]: https://github.com/crystal-lang/crystal/pull/14766 [#15178]: https://github.com/crystal-lang/crystal/pull/15178 +[#15104]: https://github.com/crystal-lang/crystal/pull/15104 +[#14815]: https://github.com/crystal-lang/crystal/pull/14815 #### tools - Improve man and shell completion for tools ([#15082], thanks @Blacksmoke16) +- *(implementations)* Fix `tool implementations` to handle gracefully a def with missing location ([#15273], thanks @straight-shoota) [#15082]: https://github.com/crystal-lang/crystal/pull/15082 +[#15273]: https://github.com/crystal-lang/crystal/pull/15273 ### Chores #### stdlib - Fix various typos ([#15080], thanks @kojix2) +- *(runtime)* Make `Enum` an abstract struct ([#15274], thanks @straight-shoota) +- *(system)* Redefine `Process::Status#normal_exit?` on Windows ([#15255], [#15267], thanks @straight-shoota) [#15080]: https://github.com/crystal-lang/crystal/pull/15080 +[#15274]: https://github.com/crystal-lang/crystal/pull/15274 +[#15255]: https://github.com/crystal-lang/crystal/pull/15255 +[#15267]: https://github.com/crystal-lang/crystal/pull/15267 + +#### compiler + +- *(codegen)* Link i128 constants internally if possible ([#15217], thanks @BlobCodes) +- *(parser)* Add location to `RegexLiteral` ([#15235], thanks @straight-shoota) + +[#15217]: https://github.com/crystal-lang/crystal/pull/15217 +[#15235]: https://github.com/crystal-lang/crystal/pull/15235 ### Performance #### stdlib +- *(collection)* Optimize `Slice#<=>` and `#==` with reference check ([#15234], thanks @straight-shoota) - *(concurrency)* Do not over-commit fiber stacks on Windows ([#15037], thanks @HertzDevil) - *(text)* Pre-compute `String` size after `#chomp()` if possible ([#15153], thanks @HertzDevil) - *(text)* Optimize `String#rchop?()` ([#15175], thanks @HertzDevil) +- *(text)* Optimize `String#==` taking character size into account ([#15233], thanks @straight-shoota) +[#15234]: https://github.com/crystal-lang/crystal/pull/15234 [#15037]: https://github.com/crystal-lang/crystal/pull/15037 [#15153]: https://github.com/crystal-lang/crystal/pull/15153 [#15175]: https://github.com/crystal-lang/crystal/pull/15175 +[#15233]: https://github.com/crystal-lang/crystal/pull/15233 #### compiler @@ -142,16 +188,29 @@ #### stdlib - Use Win32 heap functions with `-Dgc_none` ([#15173], thanks @HertzDevil) +- *(collection)* Refactor `Enumerable#map` to delegate to `#map_with_index` ([#15210], thanks @straight-shoota) - *(runtime)* Refactor uses of `LibC.dladdr` inside `Exception::CallStack` ([#15108], thanks @HertzDevil) +- *(runtime)* Crystal::EventLoop namespace ([#15226], thanks @ysbaddaden) +- *(runtime)* Change `libevent` event loop to wait forever when blocking ([#15243], thanks @ysbaddaden) +- *(runtime)* Refactor the IOCP event loop (timers, ...) ([#15238], thanks @ysbaddaden) - *(serialization)* Use per-thread libxml2 global state on all platforms ([#15121], thanks @HertzDevil) -- *(system)* Event Loop ([#14996], thanks @ysbaddaden) - *(system)* Assume `getrandom` on Linux ([#15040], thanks @ysbaddaden) +- *(system)* Refactor Lifetime Event Loop ([#14996], [#15205], [#15206], [#15215], thanks @ysbaddaden) +- *(system)* Refactor use of `Process::Status#exit_code` to `#exit_code?` ([#15254], thanks @straight-shoota) [#15173]: https://github.com/crystal-lang/crystal/pull/15173 +[#15210]: https://github.com/crystal-lang/crystal/pull/15210 [#15108]: https://github.com/crystal-lang/crystal/pull/15108 +[#15226]: https://github.com/crystal-lang/crystal/pull/15226 +[#15243]: https://github.com/crystal-lang/crystal/pull/15243 +[#15238]: https://github.com/crystal-lang/crystal/pull/15238 [#15121]: https://github.com/crystal-lang/crystal/pull/15121 -[#14996]: https://github.com/crystal-lang/crystal/pull/14996 [#15040]: https://github.com/crystal-lang/crystal/pull/15040 +[#14996]: https://github.com/crystal-lang/crystal/pull/14996 +[#15205]: https://github.com/crystal-lang/crystal/pull/15205 +[#15206]: https://github.com/crystal-lang/crystal/pull/15206 +[#15215]: https://github.com/crystal-lang/crystal/pull/15215 +[#15254]: https://github.com/crystal-lang/crystal/pull/15254 #### compiler @@ -163,73 +222,78 @@ #### stdlib -- Add docs for lib bindings with supported library versions ([#14900], thanks @straight-shoota) +- Add docs for lib bindings with supported library versions ([#14900], [#15198], thanks @straight-shoota) - *(concurrency)* Make `Fiber.timeout` and `.cancel_timeout` nodoc ([#15184], thanks @straight-shoota) - *(concurrency)* Update example code for `::spawn` with `WaitGroup` ([#15191], thanks @BigBoyBarney) - *(numeric)* Clarify behavior of `strict` for `String`-to-number conversions ([#15199], thanks @HertzDevil) - *(runtime)* Make `Box` constructor and `object` getter nodoc ([#15136], thanks @straight-shoota) +- *(runtime)* Fix `EventLoop` docs for `Socket` `read`, `write` ([#15194], thanks @straight-shoota) - *(system)* Add example for `Dir.glob` ([#15171], thanks @BigBoyBarney) -- *(text)* Add note about locale-dependent system error messages ([#15196], thanks @HertzDevil) +- *(system)* Adjust definition of `ExitReason::Aborted` ([#15256], thanks @straight-shoota) - *(text)* Improve docs for `String#rindex!` ([#15132], thanks @BigBoyBarney) +- *(text)* Add note about locale-dependent system error messages ([#15196], thanks @HertzDevil) [#14900]: https://github.com/crystal-lang/crystal/pull/14900 +[#15198]: https://github.com/crystal-lang/crystal/pull/15198 [#15184]: https://github.com/crystal-lang/crystal/pull/15184 [#15191]: https://github.com/crystal-lang/crystal/pull/15191 [#15199]: https://github.com/crystal-lang/crystal/pull/15199 [#15136]: https://github.com/crystal-lang/crystal/pull/15136 +[#15194]: https://github.com/crystal-lang/crystal/pull/15194 [#15171]: https://github.com/crystal-lang/crystal/pull/15171 -[#15196]: https://github.com/crystal-lang/crystal/pull/15196 +[#15256]: https://github.com/crystal-lang/crystal/pull/15256 [#15132]: https://github.com/crystal-lang/crystal/pull/15132 - -#### other - -- Fix `EventLoop` docs for `Socket` `read`, `write` ([#15194], thanks @straight-shoota) -- Fixup libressl version range for `lib_crypto` ([#15198], thanks @straight-shoota) - -[#15194]: https://github.com/crystal-lang/crystal/pull/15194 -[#15198]: https://github.com/crystal-lang/crystal/pull/15198 +[#15196]: https://github.com/crystal-lang/crystal/pull/15196 ### Specs #### stdlib - Fix failing specs on FreeBSD ([#15093], thanks @ysbaddaden) +- Disable specs that break on MinGW-w64 ([#15116], thanks @HertzDevil) - *(networking)* DragonFlyBSD: std specs fixes + pending ([#15152], thanks @ysbaddaden) - *(networking)* Close some dangling sockets in specs ([#15163], thanks @HertzDevil) - *(networking)* Update specs to run with IPv6 support disabled ([#15046], thanks @Blacksmoke16) +- *(networking)* Add specs for invalid special characters in `Cookie` ([#15244], thanks @straight-shoota) - *(system)* Improve `System::User` specs on Windows ([#15156], thanks @HertzDevil) - *(system)* Make `cmd.exe` drop `%PROCESSOR_ARCHITECTURE%` in `Process` specs ([#15158], thanks @HertzDevil) +- *(system)* Add specs for signal exit ([#15229], thanks @straight-shoota) [#15093]: https://github.com/crystal-lang/crystal/pull/15093 +[#15116]: https://github.com/crystal-lang/crystal/pull/15116 [#15152]: https://github.com/crystal-lang/crystal/pull/15152 [#15163]: https://github.com/crystal-lang/crystal/pull/15163 [#15046]: https://github.com/crystal-lang/crystal/pull/15046 +[#15244]: https://github.com/crystal-lang/crystal/pull/15244 [#15156]: https://github.com/crystal-lang/crystal/pull/15156 [#15158]: https://github.com/crystal-lang/crystal/pull/15158 +[#15229]: https://github.com/crystal-lang/crystal/pull/15229 #### compiler +- *(cli)* Remove the entire compiler code base from `external_command_spec` ([#15208], thanks @straight-shoota) - *(interpreter)* **[regression]** Fix `Crystal::Loader.default_search_paths` spec for macOS ([#15135], thanks @HertzDevil) +[#15208]: https://github.com/crystal-lang/crystal/pull/15208 [#15135]: https://github.com/crystal-lang/crystal/pull/15135 #### tools +- Use empty prelude for compiler tools specs ([#15272], thanks @straight-shoota) - *(docs-generator)* Allow skipping compiler tool specs that require Git ([#15125], thanks @HertzDevil) +[#15272]: https://github.com/crystal-lang/crystal/pull/15272 [#15125]: https://github.com/crystal-lang/crystal/pull/15125 -#### other - -- Disable specs that break on MinGW-w64 ([#15116], thanks @HertzDevil) - -[#15116]: https://github.com/crystal-lang/crystal/pull/15116 - ### Infrastructure - Update previous Crystal release 1.14.0 ([#15071], thanks @straight-shoota) - Fix remove trailing whitespace from CRYSTAL definition ([#15131], thanks @straight-shoota) - Make utilities posix compatible ([#15139], thanks @nanobowers) +- Update `shell.nix` to `nixpkgs-24.05` and LLVM 18 ([#14651], thanks @straight-shoota) +- Makefile: Allow custom extensions for exports and spec flags ([#15099], thanks @straight-shoota) +- Merge changelog entries for fixups with main PR ([#15207], thanks @straight-shoota) +- Update link to good first issues ([#15250], thanks @BigBoyBarney) - Make `bin/crystal` work on MSYS2 ([#15094], thanks @HertzDevil) - Make `Makefile` work on MSYS2 ([#15102], thanks @HertzDevil) - Support `.exe` file extension in `Makefile` on MSYS2 ([#15123], thanks @HertzDevil) @@ -238,10 +302,14 @@ - *(ci)* Remove pin for ancient nix version ([#15150], thanks @straight-shoota) - *(ci)* Migrate renovate config ([#15151], thanks @renovate) - *(ci)* Update XCode 15.3.0 in circleci ([#15164], thanks @straight-shoota) +- *(ci)* Update GH Actions ([#15052], thanks @renovate) +- *(ci)* Update msys2/setup-msys2 action to v2.26.0 ([#15265], thanks @renovate) - *(ci)* **[security]** Restrict GitHub token permissions of CI workflows ([#15087], thanks @HertzDevil) - *(ci)* Do not link against `DbgHelp` for MinGW-w64 CI build ([#15160], thanks @HertzDevil) +- *(ci)* Use MSYS2's upstream LLVM version on MinGW-w64 CI ([#15197], thanks @HertzDevil) - *(ci)* Add CI workflow for cross-compiling Crystal on MSYS2 ([#15110], thanks @HertzDevil) - *(ci)* Add MinGW-w64 CI workflow for stdlib and compiler specs ([#15124], thanks @HertzDevil) +- *(ci)* Make MinGW-w64 build artifact a full installation ([#15204], thanks @HertzDevil) - *(ci)* Use official Apt respositories for LLVM CI ([#15103], thanks @HertzDevil) - *(ci)* Drop LLVM Apt installer script on WebAssembly CI ([#15109], thanks @HertzDevil) - *(ci)* Run interpreter specs on Windows CI ([#15141], thanks @HertzDevil) @@ -249,6 +317,10 @@ [#15071]: https://github.com/crystal-lang/crystal/pull/15071 [#15131]: https://github.com/crystal-lang/crystal/pull/15131 [#15139]: https://github.com/crystal-lang/crystal/pull/15139 +[#14651]: https://github.com/crystal-lang/crystal/pull/14651 +[#15099]: https://github.com/crystal-lang/crystal/pull/15099 +[#15207]: https://github.com/crystal-lang/crystal/pull/15207 +[#15250]: https://github.com/crystal-lang/crystal/pull/15250 [#15094]: https://github.com/crystal-lang/crystal/pull/15094 [#15102]: https://github.com/crystal-lang/crystal/pull/15102 [#15123]: https://github.com/crystal-lang/crystal/pull/15123 @@ -257,10 +329,14 @@ [#15150]: https://github.com/crystal-lang/crystal/pull/15150 [#15151]: https://github.com/crystal-lang/crystal/pull/15151 [#15164]: https://github.com/crystal-lang/crystal/pull/15164 +[#15052]: https://github.com/crystal-lang/crystal/pull/15052 +[#15265]: https://github.com/crystal-lang/crystal/pull/15265 [#15087]: https://github.com/crystal-lang/crystal/pull/15087 [#15160]: https://github.com/crystal-lang/crystal/pull/15160 +[#15197]: https://github.com/crystal-lang/crystal/pull/15197 [#15110]: https://github.com/crystal-lang/crystal/pull/15110 [#15124]: https://github.com/crystal-lang/crystal/pull/15124 +[#15204]: https://github.com/crystal-lang/crystal/pull/15204 [#15103]: https://github.com/crystal-lang/crystal/pull/15103 [#15109]: https://github.com/crystal-lang/crystal/pull/15109 [#15141]: https://github.com/crystal-lang/crystal/pull/15141