Download Latest Version crystal-1.18.0-windows-x86_64-gnu-unsupported.zip (60.7 MB)
Email in envelope

Get an email when there's a new version of Crystal

Home / 1.18.0
Name Modified Size InfoDownloads / Week
Parent folder
crystal-1.18.0-windows-x86_64-msvc-unsupported.zip < 21 hours ago 52.5 MB
crystal-1.18.0-windows-aarch64-gnu-unsupported.zip < 21 hours ago 59.5 MB
crystal-1.18.0-windows-x86_64-gnu-unsupported.zip < 21 hours ago 60.7 MB
crystal-1.18.0-windows-x86_64-msvc-unsupported.exe < 21 hours ago 36.2 MB
crystal-1.18.0-1-darwin-universal.tar.gz < 21 hours ago 59.6 MB
crystal-1.18.0-1-linux-x86_64-bundled.tar.gz < 21 hours ago 52.4 MB
crystal-1.18.0-1-linux-x86_64.tar.gz < 21 hours ago 52.0 MB
crystal-1.18.0-1.universal.pkg < 21 hours ago 59.6 MB
crystal-1.18.0-docs.tar.gz < 21 hours ago 16.5 MB
1.18.0 source code.tar.gz < 23 hours ago 3.9 MB
1.18.0 source code.zip < 23 hours ago 4.8 MB
README.md < 23 hours ago 26.5 kB
Totals: 12 Items   457.8 MB 0

Features

lang

  • Support ProcPointers 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#*, StringLiteral#* and TupleLiteral#* (#16154, #16206, thanks @jneen, @ysbaddaden)

stdlib

  • Add summary_width and summary_indent to OptionParser (#15326, thanks @kojix2)
  • (collection) Add Set#select! and #reject! (#16060, thanks @HertzDevil)
  • (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, #16198, thanks @HertzDevil, @straight-shoota)
  • (macros) Add NumberLiteral#zero? (#10248, thanks @Sija)
  • (macros) Add thread_local macro (#16173, thanks @ysbaddaden)
  • (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)
  • (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)
  • (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)

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)

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)

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)
  • (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)
  • (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)
  • (serialization) Fix element type inference in YAML::ArrayConverter.from_yaml (#16166, 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)

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)
  • (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)
  • (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) 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)

Chores

stdlib

  • Drop Thread::Local(T) (#16179, thanks @ysbaddaden)
  • (concurrency) [deprecation] Deprecate Atomic::Flag (#15805, thanks @ysbaddaden)
  • (files) [deprecation] Deprecate the blocking parameter of File, Socket and IO::FileDescriptor constructors (#16034, #16043, #16047, thanks @ysbaddaden, @Blacksmoke16)
  • (numeric) [deprecation] Deprecate Float::Printer::IEEE (#16050, thanks @HertzDevil)
  • (system) [deprecation] Deprecate Process::Status#exit_signal (#16003, thanks @straight-shoota)

Performance

lang

  • Optimize Enum.parse?, avoiding allocations (#15927, #16192, thanks @jgaskins, @straight-shoota)

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)

compiler

  • Inline Crystal.check_type_can_be_stored (#16130, thanks @HertzDevil)
  • (codegen) Group temporary variables by file name: compound array assignments (#16122, thanks @HertzDevil)

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, #16183, 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 (#15858, thanks @MatheusRich)
  • (time) Remove the old Windows time zone name table (#16006, thanks @HertzDevil)

compiler

  • (codegen) Refactor Compiler#must_compile? to clarify the rules. (#16056, thanks @kojix2)
  • (parser) Add #has_any_args? method for ASTNodes (#16115, thanks @straight-shoota)

tools

  • (formatter) Simplify control flow in formatter for Call nodes (#16170, thanks @straight-shoota)

other

  • Refactor unless ... else (#16010, thanks @straight-shoota)
  • Removed unused variables (#16014, thanks @straight-shoota)

Documentation

lang

  • (annotations) Enhance documentation of Deprecated annotation (#16195, thanks @straight-shoota)

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) 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)
  • (runtime) Tweak docs for Fiber::ExecutionContext (#16196, thanks @ysbaddaden)
  • (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)
  • (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)

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)
  • (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)

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)

tools

  • (formatter) Add specs for x.[](y) syntax (#16109, thanks @straight-shoota)

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)
  • 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 option in man page (#16133, thanks @kojix2)
  • Makefile: Skip grisu3 float printer deprecations in std_spec (#16185, thanks @ysbaddaden)
  • Fix changelog format for Markdown linter (#16188, thanks @straight-shoota)
  • (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) Update deprecated macos-13 to macos-15-intel (#16197, thanks @straight-shoota)
  • (ci) Trigger LLVM CI when codegen files are changed (#16116, thanks @HertzDevil)
  • (ci) Do not use D drive on MSVC CI (#15986, thanks @HertzDevil)
Source: README.md, updated 2025-10-14