From ba82e755170e187421310509a917ddc997a2dedb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Sun, 15 Jun 2025 11:33:09 +0200 Subject: [PATCH 1/6] wip --- scripts/github-changelog.cr | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/github-changelog.cr b/scripts/github-changelog.cr index 56f318a1157d..acf61b5906e8 100755 --- a/scripts/github-changelog.cr +++ b/scripts/github-changelog.cr @@ -174,9 +174,11 @@ record PullRequest, topic.try(&.[1..].join(":").presence) end + class_getter missing_topics = Set(Int32).new + def topic topics.fetch(0) do - STDERR.puts "Missing topic for ##{number}" + self.class.missing_topics.add(number) nil end end @@ -495,3 +497,11 @@ SECTION_TITLES.each do |id, title| end end end + +PullRequest.missing_topics.each do |number| + STDERR.puts "Missing topic for #{ansi_url("https://github.com/#{repository}/pull/#{number}", "##{number}")}" +end + +def ansi_url(url, label) + "\e]8;;#{url}\e\\#{label}\e]8;;\e\\" +end From fe9ef906678a607eea02a078ea75d26237bb3b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 15 Sep 2025 13:05:16 +0200 Subject: [PATCH 2/6] Update changelog for 1.18.0 --- CHANGELOG.md | 397 +++++++++++++++++++++++++++++++++++++++++- shard.yml | 2 +- src/SOURCE_DATE_EPOCH | 1 + src/VERSION | 2 +- 4 files changed, 396 insertions(+), 6 deletions(-) create mode 100644 src/SOURCE_DATE_EPOCH diff --git a/CHANGELOG.md b/CHANGELOG.md index 45d98ceebed0..35037b998376 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,399 @@ # Changelog +## [1.18.0] (2025-10-07) + +Freeze period: 2025-09-23 + +[1.18.0]: https://github.com/crystal-lang/crystal/releases/1.18.0 + +### Features + +#### lang + +- Support `ProcPointer`s of lib funs with parameter types ([#16089], thanks @HertzDevil) +- _(annotations)_ Print deprecation warning on types and aliases ([#15962], thanks @ysbaddaden) +- _(annotations)_ Print deprecation warnings on deprecated method argument ([#15999], thanks @ysbaddaden) +- _(annotations)_ Continue REPL prompt if input consists entirely of annotations ([#16045], thanks @HertzDevil) + +[#16089]: https://github.com/crystal-lang/crystal/pull/16089 +[#15962]: https://github.com/crystal-lang/crystal/pull/15962 +[#15999]: https://github.com/crystal-lang/crystal/pull/15999 +[#16045]: https://github.com/crystal-lang/crystal/pull/16045 + +#### stdlib + +- Add `summary_width` and `summary_indent` to `OptionParser` in Crystal ([#15326], thanks @kojix2) +- _(collection)_ Add `Set#select!` and `#reject!` ([#16060], thanks @HertzDevil) +- _(collection)_ Expand empty `(Named)TupleLiteral` to `(Named)Tuple.new` instead of `{}` ([#16108], thanks @spuun) +- _(concurrency)_ Speed up `Parallel::Scheduler#quick_dequeue?` for `max=1` ([#15961], thanks @ysbaddaden) +- _(files)_ **[deprecation]** Add `.set_blocking` to `Socket` and `IO::FileDescriptor` and deprecate `#blocking` property ([#16033], [#16129], thanks @ysbaddaden) +- _(llvm)_ Support LLVM 21.1 and 22.0 ([#16062], thanks @HertzDevil) +- _(runtime)_ Lazily instantiate the event loop of isolated execution contexts ([#16063], thanks @ysbaddaden) +- _(runtime)_ Add `Fiber::ExecutionContext::Parallel#resize` ([#15956], thanks @ysbaddaden) +- _(runtime)_ Add `Crystal::System.effective_cpu_count` ([#16148], thanks @ysbaddaden) +- _(serialization)_ Add `Time::Location.from_json_object_key` ([#15957], thanks @Sija) +- _(serialization)_ Resolve aliases in `YAML::Any` ([#15941], thanks @willhbr) +- _(serialization)_ Embed libxml2 version number on Windows MSVC ([#16104], thanks @HertzDevil) +- _(serialization)_ Add `JSON::Any` wrapper around `JSON::Any#inspect` output ([#15979], thanks @jneen) +- _(specs)_ Add `with_tempdir` spec helper ([#16005], thanks @straight-shoota) +- _(system)_ Add `File.readlink?` ([#16004], thanks @straight-shoota) +- _(text)_ Add `SemanticVersion.valid?` & `SemanticVersion.parse?` ([#15051], thanks @devnote-dev) +- _(text)_ Add `String.additive_identity` ([#15998], thanks @straight-shoota) +- _(time)_ Use canonical IANA name for the local Windows system time zone ([#15967], thanks @HertzDevil) +- _(time)_ Load `Location.local` by symlink name ([#16002], [#16022], thanks @straight-shoota) +- _(time)_ Add `Time::Location.load?` ([#16121], thanks @straight-shoota) + +[#15326]: https://github.com/crystal-lang/crystal/pull/15326 +[#16060]: https://github.com/crystal-lang/crystal/pull/16060 +[#16108]: https://github.com/crystal-lang/crystal/pull/16108 +[#15961]: https://github.com/crystal-lang/crystal/pull/15961 +[#16033]: https://github.com/crystal-lang/crystal/pull/16033 +[#16129]: https://github.com/crystal-lang/crystal/pull/16129 +[#16062]: https://github.com/crystal-lang/crystal/pull/16062 +[#16063]: https://github.com/crystal-lang/crystal/pull/16063 +[#15956]: https://github.com/crystal-lang/crystal/pull/15956 +[#16148]: https://github.com/crystal-lang/crystal/pull/16148 +[#15957]: https://github.com/crystal-lang/crystal/pull/15957 +[#15941]: https://github.com/crystal-lang/crystal/pull/15941 +[#16104]: https://github.com/crystal-lang/crystal/pull/16104 +[#15979]: https://github.com/crystal-lang/crystal/pull/15979 +[#16005]: https://github.com/crystal-lang/crystal/pull/16005 +[#16004]: https://github.com/crystal-lang/crystal/pull/16004 +[#15051]: https://github.com/crystal-lang/crystal/pull/15051 +[#15998]: https://github.com/crystal-lang/crystal/pull/15998 +[#15967]: https://github.com/crystal-lang/crystal/pull/15967 +[#16002]: https://github.com/crystal-lang/crystal/pull/16002 +[#16022]: https://github.com/crystal-lang/crystal/pull/16022 +[#16121]: https://github.com/crystal-lang/crystal/pull/16121 + +#### compiler + +- Add the ability to dump type information to a JSON file ([#16027], thanks @HertzDevil) +- _(interpreter)_ Support `Proc.new(Void*, Void*)` in the interpreter ([#16044], thanks @HertzDevil) +- _(semantic)_ Resolve types when guessing return type from class method overloads ([#16118], thanks @HertzDevil) +- _(semantic)_ Guess instance variable types from global method calls ([#16119], thanks @HertzDevil) + +[#16027]: https://github.com/crystal-lang/crystal/pull/16027 +[#16044]: https://github.com/crystal-lang/crystal/pull/16044 +[#16118]: https://github.com/crystal-lang/crystal/pull/16118 +[#16119]: https://github.com/crystal-lang/crystal/pull/16119 + +#### tools + +- _(docs-generator)_ Add support for deprecated parameters in doc generator ([#16012], thanks @straight-shoota) +- _(hierarchy)_ Show extern union types in hierarchy tool ([#16026], thanks @HertzDevil) + +[#16012]: https://github.com/crystal-lang/crystal/pull/16012 +[#16026]: https://github.com/crystal-lang/crystal/pull/16026 + +### Bugfixes + +#### stdlib + +- _(files)_ Fix fcntl reference for fds[1] in socketpair setup ([#16072], thanks @kojix2) +- _(log)_ Make crystal log resilient to empty LOG_LEVEL env var ([#15963], thanks @anaPerezGhiglia) +- _(networking)_ Preserve query params in `StaticFileHandler` redirects ([#15789], thanks @syeopite) +- _(networking)_ Fix `StaticFileHandler` to return 404 on file error ([#16025], [#16077], thanks @straight-shoota) +- _(networking)_ Run `before_request` callback in `HTTP::Client` only once ([#16064], thanks @straight-shoota) +- _(networking)_ Fix `HTTP::Request#query=` typing ([#16143], thanks @Blacksmoke16) +- _(serialization)_ Fix add missing `#==` overloads for `Log::Metadata::Value` and `YAML::Any` ([#15732], thanks @straight-shoota) +- _(serialization)_ Fix pointer access bug in `XML::NodeSet` ([#16055], thanks @toddsundsted) +- _(serialization)_ Remove `NOERROR` from LibXML default options ([#16103], thanks @straight-shoota) +- _(serialization)_ Move `*::Serializable`'s private constructors into `macro included` hook ([#16147], thanks @HertzDevil) +- _(system)_ Fix return type of `system_close_on_exec=` on Windows ([#16095], thanks @straight-shoota) +- _(time)_ Fix time zone identifier `America/Argentina/Buenos_Aires` ([#16078], thanks @straight-shoota) +- _(time)_ Fix `Time#at_beginning_of_week`,`#at_end_of_week` to respect local timezone ([#16113], thanks @straight-shoota) + +[#16072]: https://github.com/crystal-lang/crystal/pull/16072 +[#15963]: https://github.com/crystal-lang/crystal/pull/15963 +[#15789]: https://github.com/crystal-lang/crystal/pull/15789 +[#16025]: https://github.com/crystal-lang/crystal/pull/16025 +[#16077]: https://github.com/crystal-lang/crystal/pull/16077 +[#16064]: https://github.com/crystal-lang/crystal/pull/16064 +[#16143]: https://github.com/crystal-lang/crystal/pull/16143 +[#15732]: https://github.com/crystal-lang/crystal/pull/15732 +[#16055]: https://github.com/crystal-lang/crystal/pull/16055 +[#16103]: https://github.com/crystal-lang/crystal/pull/16103 +[#16147]: https://github.com/crystal-lang/crystal/pull/16147 +[#16095]: https://github.com/crystal-lang/crystal/pull/16095 +[#16078]: https://github.com/crystal-lang/crystal/pull/16078 +[#16113]: https://github.com/crystal-lang/crystal/pull/16113 + +#### compiler + +- _(codegen)_ Never generate assignments to a block's underscore parameters ([#16057], thanks @HertzDevil) +- _(codegen)_ Fix `@[Primitive]` codegen for typedefs ([#16110], thanks @HertzDevil) +- _(interpreter)_ never generate assignments to a block's underscore parameters ([#16058], thanks @HertzDevil) +- _(parser)_ Disallow unterminated escaped heredoc without trailing newline ([#16046], thanks @HertzDevil) +- _(parser)_ Require space, semicolon, or newline after class/module/etc. header ([#13375], thanks @FnControlOption) +- _(parser)_ Fix parsing `ReadInstanceVar` in short block syntax ([#16099], thanks @nobodywasishere) +- _(semantic)_ Pass through variable types unchanged in a while loop ([#15980], thanks @HertzDevil) +- _(semantic)_ deprecation warning for (expanded) deprecated def ([#15997], thanks @ysbaddaden) +- _(semantic)_ Copy annotations in `Crystal::Arg#copy_without_location` ([#16008], thanks @ysbaddaden) +- _(semantic)_ Copy annotations in `Crystal::Def#expand_default_arguments` ([#16007], thanks @ysbaddaden) +- _(semantic)_ Fix error message for `StaticArray` with non-integer generic argument `N` ([#16037], thanks @straight-shoota) +- _(semantic)_ Resolve bound type parameters from generic superclass during path lookup ([#10839], thanks @HertzDevil) +- _(semantic)_ **[regression]** Ensure hash literals are evaluated from left to right ([#16124], thanks @HertzDevil) + +[#16057]: https://github.com/crystal-lang/crystal/pull/16057 +[#16110]: https://github.com/crystal-lang/crystal/pull/16110 +[#16058]: https://github.com/crystal-lang/crystal/pull/16058 +[#16046]: https://github.com/crystal-lang/crystal/pull/16046 +[#13375]: https://github.com/crystal-lang/crystal/pull/13375 +[#16099]: https://github.com/crystal-lang/crystal/pull/16099 +[#15980]: https://github.com/crystal-lang/crystal/pull/15980 +[#15997]: https://github.com/crystal-lang/crystal/pull/15997 +[#16008]: https://github.com/crystal-lang/crystal/pull/16008 +[#16007]: https://github.com/crystal-lang/crystal/pull/16007 +[#16037]: https://github.com/crystal-lang/crystal/pull/16037 +[#10839]: https://github.com/crystal-lang/crystal/pull/10839 +[#16124]: https://github.com/crystal-lang/crystal/pull/16124 + +### Chores + +#### stdlib + +- _(files)_ Add type restrictions to mime ([#15834], thanks @Vici37) +- _(log)_ Add type restrictions to Log directory ([#15777], thanks @Vici37) +- _(networking)_ Add type restrictions to Oauth directory ([#15687], thanks @Vici37) +- _(numeric)_ **[deprecation]** Deprecate `Float::Printer::IEEE` ([#16050], thanks @HertzDevil) +- _(runtime)_ Disable flaky spec for `Fiber::ExecutionContext::GlobalQueue` on macOS ([#16146], thanks @ysbaddaden) +- _(serialization)_ Add type restrictions to json ([#15840], [#16142], thanks @Vici37, @Sija) +- _(system)_ **[deprecation]** Deprecate `Process::Status#exit_signal` ([#16003], thanks @straight-shoota) + +[#15834]: https://github.com/crystal-lang/crystal/pull/15834 +[#15777]: https://github.com/crystal-lang/crystal/pull/15777 +[#15687]: https://github.com/crystal-lang/crystal/pull/15687 +[#16050]: https://github.com/crystal-lang/crystal/pull/16050 +[#16146]: https://github.com/crystal-lang/crystal/pull/16146 +[#15840]: https://github.com/crystal-lang/crystal/pull/15840 +[#16142]: https://github.com/crystal-lang/crystal/pull/16142 +[#16003]: https://github.com/crystal-lang/crystal/pull/16003 + +### Performance + +#### lang + +- Optimize `Enum.parse?`, avoiding allocations ([#15927], thanks @jgaskins) + +[#15927]: https://github.com/crystal-lang/crystal/pull/15927 + +#### stdlib + +- _(numeric)_ Do not use equality checks in `Int#upto` and `#downto` ([#16076], thanks @HertzDevil) +- _(system)_ Simplify buffer for `File.readlink` ([#16021], thanks @straight-shoota) +- _(time)_ Optimize `Time#to_s` ([#16042], thanks @straight-shoota) + +[#16076]: https://github.com/crystal-lang/crystal/pull/16076 +[#16021]: https://github.com/crystal-lang/crystal/pull/16021 +[#16042]: https://github.com/crystal-lang/crystal/pull/16042 + +#### compiler + +- Inline `Crystal.check_type_can_be_stored` ([#16130], thanks @HertzDevil) +- _(codegen)_ Group temporary variables by file name: compound array assignments ([#16122], thanks @HertzDevil) + +[#16130]: https://github.com/crystal-lang/crystal/pull/16130 +[#16122]: https://github.com/crystal-lang/crystal/pull/16122 + +### Refactor + +#### stdlib + +- _(concurrency)_ Refactor redundant `begin ... end` blocks ([#16011], thanks @straight-shoota) +- _(networking)_ Reorder implementation of `HTTP::Cookies#<<` and `[]=` ([#16107], thanks @straight-shoota) +- _(runtime)_ Remove nilable pointers in `Crystal::PointerPairingHeap` ([#15973], thanks @HertzDevil) +- _(runtime)_ Remove nilable pointer in `Crystal::EventLoop::IOCP#@timer_packet` ([#15975], thanks @HertzDevil) +- _(runtime)_ Remove minimum in `Fiber::ExecutionContext::Parallel` ([#15946], thanks @ysbaddaden) +- _(runtime)_ Pass `fd` implicitly to `System::FileDescriptor` and `System::Socket` ([#16137], thanks @ysbaddaden) +- _(runtime)_ Drop custom implementation of `Fiber::ExecutionContext::Concurrent` ([#16135], thanks @ysbaddaden) +- _(specs)_ Keep own colorization state in `Spec::CLI` ([#15926], thanks @HertzDevil) +- _(text)_ Use `ensure_suffix` instead of manually checking for suffixes [follow-up #15782] ([#15858], thanks @MatheusRich) +- _(time)_ Remove the old Windows time zone name table ([#16006], thanks @HertzDevil) + +[#16011]: https://github.com/crystal-lang/crystal/pull/16011 +[#16107]: https://github.com/crystal-lang/crystal/pull/16107 +[#15973]: https://github.com/crystal-lang/crystal/pull/15973 +[#15975]: https://github.com/crystal-lang/crystal/pull/15975 +[#15946]: https://github.com/crystal-lang/crystal/pull/15946 +[#16137]: https://github.com/crystal-lang/crystal/pull/16137 +[#16135]: https://github.com/crystal-lang/crystal/pull/16135 +[#15926]: https://github.com/crystal-lang/crystal/pull/15926 +[#15858]: https://github.com/crystal-lang/crystal/pull/15858 +[#16006]: https://github.com/crystal-lang/crystal/pull/16006 + +#### compiler + +- _(codegen)_ Refactor `Compiler#must_compile?` to clarify the rules. ([#16056], thanks @kojix2) +- _(parser)_ Add `#has_any_args?` method for `ASTNode`s ([#16115], thanks @straight-shoota) + +[#16056]: https://github.com/crystal-lang/crystal/pull/16056 +[#16115]: https://github.com/crystal-lang/crystal/pull/16115 + +#### other + +- Refactor `unless ... else` ([#16010], thanks @straight-shoota) +- Removed unused variables ([#16014], thanks @straight-shoota) + +[#16010]: https://github.com/crystal-lang/crystal/pull/16010 +[#16014]: https://github.com/crystal-lang/crystal/pull/16014 + +### Documentation + +#### stdlib + +- _(benchmark)_ Add type restrictions to benchmark directory ([#15688], thanks @Vici37) +- _(concurrency)_ Improve docs for `Channel#close` ([#15910], thanks @anaPerezGhiglia) +- _(crypto)_ Fix doc example for `Crypto::BCrypt.new(String, String, Int)` ([#15931], thanks @hugopl) +- _(crypto)_ Add type restrictions to crypto directory ([#15694], thanks @Vici37) +- _(files)_ Fix `IO::TimeoutError` documentation use of deprecated `read_timeout=` ([#16073], thanks @lachlan) +- _(files)_ Add type restrictions to io ([#15698], thanks @Vici37) +- _(llvm)_ Deprecate each `LLVM::ABI::*` classes ([#15989], thanks @ysbaddaden) +- _(networking)_ Add type restrictions to http ([#15710], thanks @Vici37) +- _(numeric)_ Add type restrictions to big ([#15689], thanks @Vici37) +- _(runtime)_ Fix typo in `Object` docs ([#16035], thanks @plambert) +- _(serialization)_ Add note about default constructor in `*::Serializable` ([#16080], thanks @HertzDevil) +- _(system)_ Add type restrictions to `args` parameter in `Process` ([#16031], thanks @BigBoyBarney) +- _(system)_ Add missing `File::NotFoundError` exception documentation for `File.open` ([#15826], thanks @Fijxu) +- _(text)_ Fix return type definition of `String#match_full!` method ([#16001], thanks @Sija) +- _(time)_ Update links to ISO-8601 to point to an archived version of the page ([#15985], thanks @nobodywasishere) +- _(time)_ Improve docs for `Time#to_local_in` ([#16041], thanks @straight-shoota) + +[#15688]: https://github.com/crystal-lang/crystal/pull/15688 +[#15910]: https://github.com/crystal-lang/crystal/pull/15910 +[#15931]: https://github.com/crystal-lang/crystal/pull/15931 +[#15694]: https://github.com/crystal-lang/crystal/pull/15694 +[#16073]: https://github.com/crystal-lang/crystal/pull/16073 +[#15698]: https://github.com/crystal-lang/crystal/pull/15698 +[#15989]: https://github.com/crystal-lang/crystal/pull/15989 +[#15710]: https://github.com/crystal-lang/crystal/pull/15710 +[#15689]: https://github.com/crystal-lang/crystal/pull/15689 +[#16035]: https://github.com/crystal-lang/crystal/pull/16035 +[#16080]: https://github.com/crystal-lang/crystal/pull/16080 +[#16031]: https://github.com/crystal-lang/crystal/pull/16031 +[#15826]: https://github.com/crystal-lang/crystal/pull/15826 +[#16001]: https://github.com/crystal-lang/crystal/pull/16001 +[#15985]: https://github.com/crystal-lang/crystal/pull/15985 +[#16041]: https://github.com/crystal-lang/crystal/pull/16041 + +### Specs + +#### stdlib + +- _(networking)_ Disable UDP multicast spec on macOS ([#15990], thanks @straight-shoota) +- _(networking)_ Extract specs for `HTTP::Cookies` to their own file ([#16106], thanks @straight-shoota) +- _(networking)_ Overhaul `HTTP::Cookies` specs ([#16117], thanks @straight-shoota) +- _(system)_ Enable specs for `close_on_exec` on Windows ([#14716], thanks @straight-shoota) + +[#15990]: https://github.com/crystal-lang/crystal/pull/15990 +[#16106]: https://github.com/crystal-lang/crystal/pull/16106 +[#16117]: https://github.com/crystal-lang/crystal/pull/16117 +[#14716]: https://github.com/crystal-lang/crystal/pull/14716 + +#### compiler + +- Use `<<-CRYSTAL` in compiler specs consistently ([#16083], thanks @HertzDevil) +- Style the remaining multi-line compiler specs using heredocs ([#16125], thanks @HertzDevil) +- _(codegen)_ Style multi-line codegen specs using heredocs ([#16081], thanks @HertzDevil) +- _(codegen)_ Style `test_c` codegen specs using heredocs ([#16082], thanks @HertzDevil) +- _(semantic)_ Style multi-line `assert_type` specs using heredocs ([#16088], thanks @HertzDevil) +- _(semantic)_ Style multi-line `assert_error` specs using heredocs ([#16093], thanks @HertzDevil) +- _(semantic)_ Move `crystal_path_spec` fixtures to `spec/compiler/data` ([#16086], thanks @straight-shoota) + +[#16083]: https://github.com/crystal-lang/crystal/pull/16083 +[#16125]: https://github.com/crystal-lang/crystal/pull/16125 +[#16081]: https://github.com/crystal-lang/crystal/pull/16081 +[#16082]: https://github.com/crystal-lang/crystal/pull/16082 +[#16088]: https://github.com/crystal-lang/crystal/pull/16088 +[#16093]: https://github.com/crystal-lang/crystal/pull/16093 +[#16086]: https://github.com/crystal-lang/crystal/pull/16086 + +#### tools + +- _(formatter)_ Add specs for `x.[](y)` syntax ([#16109], thanks @straight-shoota) + +[#16109]: https://github.com/crystal-lang/crystal/pull/16109 + +### Infrastructure + +- Update previous Crystal release 1.17.0 ([#15988], thanks @straight-shoota) +- Support debug builds for the MSVC Boehm GC libraries ([#15968], thanks @HertzDevil) +- Fix funding.json well-known file name ([#16000], thanks @matiasgarciaisaia) +- Lint the Bash auto-completion script ([#15993], thanks @HertzDevil) +- Merge `release/1.17`@`1.17.1` into `master` ([#16017], thanks @straight-shoota) +- Update previous Crystal release 1.17.1 ([#16016], thanks @straight-shoota) +- Add new types to GitHub issue templates ([#15811], thanks @straight-shoota) +- Disable ameba rule `Lint/Formatting` ([#16015], thanks @straight-shoota) +- Add `REUSE.toml` ([#15992], thanks @straight-shoota) +- Default to LLVM 16 in `shell.nix` ([#16023], thanks @ysbaddaden) +- Avoid updating `forward-compatibility.yml` on release update for patch releases ([#16019], thanks @straight-shoota) +- Disable `Lint/LiteralsComparison` in more spec files ([#16087], thanks @straight-shoota) +- Fix typo in Makefile comment ([#16126], thanks @kojix2) +- Fix duplicate --error-trace in man page build options ([#16133], thanks @kojix2) +- _(ci)_ Add `fail-fast: false` for strategy CI jobs ([#15960], thanks @straight-shoota) +- _(ci)_ Add tests for latest OpenSSL and LibreSSL in Alpine edge ([#15812], thanks @straight-shoota) +- _(ci)_ Use MSYS2 Crystal package for ARM64 Windows CI ([#15991], thanks @HertzDevil) +- _(ci)_ Add macos-15 runner ([#15982], thanks @straight-shoota) +- _(ci)_ Update GH Actions ([#16067], thanks @renovate) +- _(ci)_ Update GH Actions ([#16084], thanks @renovate) +- _(ci)_ Update crate-ci/typos action to v1.35.5 ([#16102], thanks @renovate) +- _(ci)_ Update GH Actions ([#16131], thanks @renovate) +- _(ci)_ Trigger LLVM CI when codegen files are changed ([#16116], thanks @HertzDevil) +- _(ci)_ Do not use D drive on MSVC CI ([#15986], thanks @HertzDevil) + +[#15988]: https://github.com/crystal-lang/crystal/pull/15988 +[#15968]: https://github.com/crystal-lang/crystal/pull/15968 +[#16000]: https://github.com/crystal-lang/crystal/pull/16000 +[#15993]: https://github.com/crystal-lang/crystal/pull/15993 +[#16017]: https://github.com/crystal-lang/crystal/pull/16017 +[#16016]: https://github.com/crystal-lang/crystal/pull/16016 +[#15811]: https://github.com/crystal-lang/crystal/pull/15811 +[#16015]: https://github.com/crystal-lang/crystal/pull/16015 +[#15992]: https://github.com/crystal-lang/crystal/pull/15992 +[#16023]: https://github.com/crystal-lang/crystal/pull/16023 +[#16019]: https://github.com/crystal-lang/crystal/pull/16019 +[#16087]: https://github.com/crystal-lang/crystal/pull/16087 +[#16126]: https://github.com/crystal-lang/crystal/pull/16126 +[#16133]: https://github.com/crystal-lang/crystal/pull/16133 +[#15960]: https://github.com/crystal-lang/crystal/pull/15960 +[#15812]: https://github.com/crystal-lang/crystal/pull/15812 +[#15991]: https://github.com/crystal-lang/crystal/pull/15991 +[#15982]: https://github.com/crystal-lang/crystal/pull/15982 +[#16067]: https://github.com/crystal-lang/crystal/pull/16067 +[#16084]: https://github.com/crystal-lang/crystal/pull/16084 +[#16102]: https://github.com/crystal-lang/crystal/pull/16102 +[#16131]: https://github.com/crystal-lang/crystal/pull/16131 +[#16116]: https://github.com/crystal-lang/crystal/pull/16116 +[#15986]: https://github.com/crystal-lang/crystal/pull/15986 + +### other + +#### stdlib + +- _(concurrency)_ **[deprecation]** Deprecate `Atomic::Flag` ([#15805], thanks @ysbaddaden) +- _(files)_ **[deprecation]** Deprecate the `blocking` parameter of `File`, `Socket` and `IO::FileDescriptor` constructors ([#16034], [#16047], thanks @ysbaddaden, @Blacksmoke16) + +[#15805]: https://github.com/crystal-lang/crystal/pull/15805 +[#16034]: https://github.com/crystal-lang/crystal/pull/16034 +[#16047]: https://github.com/crystal-lang/crystal/pull/16047 + +#### compiler + +- _(semantic)_ Fix: Copy annotations in `Crystal::Def#expand_new_default_arguments` ([#16013], thanks @ysbaddaden) + +[#16013]: https://github.com/crystal-lang/crystal/pull/16013 + +#### other + +- Default execution context is now parallel (MT:1) ([#16136], thanks @ysbaddaden) + +[#16136]: https://github.com/crystal-lang/crystal/pull/16136 + ## Previous Releases For information on prior releases, refer to their changelogs: -* [1.17](https://github.com/crystal-lang/crystal/blob/release/1.17/CHANGELOG.md) -* [1.16](https://github.com/crystal-lang/crystal/blob/release/1.16/CHANGELOG.md) -* [1.0 to 1.15](https://github.com/crystal-lang/crystal/blob/release/1.15/CHANGELOG.md) -* [before 1.0](https://github.com/crystal-lang/crystal/blob/release/0.36/CHANGELOG.md) +- [1.17](https://github.com/crystal-lang/crystal/blob/release/1.17/CHANGELOG.md) +- [1.16](https://github.com/crystal-lang/crystal/blob/release/1.16/CHANGELOG.md) +- [1.0 to 1.15](https://github.com/crystal-lang/crystal/blob/release/1.15/CHANGELOG.md) +- [before 1.0](https://github.com/crystal-lang/crystal/blob/release/0.36/CHANGELOG.md) diff --git a/shard.yml b/shard.yml index 7cb68ae26618..7f4cf2d23627 100644 --- a/shard.yml +++ b/shard.yml @@ -1,5 +1,5 @@ name: crystal -version: 1.18.0-dev +version: 1.18.0 authors: - Crystal Core Team diff --git a/src/SOURCE_DATE_EPOCH b/src/SOURCE_DATE_EPOCH new file mode 100644 index 000000000000..2f12990bbb53 --- /dev/null +++ b/src/SOURCE_DATE_EPOCH @@ -0,0 +1 @@ +1759795200 diff --git a/src/VERSION b/src/VERSION index ee017091ff37..84cc529467b0 100644 --- a/src/VERSION +++ b/src/VERSION @@ -1 +1 @@ -1.18.0-dev +1.18.0 From 42ef7e9f9650f77dc8370eed9147514fd0a88b8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 15 Sep 2025 13:31:41 +0200 Subject: [PATCH 3/6] Update changelog for 1.18.0 --- CHANGELOG.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35037b998376..de15f07c31a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,12 +13,10 @@ Freeze period: 2025-09-23 - Support `ProcPointer`s of lib funs with parameter types ([#16089], thanks @HertzDevil) - _(annotations)_ Print deprecation warning on types and aliases ([#15962], thanks @ysbaddaden) - _(annotations)_ Print deprecation warnings on deprecated method argument ([#15999], thanks @ysbaddaden) -- _(annotations)_ Continue REPL prompt if input consists entirely of annotations ([#16045], thanks @HertzDevil) [#16089]: https://github.com/crystal-lang/crystal/pull/16089 [#15962]: https://github.com/crystal-lang/crystal/pull/15962 [#15999]: https://github.com/crystal-lang/crystal/pull/15999 -[#16045]: https://github.com/crystal-lang/crystal/pull/16045 #### stdlib @@ -68,7 +66,7 @@ Freeze period: 2025-09-23 #### compiler -- Add the ability to dump type information to a JSON file ([#16027], thanks @HertzDevil) +- _(cli)_ Add the ability to dump type information to a JSON file ([#16027], thanks @HertzDevil) - _(interpreter)_ Support `Proc.new(Void*, Void*)` in the interpreter ([#16044], thanks @HertzDevil) - _(semantic)_ Resolve types when guessing return type from class method overloads ([#16118], thanks @HertzDevil) - _(semantic)_ Guess instance variable types from global method calls ([#16119], thanks @HertzDevil) @@ -90,7 +88,7 @@ Freeze period: 2025-09-23 #### stdlib -- _(files)_ Fix fcntl reference for fds[1] in socketpair setup ([#16072], thanks @kojix2) +- _(files)_ Fix `fcntl` reference for `fds[1]` in socketpair setup ([#16072], thanks @kojix2) - _(log)_ Make crystal log resilient to empty LOG_LEVEL env var ([#15963], thanks @anaPerezGhiglia) - _(networking)_ Preserve query params in `StaticFileHandler` redirects ([#15789], thanks @syeopite) - _(networking)_ Fix `StaticFileHandler` to return 404 on file error ([#16025], [#16077], thanks @straight-shoota) @@ -124,6 +122,7 @@ Freeze period: 2025-09-23 - _(codegen)_ Never generate assignments to a block's underscore parameters ([#16057], thanks @HertzDevil) - _(codegen)_ Fix `@[Primitive]` codegen for typedefs ([#16110], thanks @HertzDevil) - _(interpreter)_ never generate assignments to a block's underscore parameters ([#16058], thanks @HertzDevil) +- _(interpreter:repl)_ Continue REPL prompt if input consists entirely of annotations ([#16045], thanks @HertzDevil) - _(parser)_ Disallow unterminated escaped heredoc without trailing newline ([#16046], thanks @HertzDevil) - _(parser)_ Require space, semicolon, or newline after class/module/etc. header ([#13375], thanks @FnControlOption) - _(parser)_ Fix parsing `ReadInstanceVar` in short block syntax ([#16099], thanks @nobodywasishere) @@ -138,6 +137,7 @@ Freeze period: 2025-09-23 [#16057]: https://github.com/crystal-lang/crystal/pull/16057 [#16110]: https://github.com/crystal-lang/crystal/pull/16110 [#16058]: https://github.com/crystal-lang/crystal/pull/16058 +[#16045]: https://github.com/crystal-lang/crystal/pull/16045 [#16046]: https://github.com/crystal-lang/crystal/pull/16046 [#13375]: https://github.com/crystal-lang/crystal/pull/13375 [#16099]: https://github.com/crystal-lang/crystal/pull/16099 @@ -153,6 +153,7 @@ Freeze period: 2025-09-23 #### stdlib +- _(files)_ **[deprecation]** Deprecate the `blocking` parameter of `File`, `Socket` and `IO::FileDescriptor` constructors ([#16034], [#16047], thanks @ysbaddaden, @Blacksmoke16) - _(files)_ Add type restrictions to mime ([#15834], thanks @Vici37) - _(log)_ Add type restrictions to Log directory ([#15777], thanks @Vici37) - _(networking)_ Add type restrictions to Oauth directory ([#15687], thanks @Vici37) @@ -161,6 +162,8 @@ Freeze period: 2025-09-23 - _(serialization)_ Add type restrictions to json ([#15840], [#16142], thanks @Vici37, @Sija) - _(system)_ **[deprecation]** Deprecate `Process::Status#exit_signal` ([#16003], thanks @straight-shoota) +[#16034]: https://github.com/crystal-lang/crystal/pull/16034 +[#16047]: https://github.com/crystal-lang/crystal/pull/16047 [#15834]: https://github.com/crystal-lang/crystal/pull/15834 [#15777]: https://github.com/crystal-lang/crystal/pull/15777 [#15687]: https://github.com/crystal-lang/crystal/pull/15687 @@ -208,7 +211,6 @@ Freeze period: 2025-09-23 - _(runtime)_ Pass `fd` implicitly to `System::FileDescriptor` and `System::Socket` ([#16137], thanks @ysbaddaden) - _(runtime)_ Drop custom implementation of `Fiber::ExecutionContext::Concurrent` ([#16135], thanks @ysbaddaden) - _(specs)_ Keep own colorization state in `Spec::CLI` ([#15926], thanks @HertzDevil) -- _(text)_ Use `ensure_suffix` instead of manually checking for suffixes [follow-up #15782] ([#15858], thanks @MatheusRich) - _(time)_ Remove the old Windows time zone name table ([#16006], thanks @HertzDevil) [#16011]: https://github.com/crystal-lang/crystal/pull/16011 @@ -219,7 +221,6 @@ Freeze period: 2025-09-23 [#16137]: https://github.com/crystal-lang/crystal/pull/16137 [#16135]: https://github.com/crystal-lang/crystal/pull/16135 [#15926]: https://github.com/crystal-lang/crystal/pull/15926 -[#15858]: https://github.com/crystal-lang/crystal/pull/15858 [#16006]: https://github.com/crystal-lang/crystal/pull/16006 #### compiler @@ -329,7 +330,7 @@ Freeze period: 2025-09-23 - Avoid updating `forward-compatibility.yml` on release update for patch releases ([#16019], thanks @straight-shoota) - Disable `Lint/LiteralsComparison` in more spec files ([#16087], thanks @straight-shoota) - Fix typo in Makefile comment ([#16126], thanks @kojix2) -- Fix duplicate --error-trace in man page build options ([#16133], thanks @kojix2) +- Fix duplicate `--error-trace` option in man page ([#16133], thanks @kojix2) - _(ci)_ Add `fail-fast: false` for strategy CI jobs ([#15960], thanks @straight-shoota) - _(ci)_ Add tests for latest OpenSSL and LibreSSL in Alpine edge ([#15812], thanks @straight-shoota) - _(ci)_ Use MSYS2 Crystal package for ARM64 Windows CI ([#15991], thanks @HertzDevil) @@ -371,11 +372,8 @@ Freeze period: 2025-09-23 #### stdlib - _(concurrency)_ **[deprecation]** Deprecate `Atomic::Flag` ([#15805], thanks @ysbaddaden) -- _(files)_ **[deprecation]** Deprecate the `blocking` parameter of `File`, `Socket` and `IO::FileDescriptor` constructors ([#16034], [#16047], thanks @ysbaddaden, @Blacksmoke16) [#15805]: https://github.com/crystal-lang/crystal/pull/15805 -[#16034]: https://github.com/crystal-lang/crystal/pull/16034 -[#16047]: https://github.com/crystal-lang/crystal/pull/16047 #### compiler From 15b8f9c832cb69a696611dbf0e825b67b91cfedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 29 Sep 2025 11:29:08 +0200 Subject: [PATCH 4/6] Update changelog for 1.18.0 --- CHANGELOG.md | 75 +++++++++++++++++++++++++++++-------------- src/SOURCE_DATE_EPOCH | 2 +- 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de15f07c31a0..109f18c0722a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Changelog -## [1.18.0] (2025-10-07) +## [1.18.0] (2025-10-14) -Freeze period: 2025-09-23 +Freeze period: 2025-09-30 [1.18.0]: https://github.com/crystal-lang/crystal/releases/1.18.0 @@ -13,41 +13,52 @@ Freeze period: 2025-09-23 - Support `ProcPointer`s of lib funs with parameter types ([#16089], thanks @HertzDevil) - _(annotations)_ Print deprecation warning on types and aliases ([#15962], thanks @ysbaddaden) - _(annotations)_ Print deprecation warnings on deprecated method argument ([#15999], thanks @ysbaddaden) +- _(macros)_ Add `ArrayLiteral#*` and `StringLiteral#*` ([#16154], thanks @jneen) [#16089]: https://github.com/crystal-lang/crystal/pull/16089 [#15962]: https://github.com/crystal-lang/crystal/pull/15962 [#15999]: https://github.com/crystal-lang/crystal/pull/15999 +[#16154]: https://github.com/crystal-lang/crystal/pull/16154 #### stdlib -- Add `summary_width` and `summary_indent` to `OptionParser` in Crystal ([#15326], thanks @kojix2) +- Add `summary_width` and `summary_indent` to `OptionParser` ([#15326], thanks @kojix2) - _(collection)_ Add `Set#select!` and `#reject!` ([#16060], thanks @HertzDevil) - _(collection)_ Expand empty `(Named)TupleLiteral` to `(Named)Tuple.new` instead of `{}` ([#16108], thanks @spuun) - _(concurrency)_ Speed up `Parallel::Scheduler#quick_dequeue?` for `max=1` ([#15961], thanks @ysbaddaden) +- _(concurrency)_ Default execution context is now parallel (MT:1) ([#16136], thanks @ysbaddaden) - _(files)_ **[deprecation]** Add `.set_blocking` to `Socket` and `IO::FileDescriptor` and deprecate `#blocking` property ([#16033], [#16129], thanks @ysbaddaden) - _(llvm)_ Support LLVM 21.1 and 22.0 ([#16062], thanks @HertzDevil) +- _(macros)_ Add `NumberLiteral#zero?` ([#10248], thanks @Sija) +- _(networking)_ Fix `URI#host=` to wrap IPv6 address in brackets ([#16164], thanks @stakach) - _(runtime)_ Lazily instantiate the event loop of isolated execution contexts ([#16063], thanks @ysbaddaden) - _(runtime)_ Add `Fiber::ExecutionContext::Parallel#resize` ([#15956], thanks @ysbaddaden) - _(runtime)_ Add `Crystal::System.effective_cpu_count` ([#16148], thanks @ysbaddaden) - _(serialization)_ Add `Time::Location.from_json_object_key` ([#15957], thanks @Sija) -- _(serialization)_ Resolve aliases in `YAML::Any` ([#15941], thanks @willhbr) +- _(serialization)_ Resolve YAML aliases in `YAML::Any` ([#15941], thanks @willhbr) - _(serialization)_ Embed libxml2 version number on Windows MSVC ([#16104], thanks @HertzDevil) - _(serialization)_ Add `JSON::Any` wrapper around `JSON::Any#inspect` output ([#15979], thanks @jneen) - _(specs)_ Add `with_tempdir` spec helper ([#16005], thanks @straight-shoota) - _(system)_ Add `File.readlink?` ([#16004], thanks @straight-shoota) - _(text)_ Add `SemanticVersion.valid?` & `SemanticVersion.parse?` ([#15051], thanks @devnote-dev) - _(text)_ Add `String.additive_identity` ([#15998], thanks @straight-shoota) +- _(text)_ Use proper ANSI reset codes in `Colorize` ([#16052], thanks @Blacksmoke16) +- _(text)_ Update Unicode to 17.0.0 ([#16160], thanks @HertzDevil) - _(time)_ Use canonical IANA name for the local Windows system time zone ([#15967], thanks @HertzDevil) - _(time)_ Load `Location.local` by symlink name ([#16002], [#16022], thanks @straight-shoota) - _(time)_ Add `Time::Location.load?` ([#16121], thanks @straight-shoota) +- _(time)_ Format `Time#inspect` with Internet Extended Date/Time Format ([#16039], thanks @straight-shoota) [#15326]: https://github.com/crystal-lang/crystal/pull/15326 [#16060]: https://github.com/crystal-lang/crystal/pull/16060 [#16108]: https://github.com/crystal-lang/crystal/pull/16108 [#15961]: https://github.com/crystal-lang/crystal/pull/15961 +[#16136]: https://github.com/crystal-lang/crystal/pull/16136 [#16033]: https://github.com/crystal-lang/crystal/pull/16033 [#16129]: https://github.com/crystal-lang/crystal/pull/16129 [#16062]: https://github.com/crystal-lang/crystal/pull/16062 +[#10248]: https://github.com/crystal-lang/crystal/pull/10248 +[#16164]: https://github.com/crystal-lang/crystal/pull/16164 [#16063]: https://github.com/crystal-lang/crystal/pull/16063 [#15956]: https://github.com/crystal-lang/crystal/pull/15956 [#16148]: https://github.com/crystal-lang/crystal/pull/16148 @@ -59,20 +70,25 @@ Freeze period: 2025-09-23 [#16004]: https://github.com/crystal-lang/crystal/pull/16004 [#15051]: https://github.com/crystal-lang/crystal/pull/15051 [#15998]: https://github.com/crystal-lang/crystal/pull/15998 +[#16052]: https://github.com/crystal-lang/crystal/pull/16052 +[#16160]: https://github.com/crystal-lang/crystal/pull/16160 [#15967]: https://github.com/crystal-lang/crystal/pull/15967 [#16002]: https://github.com/crystal-lang/crystal/pull/16002 [#16022]: https://github.com/crystal-lang/crystal/pull/16022 [#16121]: https://github.com/crystal-lang/crystal/pull/16121 +[#16039]: https://github.com/crystal-lang/crystal/pull/16039 #### compiler - _(cli)_ Add the ability to dump type information to a JSON file ([#16027], thanks @HertzDevil) - _(interpreter)_ Support `Proc.new(Void*, Void*)` in the interpreter ([#16044], thanks @HertzDevil) +- _(interpreter:repl)_ Fully exit the process on `exit!` from REPL ([#16171], thanks @jneen) - _(semantic)_ Resolve types when guessing return type from class method overloads ([#16118], thanks @HertzDevil) - _(semantic)_ Guess instance variable types from global method calls ([#16119], thanks @HertzDevil) [#16027]: https://github.com/crystal-lang/crystal/pull/16027 [#16044]: https://github.com/crystal-lang/crystal/pull/16044 +[#16171]: https://github.com/crystal-lang/crystal/pull/16171 [#16118]: https://github.com/crystal-lang/crystal/pull/16118 [#16119]: https://github.com/crystal-lang/crystal/pull/16119 @@ -84,6 +100,12 @@ Freeze period: 2025-09-23 [#16012]: https://github.com/crystal-lang/crystal/pull/16012 [#16026]: https://github.com/crystal-lang/crystal/pull/16026 +#### other + +- Improve `Fiber::ExecutionContext.default_workers_count` ([#16149], thanks @ysbaddaden) + +[#16149]: https://github.com/crystal-lang/crystal/pull/16149 + ### Bugfixes #### stdlib @@ -98,6 +120,7 @@ Freeze period: 2025-09-23 - _(serialization)_ Fix pointer access bug in `XML::NodeSet` ([#16055], thanks @toddsundsted) - _(serialization)_ Remove `NOERROR` from LibXML default options ([#16103], thanks @straight-shoota) - _(serialization)_ Move `*::Serializable`'s private constructors into `macro included` hook ([#16147], thanks @HertzDevil) +- _(serialization)_ Correctly reference global JSON/YAML modules ([#16161], [#16169], thanks @Sija, @straight-shoota) - _(system)_ Fix return type of `system_close_on_exec=` on Windows ([#16095], thanks @straight-shoota) - _(time)_ Fix time zone identifier `America/Argentina/Buenos_Aires` ([#16078], thanks @straight-shoota) - _(time)_ Fix `Time#at_beginning_of_week`,`#at_end_of_week` to respect local timezone ([#16113], thanks @straight-shoota) @@ -113,6 +136,8 @@ Freeze period: 2025-09-23 [#16055]: https://github.com/crystal-lang/crystal/pull/16055 [#16103]: https://github.com/crystal-lang/crystal/pull/16103 [#16147]: https://github.com/crystal-lang/crystal/pull/16147 +[#16161]: https://github.com/crystal-lang/crystal/pull/16161 +[#16169]: https://github.com/crystal-lang/crystal/pull/16169 [#16095]: https://github.com/crystal-lang/crystal/pull/16095 [#16078]: https://github.com/crystal-lang/crystal/pull/16078 [#16113]: https://github.com/crystal-lang/crystal/pull/16113 @@ -122,6 +147,7 @@ Freeze period: 2025-09-23 - _(codegen)_ Never generate assignments to a block's underscore parameters ([#16057], thanks @HertzDevil) - _(codegen)_ Fix `@[Primitive]` codegen for typedefs ([#16110], thanks @HertzDevil) - _(interpreter)_ never generate assignments to a block's underscore parameters ([#16058], thanks @HertzDevil) +- _(interpreter)_ Add `writer.close_on_finalize = false` for signal pipe ([#16167], thanks @straight-shoota) - _(interpreter:repl)_ Continue REPL prompt if input consists entirely of annotations ([#16045], thanks @HertzDevil) - _(parser)_ Disallow unterminated escaped heredoc without trailing newline ([#16046], thanks @HertzDevil) - _(parser)_ Require space, semicolon, or newline after class/module/etc. header ([#13375], thanks @FnControlOption) @@ -130,6 +156,7 @@ Freeze period: 2025-09-23 - _(semantic)_ deprecation warning for (expanded) deprecated def ([#15997], thanks @ysbaddaden) - _(semantic)_ Copy annotations in `Crystal::Arg#copy_without_location` ([#16008], thanks @ysbaddaden) - _(semantic)_ Copy annotations in `Crystal::Def#expand_default_arguments` ([#16007], thanks @ysbaddaden) +- _(semantic)_ Copy annotations in `Crystal::Def#expand_new_default_arguments` ([#16013], thanks @ysbaddaden) - _(semantic)_ Fix error message for `StaticArray` with non-integer generic argument `N` ([#16037], thanks @straight-shoota) - _(semantic)_ Resolve bound type parameters from generic superclass during path lookup ([#10839], thanks @HertzDevil) - _(semantic)_ **[regression]** Ensure hash literals are evaluated from left to right ([#16124], thanks @HertzDevil) @@ -137,6 +164,7 @@ Freeze period: 2025-09-23 [#16057]: https://github.com/crystal-lang/crystal/pull/16057 [#16110]: https://github.com/crystal-lang/crystal/pull/16110 [#16058]: https://github.com/crystal-lang/crystal/pull/16058 +[#16167]: https://github.com/crystal-lang/crystal/pull/16167 [#16045]: https://github.com/crystal-lang/crystal/pull/16045 [#16046]: https://github.com/crystal-lang/crystal/pull/16046 [#13375]: https://github.com/crystal-lang/crystal/pull/13375 @@ -145,14 +173,22 @@ Freeze period: 2025-09-23 [#15997]: https://github.com/crystal-lang/crystal/pull/15997 [#16008]: https://github.com/crystal-lang/crystal/pull/16008 [#16007]: https://github.com/crystal-lang/crystal/pull/16007 +[#16013]: https://github.com/crystal-lang/crystal/pull/16013 [#16037]: https://github.com/crystal-lang/crystal/pull/16037 [#10839]: https://github.com/crystal-lang/crystal/pull/10839 [#16124]: https://github.com/crystal-lang/crystal/pull/16124 +#### other + +- `Fiber::ExecutionContext::Parallel::Scheduler#tick` must be unsigned ([#16155], thanks @ysbaddaden) + +[#16155]: https://github.com/crystal-lang/crystal/pull/16155 + ### Chores #### stdlib +- _(concurrency)_ **[deprecation]** Deprecate `Atomic::Flag` ([#15805], thanks @ysbaddaden) - _(files)_ **[deprecation]** Deprecate the `blocking` parameter of `File`, `Socket` and `IO::FileDescriptor` constructors ([#16034], [#16047], thanks @ysbaddaden, @Blacksmoke16) - _(files)_ Add type restrictions to mime ([#15834], thanks @Vici37) - _(log)_ Add type restrictions to Log directory ([#15777], thanks @Vici37) @@ -162,6 +198,7 @@ Freeze period: 2025-09-23 - _(serialization)_ Add type restrictions to json ([#15840], [#16142], thanks @Vici37, @Sija) - _(system)_ **[deprecation]** Deprecate `Process::Status#exit_signal` ([#16003], thanks @straight-shoota) +[#15805]: https://github.com/crystal-lang/crystal/pull/15805 [#16034]: https://github.com/crystal-lang/crystal/pull/16034 [#16047]: https://github.com/crystal-lang/crystal/pull/16047 [#15834]: https://github.com/crystal-lang/crystal/pull/15834 @@ -205,6 +242,7 @@ Freeze period: 2025-09-23 - _(concurrency)_ Refactor redundant `begin ... end` blocks ([#16011], thanks @straight-shoota) - _(networking)_ Reorder implementation of `HTTP::Cookies#<<` and `[]=` ([#16107], thanks @straight-shoota) +- _(networking)_ Fix `UDPSocket` broadcast spec to not use `connect` ([#16165], thanks @ysbaddaden) - _(runtime)_ Remove nilable pointers in `Crystal::PointerPairingHeap` ([#15973], thanks @HertzDevil) - _(runtime)_ Remove nilable pointer in `Crystal::EventLoop::IOCP#@timer_packet` ([#15975], thanks @HertzDevil) - _(runtime)_ Remove minimum in `Fiber::ExecutionContext::Parallel` ([#15946], thanks @ysbaddaden) @@ -215,6 +253,7 @@ Freeze period: 2025-09-23 [#16011]: https://github.com/crystal-lang/crystal/pull/16011 [#16107]: https://github.com/crystal-lang/crystal/pull/16107 +[#16165]: https://github.com/crystal-lang/crystal/pull/16165 [#15973]: https://github.com/crystal-lang/crystal/pull/15973 [#15975]: https://github.com/crystal-lang/crystal/pull/15975 [#15946]: https://github.com/crystal-lang/crystal/pull/15946 @@ -231,6 +270,12 @@ Freeze period: 2025-09-23 [#16056]: https://github.com/crystal-lang/crystal/pull/16056 [#16115]: https://github.com/crystal-lang/crystal/pull/16115 +#### tools + +- _(formatter)_ Simplify control flow in formatter for `Call` nodes ([#16170], thanks @straight-shoota) + +[#16170]: https://github.com/crystal-lang/crystal/pull/16170 + #### other - Refactor `unless ... else` ([#16010], thanks @straight-shoota) @@ -317,6 +362,7 @@ Freeze period: 2025-09-23 ### Infrastructure +- Changelog for 1.18.0 ([#16153], thanks @straight-shoota) - Update previous Crystal release 1.17.0 ([#15988], thanks @straight-shoota) - Support debug builds for the MSVC Boehm GC libraries ([#15968], thanks @HertzDevil) - Fix funding.json well-known file name ([#16000], thanks @matiasgarciaisaia) @@ -342,6 +388,7 @@ Freeze period: 2025-09-23 - _(ci)_ Trigger LLVM CI when codegen files are changed ([#16116], thanks @HertzDevil) - _(ci)_ Do not use D drive on MSVC CI ([#15986], thanks @HertzDevil) +[#16153]: https://github.com/crystal-lang/crystal/pull/16153 [#15988]: https://github.com/crystal-lang/crystal/pull/15988 [#15968]: https://github.com/crystal-lang/crystal/pull/15968 [#16000]: https://github.com/crystal-lang/crystal/pull/16000 @@ -367,26 +414,6 @@ Freeze period: 2025-09-23 [#16116]: https://github.com/crystal-lang/crystal/pull/16116 [#15986]: https://github.com/crystal-lang/crystal/pull/15986 -### other - -#### stdlib - -- _(concurrency)_ **[deprecation]** Deprecate `Atomic::Flag` ([#15805], thanks @ysbaddaden) - -[#15805]: https://github.com/crystal-lang/crystal/pull/15805 - -#### compiler - -- _(semantic)_ Fix: Copy annotations in `Crystal::Def#expand_new_default_arguments` ([#16013], thanks @ysbaddaden) - -[#16013]: https://github.com/crystal-lang/crystal/pull/16013 - -#### other - -- Default execution context is now parallel (MT:1) ([#16136], thanks @ysbaddaden) - -[#16136]: https://github.com/crystal-lang/crystal/pull/16136 - ## Previous Releases For information on prior releases, refer to their changelogs: diff --git a/src/SOURCE_DATE_EPOCH b/src/SOURCE_DATE_EPOCH index 2f12990bbb53..d73cc94894ce 100644 --- a/src/SOURCE_DATE_EPOCH +++ b/src/SOURCE_DATE_EPOCH @@ -1 +1 @@ -1759795200 +1760400000 From a8eafab796c02dab0da8d7d019099a9cc1d62198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 29 Sep 2025 11:58:04 +0200 Subject: [PATCH 5/6] Update changelog for 1.18.0 --- CHANGELOG.md | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 109f18c0722a..caf9b0cf2702 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,18 +13,19 @@ Freeze period: 2025-09-30 - Support `ProcPointer`s of lib funs with parameter types ([#16089], thanks @HertzDevil) - _(annotations)_ Print deprecation warning on types and aliases ([#15962], thanks @ysbaddaden) - _(annotations)_ Print deprecation warnings on deprecated method argument ([#15999], thanks @ysbaddaden) +- _(macros)_ **[breaking]** Expand empty `(Named)TupleLiteral` to `(Named)Tuple.new` instead of `{}` ([#16108], thanks @spuun) - _(macros)_ Add `ArrayLiteral#*` and `StringLiteral#*` ([#16154], thanks @jneen) [#16089]: https://github.com/crystal-lang/crystal/pull/16089 [#15962]: https://github.com/crystal-lang/crystal/pull/15962 [#15999]: https://github.com/crystal-lang/crystal/pull/15999 +[#16108]: https://github.com/crystal-lang/crystal/pull/16108 [#16154]: https://github.com/crystal-lang/crystal/pull/16154 #### stdlib - Add `summary_width` and `summary_indent` to `OptionParser` ([#15326], thanks @kojix2) - _(collection)_ Add `Set#select!` and `#reject!` ([#16060], thanks @HertzDevil) -- _(collection)_ Expand empty `(Named)TupleLiteral` to `(Named)Tuple.new` instead of `{}` ([#16108], thanks @spuun) - _(concurrency)_ Speed up `Parallel::Scheduler#quick_dequeue?` for `max=1` ([#15961], thanks @ysbaddaden) - _(concurrency)_ Default execution context is now parallel (MT:1) ([#16136], thanks @ysbaddaden) - _(files)_ **[deprecation]** Add `.set_blocking` to `Socket` and `IO::FileDescriptor` and deprecate `#blocking` property ([#16033], [#16129], thanks @ysbaddaden) @@ -34,6 +35,7 @@ Freeze period: 2025-09-30 - _(runtime)_ Lazily instantiate the event loop of isolated execution contexts ([#16063], thanks @ysbaddaden) - _(runtime)_ Add `Fiber::ExecutionContext::Parallel#resize` ([#15956], thanks @ysbaddaden) - _(runtime)_ Add `Crystal::System.effective_cpu_count` ([#16148], thanks @ysbaddaden) +- _(runtime)_ Improve `Fiber::ExecutionContext.default_workers_count` ([#16149], thanks @ysbaddaden) - _(serialization)_ Add `Time::Location.from_json_object_key` ([#15957], thanks @Sija) - _(serialization)_ Resolve YAML aliases in `YAML::Any` ([#15941], thanks @willhbr) - _(serialization)_ Embed libxml2 version number on Windows MSVC ([#16104], thanks @HertzDevil) @@ -51,7 +53,6 @@ Freeze period: 2025-09-30 [#15326]: https://github.com/crystal-lang/crystal/pull/15326 [#16060]: https://github.com/crystal-lang/crystal/pull/16060 -[#16108]: https://github.com/crystal-lang/crystal/pull/16108 [#15961]: https://github.com/crystal-lang/crystal/pull/15961 [#16136]: https://github.com/crystal-lang/crystal/pull/16136 [#16033]: https://github.com/crystal-lang/crystal/pull/16033 @@ -62,6 +63,7 @@ Freeze period: 2025-09-30 [#16063]: https://github.com/crystal-lang/crystal/pull/16063 [#15956]: https://github.com/crystal-lang/crystal/pull/15956 [#16148]: https://github.com/crystal-lang/crystal/pull/16148 +[#16149]: https://github.com/crystal-lang/crystal/pull/16149 [#15957]: https://github.com/crystal-lang/crystal/pull/15957 [#15941]: https://github.com/crystal-lang/crystal/pull/15941 [#16104]: https://github.com/crystal-lang/crystal/pull/16104 @@ -100,12 +102,6 @@ Freeze period: 2025-09-30 [#16012]: https://github.com/crystal-lang/crystal/pull/16012 [#16026]: https://github.com/crystal-lang/crystal/pull/16026 -#### other - -- Improve `Fiber::ExecutionContext.default_workers_count` ([#16149], thanks @ysbaddaden) - -[#16149]: https://github.com/crystal-lang/crystal/pull/16149 - ### Bugfixes #### stdlib @@ -116,6 +112,7 @@ Freeze period: 2025-09-30 - _(networking)_ Fix `StaticFileHandler` to return 404 on file error ([#16025], [#16077], thanks @straight-shoota) - _(networking)_ Run `before_request` callback in `HTTP::Client` only once ([#16064], thanks @straight-shoota) - _(networking)_ Fix `HTTP::Request#query=` typing ([#16143], thanks @Blacksmoke16) +- _(runtime)_ `Fiber::ExecutionContext::Parallel::Scheduler#tick` must be unsigned ([#16155], thanks @ysbaddaden) - _(serialization)_ Fix add missing `#==` overloads for `Log::Metadata::Value` and `YAML::Any` ([#15732], thanks @straight-shoota) - _(serialization)_ Fix pointer access bug in `XML::NodeSet` ([#16055], thanks @toddsundsted) - _(serialization)_ Remove `NOERROR` from LibXML default options ([#16103], thanks @straight-shoota) @@ -132,6 +129,7 @@ Freeze period: 2025-09-30 [#16077]: https://github.com/crystal-lang/crystal/pull/16077 [#16064]: https://github.com/crystal-lang/crystal/pull/16064 [#16143]: https://github.com/crystal-lang/crystal/pull/16143 +[#16155]: https://github.com/crystal-lang/crystal/pull/16155 [#15732]: https://github.com/crystal-lang/crystal/pull/15732 [#16055]: https://github.com/crystal-lang/crystal/pull/16055 [#16103]: https://github.com/crystal-lang/crystal/pull/16103 @@ -178,36 +176,19 @@ Freeze period: 2025-09-30 [#10839]: https://github.com/crystal-lang/crystal/pull/10839 [#16124]: https://github.com/crystal-lang/crystal/pull/16124 -#### other - -- `Fiber::ExecutionContext::Parallel::Scheduler#tick` must be unsigned ([#16155], thanks @ysbaddaden) - -[#16155]: https://github.com/crystal-lang/crystal/pull/16155 - ### Chores #### stdlib - _(concurrency)_ **[deprecation]** Deprecate `Atomic::Flag` ([#15805], thanks @ysbaddaden) - _(files)_ **[deprecation]** Deprecate the `blocking` parameter of `File`, `Socket` and `IO::FileDescriptor` constructors ([#16034], [#16047], thanks @ysbaddaden, @Blacksmoke16) -- _(files)_ Add type restrictions to mime ([#15834], thanks @Vici37) -- _(log)_ Add type restrictions to Log directory ([#15777], thanks @Vici37) -- _(networking)_ Add type restrictions to Oauth directory ([#15687], thanks @Vici37) - _(numeric)_ **[deprecation]** Deprecate `Float::Printer::IEEE` ([#16050], thanks @HertzDevil) -- _(runtime)_ Disable flaky spec for `Fiber::ExecutionContext::GlobalQueue` on macOS ([#16146], thanks @ysbaddaden) -- _(serialization)_ Add type restrictions to json ([#15840], [#16142], thanks @Vici37, @Sija) - _(system)_ **[deprecation]** Deprecate `Process::Status#exit_signal` ([#16003], thanks @straight-shoota) [#15805]: https://github.com/crystal-lang/crystal/pull/15805 [#16034]: https://github.com/crystal-lang/crystal/pull/16034 [#16047]: https://github.com/crystal-lang/crystal/pull/16047 -[#15834]: https://github.com/crystal-lang/crystal/pull/15834 -[#15777]: https://github.com/crystal-lang/crystal/pull/15777 -[#15687]: https://github.com/crystal-lang/crystal/pull/15687 [#16050]: https://github.com/crystal-lang/crystal/pull/16050 -[#16146]: https://github.com/crystal-lang/crystal/pull/16146 -[#15840]: https://github.com/crystal-lang/crystal/pull/15840 -[#16142]: https://github.com/crystal-lang/crystal/pull/16142 [#16003]: https://github.com/crystal-lang/crystal/pull/16003 ### Performance @@ -242,7 +223,6 @@ Freeze period: 2025-09-30 - _(concurrency)_ Refactor redundant `begin ... end` blocks ([#16011], thanks @straight-shoota) - _(networking)_ Reorder implementation of `HTTP::Cookies#<<` and `[]=` ([#16107], thanks @straight-shoota) -- _(networking)_ Fix `UDPSocket` broadcast spec to not use `connect` ([#16165], thanks @ysbaddaden) - _(runtime)_ Remove nilable pointers in `Crystal::PointerPairingHeap` ([#15973], thanks @HertzDevil) - _(runtime)_ Remove nilable pointer in `Crystal::EventLoop::IOCP#@timer_packet` ([#15975], thanks @HertzDevil) - _(runtime)_ Remove minimum in `Fiber::ExecutionContext::Parallel` ([#15946], thanks @ysbaddaden) @@ -253,7 +233,6 @@ Freeze period: 2025-09-30 [#16011]: https://github.com/crystal-lang/crystal/pull/16011 [#16107]: https://github.com/crystal-lang/crystal/pull/16107 -[#16165]: https://github.com/crystal-lang/crystal/pull/16165 [#15973]: https://github.com/crystal-lang/crystal/pull/15973 [#15975]: https://github.com/crystal-lang/crystal/pull/15975 [#15946]: https://github.com/crystal-lang/crystal/pull/15946 @@ -292,12 +271,16 @@ Freeze period: 2025-09-30 - _(concurrency)_ Improve docs for `Channel#close` ([#15910], thanks @anaPerezGhiglia) - _(crypto)_ Fix doc example for `Crypto::BCrypt.new(String, String, Int)` ([#15931], thanks @hugopl) - _(crypto)_ Add type restrictions to crypto directory ([#15694], thanks @Vici37) +- _(files)_ Add type restrictions to mime ([#15834], thanks @Vici37) - _(files)_ Fix `IO::TimeoutError` documentation use of deprecated `read_timeout=` ([#16073], thanks @lachlan) - _(files)_ Add type restrictions to io ([#15698], thanks @Vici37) - _(llvm)_ Deprecate each `LLVM::ABI::*` classes ([#15989], thanks @ysbaddaden) +- _(log)_ Add type restrictions to Log directory ([#15777], thanks @Vici37) +- _(networking)_ Add type restrictions to Oauth directory ([#15687], thanks @Vici37) - _(networking)_ Add type restrictions to http ([#15710], thanks @Vici37) - _(numeric)_ Add type restrictions to big ([#15689], thanks @Vici37) - _(runtime)_ Fix typo in `Object` docs ([#16035], thanks @plambert) +- _(serialization)_ Add type restrictions to json ([#15840], [#16142], thanks @Vici37, @Sija) - _(serialization)_ Add note about default constructor in `*::Serializable` ([#16080], thanks @HertzDevil) - _(system)_ Add type restrictions to `args` parameter in `Process` ([#16031], thanks @BigBoyBarney) - _(system)_ Add missing `File::NotFoundError` exception documentation for `File.open` ([#15826], thanks @Fijxu) @@ -309,12 +292,17 @@ Freeze period: 2025-09-30 [#15910]: https://github.com/crystal-lang/crystal/pull/15910 [#15931]: https://github.com/crystal-lang/crystal/pull/15931 [#15694]: https://github.com/crystal-lang/crystal/pull/15694 +[#15834]: https://github.com/crystal-lang/crystal/pull/15834 [#16073]: https://github.com/crystal-lang/crystal/pull/16073 [#15698]: https://github.com/crystal-lang/crystal/pull/15698 [#15989]: https://github.com/crystal-lang/crystal/pull/15989 +[#15777]: https://github.com/crystal-lang/crystal/pull/15777 +[#15687]: https://github.com/crystal-lang/crystal/pull/15687 [#15710]: https://github.com/crystal-lang/crystal/pull/15710 [#15689]: https://github.com/crystal-lang/crystal/pull/15689 [#16035]: https://github.com/crystal-lang/crystal/pull/16035 +[#15840]: https://github.com/crystal-lang/crystal/pull/15840 +[#16142]: https://github.com/crystal-lang/crystal/pull/16142 [#16080]: https://github.com/crystal-lang/crystal/pull/16080 [#16031]: https://github.com/crystal-lang/crystal/pull/16031 [#15826]: https://github.com/crystal-lang/crystal/pull/15826 @@ -329,11 +317,15 @@ Freeze period: 2025-09-30 - _(networking)_ Disable UDP multicast spec on macOS ([#15990], thanks @straight-shoota) - _(networking)_ Extract specs for `HTTP::Cookies` to their own file ([#16106], thanks @straight-shoota) - _(networking)_ Overhaul `HTTP::Cookies` specs ([#16117], thanks @straight-shoota) +- _(networking)_ Fix `UDPSocket` broadcast spec to not use `connect` ([#16165], thanks @ysbaddaden) +- _(runtime)_ Disable flaky spec for `Fiber::ExecutionContext::GlobalQueue` on macOS ([#16146], thanks @ysbaddaden) - _(system)_ Enable specs for `close_on_exec` on Windows ([#14716], thanks @straight-shoota) [#15990]: https://github.com/crystal-lang/crystal/pull/15990 [#16106]: https://github.com/crystal-lang/crystal/pull/16106 [#16117]: https://github.com/crystal-lang/crystal/pull/16117 +[#16165]: https://github.com/crystal-lang/crystal/pull/16165 +[#16146]: https://github.com/crystal-lang/crystal/pull/16146 [#14716]: https://github.com/crystal-lang/crystal/pull/14716 #### compiler From 4ebf7675ff5b6c9ec7f15f8c13ab879533cd3b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 29 Sep 2025 20:17:00 +0200 Subject: [PATCH 6/6] Update changelog for 1.18.0 --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index caf9b0cf2702..57e8c6c45cac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -102,6 +102,12 @@ Freeze period: 2025-09-30 [#16012]: https://github.com/crystal-lang/crystal/pull/16012 [#16026]: https://github.com/crystal-lang/crystal/pull/16026 +#### other + +- Add `thread_local` macro ([#16173], thanks @ysbaddaden) + +[#16173]: https://github.com/crystal-lang/crystal/pull/16173 + ### Bugfixes #### stdlib @@ -113,6 +119,7 @@ Freeze period: 2025-09-30 - _(networking)_ Run `before_request` callback in `HTTP::Client` only once ([#16064], thanks @straight-shoota) - _(networking)_ Fix `HTTP::Request#query=` typing ([#16143], thanks @Blacksmoke16) - _(runtime)_ `Fiber::ExecutionContext::Parallel::Scheduler#tick` must be unsigned ([#16155], thanks @ysbaddaden) +- _(serialization)_ Fix element type inference in `YAML::ArrayConverter.from_yaml` ([#16166], thanks @HertzDevil) - _(serialization)_ Fix add missing `#==` overloads for `Log::Metadata::Value` and `YAML::Any` ([#15732], thanks @straight-shoota) - _(serialization)_ Fix pointer access bug in `XML::NodeSet` ([#16055], thanks @toddsundsted) - _(serialization)_ Remove `NOERROR` from LibXML default options ([#16103], thanks @straight-shoota) @@ -130,6 +137,7 @@ Freeze period: 2025-09-30 [#16064]: https://github.com/crystal-lang/crystal/pull/16064 [#16143]: https://github.com/crystal-lang/crystal/pull/16143 [#16155]: https://github.com/crystal-lang/crystal/pull/16155 +[#16166]: https://github.com/crystal-lang/crystal/pull/16166 [#15732]: https://github.com/crystal-lang/crystal/pull/15732 [#16055]: https://github.com/crystal-lang/crystal/pull/16055 [#16103]: https://github.com/crystal-lang/crystal/pull/16103 @@ -191,6 +199,12 @@ Freeze period: 2025-09-30 [#16050]: https://github.com/crystal-lang/crystal/pull/16050 [#16003]: https://github.com/crystal-lang/crystal/pull/16003 +#### other + +- Drop `Thread::Local(T)` ([#16179], thanks @ysbaddaden) + +[#16179]: https://github.com/crystal-lang/crystal/pull/16179 + ### Performance #### lang