Back to Crystal

Changelog 1.12

doc/changelogs/v1.12.md

1.20.122.3 KB
Original Source

Changelog 1.12

1.12.2 (2024-05-31)

Patch release with a bug fix necessary for support of latest libgc.

Bugfixes

stdlib

  • (runtime) Don't allocate in Fiber.unsafe_each and Thread.unsafe_each (#14635, thanks @ysbaddaden)

Infrastructure

  • Changelog for 1.12.2 (#14640, thanks @straight-shoota)

1.12.1 (2024-04-11)

Bugfixes

tools

  • (formatter) [regression] Fix formatter with whitespace before closing parenthesis (#14471, thanks @straight-shoota)

Infrastructure

  • Changelog for 1.12.1 (#14472, thanks @straight-shoota)

1.12.0 (2024-04-09)

Features

lang

  • Allow multiple parameters and blocks for operators ending in = (#14159, thanks @HertzDevil)

stdlib

  • (concurrency) MT: reduce interleaved backtraces in spawn unhandled exceptions (#14220, thanks @ysbaddaden)
  • (concurrency) Fix: opening/reading from fifo/chardev files are blocking the thread (#14255, thanks @ysbaddaden)
  • (concurrency) Fix: Atomics and Locks (ARM, AArch64, X86) (#14293, thanks @ysbaddaden)
  • (files) Add IO::FileDescriptor::Handle (#14390, thanks @straight-shoota)
  • (macros) Add macro methods for lib-related nodes (#14218, thanks @HertzDevil)
  • (macros) Add macro methods for Primitive (#14263, thanks @HertzDevil)
  • (macros) Add macro methods for TypeOf (#14262, thanks @HertzDevil)
  • (macros) Add macro methods for Alias (#14261, thanks @HertzDevil)
  • (macros) Add macro methods for Asm and AsmOperand (#14268, thanks @HertzDevil)
  • (macros) Relax delegate's setter detection (#14282, thanks @HertzDevil)
  • (numeric) Add BigRational#%, #tdiv, #remainder (#14306, thanks @HertzDevil)
  • (runtime) [experimental] Add ReferenceStorage for manual allocation of references (#14270, thanks @HertzDevil)
  • (runtime) Add MSVC invalid parameter handler (#14313, thanks @HertzDevil)
  • (system) Add Signal#trap_handler? (#14126, thanks @stakach)
  • (system) Thread: set name (#14257, thanks @ysbaddaden)
  • (system) Add Process.on_terminate (#13694, thanks @stakach)
  • (time) Add support for Etc/UTC time zone identifier without tzdb (#14185, thanks @femto)

compiler

  • Add CRYSTAL_CONFIG_CC compiler config (#14318, thanks @straight-shoota)
  • (cli) Respect NO_COLOR in the compiler (#14260, thanks @HertzDevil)
  • (cli) Respect --static on Windows (#14292, thanks @HertzDevil)
  • (cli) Allow --single-module and --threads for eval and spec (#14341, thanks @HertzDevil)
  • (codegen) Add --frame-pointers to control preservation of frame pointers (#13860, thanks @refi64)
  • (codegen) x86-64 Solaris / illumos support (#14343, thanks @HertzDevil)
  • (interpreter) Support @[Link]'s DLL search order in the interpreter on Windows (#14146, thanks @HertzDevil)
  • (interpreter) Automatically detect MSVC tools on Windows interpreter (#14391, thanks @HertzDevil)
  • (parser) Allow calling #[]= with a block using method syntax (#14161, thanks @HertzDevil)
  • (semantic) Change short_reference for top-level macros to ::foo (#14203, thanks @femto)

tools

  • Add crystal tool flags (#14234, thanks @straight-shoota)
  • (formatter) Add more whitespace around ProcLiterals (#14209, thanks @HertzDevil)

Bugfixes

lang

  • (macros) Remove extra newline in top-level FunDef's string representation (#14212, thanks @HertzDevil)
  • (macros) Remove T* and T[N] macro interpolation behavior inside libs (#14215, thanks @HertzDevil)

stdlib

  • (collection) Fix Hash#update when default block also adds given key (#14417, thanks @HertzDevil)
  • (collection) Fix Hash#put_if_absent putting duplicate keys (#14427, thanks @HertzDevil)
  • (concurrency) Reserve stack space on non-main threads for crash recovery on Windows (#14187, thanks @HertzDevil)
  • (concurrency) Add memory barrier to Mutex#unlock on aarch64 (#14272, thanks @jgaskins)
  • (concurrency) init schedulers before we spawn fibers (#14339, thanks @ysbaddaden)
  • (files) Make FileUtils.mv work across filesystems on Windows (#14320, thanks @HertzDevil)
  • (llvm) Use correct string size for LLVM::Type#inline_asm (#14265, thanks @HertzDevil)
  • (llvm) Fix System V ABI for packed structs with misaligned fields (#14324, thanks @HertzDevil)
  • (networking) OpenSSL 3.x reports unexpected EOF as SSL error (#14219, thanks @ysbaddaden)
  • (numeric) Make equality between Complex and other numbers exact (#14309, thanks @HertzDevil)
  • (numeric) Fix #hash for the Big* number types (#14308, thanks @HertzDevil)
  • (runtime) Do not allocate memory in the segmentation fault signal handler (#14327, thanks @HertzDevil)
  • (runtime) Fix crash stack trace decoding on macOS (#14335, thanks @HertzDevil)
  • (runtime) Crystal::RWLock should be a struct (#14345, thanks @ysbaddaden)
  • (runtime) Fix min_by? in IOCP event loop #run_once (#14394, thanks @straight-shoota)
  • (serialization) XML::Reader: Disallow attributes containing null bytes (#14193, thanks @HertzDevil)
  • (serialization) Always call LibXML.xmlInitParser when requiring XML libraries (#14191, thanks @HertzDevil)
  • (system) Fix macro Crystal::LIBRARY_PATH.split when cross-compiling (#14330, thanks @HertzDevil)
  • (system) Add SA_RESTART flag to sigaction syscall (#14351, thanks @ysbaddaden)
  • (text) Add Nil return type restriction to String::Formatter#consume_substitution (#14430, thanks @straight-shoota)

compiler

  • (cli) build --no-codegen output file name error (#14239, thanks @apainintheneck)
  • (codegen) Do not handle inline assembly with "intel" flag as AT&T syntax (#14264, thanks @HertzDevil)
  • (codegen) [breaking] Respect alignments above alignof(Void*) inside union values (#14279, thanks @HertzDevil)
  • (codegen) Fix stack corruption in union-to-union casts (#14289, thanks @HertzDevil)
  • (codegen) Don't copy DLL to output directory if file already exists (#14315, thanks @HertzDevil)
  • (codegen) Fix Proc#call that takes and returns large extern structs by value (#14323, thanks @HertzDevil)
  • (codegen) Never discard ivar initializer inside .allocate and .pre_initialize (#14337, thanks @HertzDevil)
  • (codegen) Use separate names for constant and class variable internals (#14445, thanks @HertzDevil)
  • (interpreter) fix fiber's resumable property (#14252, thanks @ysbaddaden)
  • (interpreter) Ensure all constants only have one initializer in the interpreter (#14381, thanks @HertzDevil)
  • (interpreter) Handle NaN comparisons in the interpreter (#14441, thanks @HertzDevil)
  • (interpreter) Check UInt16#to_u8 for overflow in the interpreter (#14436, thanks @HertzDevil)
  • (interpreter) Fix interpreter internal overflow for UInt128#to_f32 and #to_f32! (#14437, thanks @HertzDevil)
  • (parser) Fix name locations of FunDef and External nodes (#14267, thanks @HertzDevil)
  • (parser) Fix end locations of Alias nodes (#14271, thanks @HertzDevil)

tools

  • (formatter) Fix format for asm with comments (#14278, thanks @straight-shoota)
  • (formatter) Fix formatter for white space in a.[b] syntax (#14346, thanks @straight-shoota)
  • (formatter) Fix formatter on call without parentheses followed by doc comment (#14354, thanks @straight-shoota)
  • (formatter) Do not remove the whitespace in foo () when formatting (#14439, thanks @HertzDevil)

Chores

stdlib

  • (concurrency) [deprecation] Drop flag openbsd6.2 (#14233, thanks @straight-shoota)
  • (files) [deprecation] Deprecate timeout setters with Number arguments (#14372, thanks @straight-shoota)

compiler

  • (codegen) Drop pinning Dwarf version 2 for android (#14243, thanks @straight-shoota)

Performance

stdlib

  • (collection) Optimize hash lookup in Enumerable#group_by (#14235, thanks @straight-shoota)
  • (concurrency) Use per-scheduler stack pools (let's recycle) (#14100, thanks @ysbaddaden)

compiler

  • (codegen) on demand distribution to forked processes (#14273, thanks @ysbaddaden)
  • (interpreter) Use Fiber::StackPool in the interpreter (#14395, thanks @HertzDevil)

Refactor

stdlib

  • (files) Replace some Microsoft C runtime funs with Win32 equivalents (#14316, thanks @HertzDevil)
  • (files) Move timeout properties to Socket and IO::FileDescriptor (#14367, thanks @straight-shoota)
  • (files) Add type restrictions to #unbuffered_* implementations (#14382, thanks @straight-shoota)
  • (networking) Refactor HTTP::Client timeout ivars to Time::Span (#14371, thanks @straight-shoota)
  • (networking) Refactor Socket#system_receive to return Address (#14384, thanks @straight-shoota)
  • (networking) Refactor #system_connect without yield (#14383, thanks @straight-shoota)
  • (numeric) Add Crystal::Hasher.reduce_num and #number (#14304, thanks @HertzDevil)
  • (runtime) Refactor and add comments to IOCP #run_once (#14380, thanks @straight-shoota)
  • (specs) [deprecation] Move most of spec runner's state into Spec::CLI (#14170, thanks @HertzDevil)
  • (specs) Add Spec::Formatter#should_print_summary? (#14397, thanks @HertzDevil)

compiler

  • Ensure Crystal::Visitor#visit returns Bool (#14266, thanks @HertzDevil)
  • (parser) Add Token::Kind#unary_operator? (#14342, thanks @straight-shoota)
  • (parser) Add Lexer#wants_def_or_macro_name (#14352, thanks @straight-shoota)

Documentation

stdlib

  • (collection) Fix docs :inherit: pragma for Indexable#first (#14296, thanks @lachlan)
  • (collection) Fix Hash.new(initial_capacity, &block) doc to use relevant example (#14429, thanks @lachlan)
  • (crypto) Improve OpenSSL module documentation (#14410, thanks @summer-alice)
  • (numeric) Enhance docs for Int#downto (#14176, thanks @jkthorne)
  • (runtime) Document builtin constants (#14276, thanks @straight-shoota)
  • (runtime) Fix Pointer#+(offset: Int64) doc parameter name typo (#14428, thanks @lachlan)
  • (runtime) Improve documentation for at_exit handler conditions (#14426, thanks @straight-shoota)
  • (system) Fix typo in Signal docs (#14400, thanks @joshrickard)
  • (text) Fix Colorize.enabled?'s documentation (#14258, thanks @HertzDevil)

Specs

stdlib

  • Fix spelling in spec/std/uri/params_spec.cr (#14302, thanks @jbampton)
  • (files) Refactor expectations with SpecChannelStatus to be explicit (#14378, thanks @straight-shoota)
  • (files) Move some IO::FileDescriptor specs to the correct file (#14431, thanks @HertzDevil)
  • (system) Always preserve the environment for specs that modify ENV (#14211, thanks @HertzDevil)
  • (system) Ensure Windows time zone specs request SeTimeZonePrivilege properly (#14297, thanks @HertzDevil)
  • (text) Add single source of UTF-8 test sequences for specs (#14433, thanks @HertzDevil)
  • (time) Fix requires for time/time_spec.cr and time/format_spec.cr (#14385, thanks @HertzDevil)

compiler

  • Remove the prelude from some compiler specs (#14336, thanks @HertzDevil)
  • (interpreter) Fix: don't run thread specs with the interpreter (#14287, thanks @ysbaddaden)
  • (interpreter) Add pending_interpreted (#14386, thanks @HertzDevil)
  • (interpreter) Remove spec/interpreter_std_spec.cr (#14399, thanks @HertzDevil)
  • (semantic) Enable @[Primitive(:va_arg)] semantic spec on Windows (#14338, thanks @HertzDevil)

Infrastructure

  • Changelog for 1.12.0 (#14232, thanks @straight-shoota)
  • Remove filtering of already mentioned PRs (#14229, thanks @straight-shoota)
  • Mention RFC process in contribution instructions (#14291, thanks @straight-shoota)
  • Drop Nikola sponsor mention from Readme (#14290, thanks @straight-shoota)
  • Enhance changelog script to pull milestone info from GitHub (#14230, thanks @straight-shoota)
  • Add shard.yml (#14365, thanks @straight-shoota)
  • Update vendored dependencies (#14373, thanks @straight-shoota)
  • Fix Milestone JSON bindings in github-changelog helper (#14404, thanks @straight-shoota)
  • Make repository configurable for reusable github-changelog (#14407, thanks @straight-shoota)
  • Use link refs for PR links in changelog (#14406, thanks @straight-shoota)
  • Implement pagination for GitHub API in github-changelog helper (#14412, thanks @straight-shoota)
  • Add scripts/update-changelog.sh (#14231, thanks @straight-shoota)
  • Update distribution-scripts (#14457, thanks @straight-shoota)
  • Change some line endings from CRLF to LF (#14299, thanks @HertzDevil)
  • Update copyright year in NOTICE.md (#14329, thanks @HertzDevil)
  • Install system dependencies in the Windows GUI installer (#14328, thanks @HertzDevil)
  • Skip building llvm_ext.cc on LLVM 18 or above (#14357, thanks @HertzDevil)
  • (ci) Update previous Crystal release 1.11.0 (#14189, thanks @straight-shoota)
  • (ci) Update previous Crystal release 1.11.1 (#14224, thanks @straight-shoota)
  • (ci) Update previous Crystal release - 1.11.2 (#14251, thanks @straight-shoota)
  • (ci) Update GH Actions (#14246, thanks @renovate)
  • (ci) Upgrade resource_class for test_preview_mt (#14274, thanks @straight-shoota)
  • (ci) Upgrade from old machine images approaching EOL (#14275, thanks @straight-shoota)
  • (ci) Update Windows library versions (#14355, thanks @HertzDevil)
  • (ci) Update cachix/install-nix-action action to v26 (#14375, thanks @renovate)
  • (ci) Update shards 0.18.0 (#14411, thanks @straight-shoota)
  • (ci) Support LLVM 18.1 (#14277, thanks @HertzDevil)
  • (ci) Use Makefile.win for Shards on Windows CI (#14414, thanks @HertzDevil)