All Versions
118
Latest Version
Avg Release Cycle
46 days
Latest Release
533 days ago

Changelog History
Page 1

  • v1.6.2 Changes

    November 03, 2022

    Language

    • ๐Ÿ›  Fix VirtualMetaclassType#implements? to ignore base type (#12632, thanks @straight-shoota)

    Compiler

    • Compiler: handle yield expressions without a type (#12679, thanks @asterite)
    • ๐Ÿ”จ Partial revert "Compiler: refactor and slightly optimize merging two types (#12436)" (#12709, thanks @caspiano)

    Semantic

    • Compiler: ignore type filters when accepting cast for obj and to (#12668, thanks @asterite)

    Other

    • ๐Ÿ”’ (security) CI: Update to OpenSSL 3.0.7 for bundled lib on Windows (#12712, thanks @beta-ziliani)
  • v1.6.1 Changes

    October 21, 2022

    Compiler

    Interpreter

    • Interpreter (repl): migrate types even if their size remains the same (#12581, thanks @asterite)
    • Unbreak the interpreter on FreeBSD (#12600, thanks @dmgk)
    • ๐Ÿ›  Fix FFI specs on release builds (#12601, thanks @HertzDevil)
    • โž• Adding welcome message to the interpreter (#12511, thanks @beta-ziliani)

    Semantic

    • Treat single splats with same restriction as equivalent (#12584, thanks @HertzDevil)

    Tools

    Formatter

    • Formatter: escape backslashes in macro literals when subformatting (#12582, thanks @asterite)

    Playground

    • ๐Ÿ›  Fix origin validation in playground server for localhost (#12599, thanks @straight-shoota)

    Other

    • ๐Ÿ›  Fix doc typos in Socket::IPAddress (#12583, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix building Wasm32 on Crystal 1.6 (Regression) (#12580, thanks @lbguilherme)
    • โฌ†๏ธ Bump version to 1.6.1-dev (#12588, thanks @straight-shoota)
    • ๐Ÿ Disable failing specs on Windows CI (#12585, thanks @HertzDevil)
    • ๐Ÿ— Detect llvm-configXX while building compiler (#12602, thanks @HertzDevil)
  • v1.6.0 Changes

    October 06, 2022

    Language

    • Add 'wasm_import_module' option to the @[Link] annotation (#11935, thanks @lbguilherme)

    Standard Library

    • ๐Ÿ‘‰ Use GC.malloc_atomic with GC.realloc, not Pointer#realloc (#12391, thanks @HertzDevil)
    • ๐Ÿ‘Œ Improve syntax highlighter (#12409, thanks @I3oris)
    • ๐Ÿ Enable miscellaneous parts of the standard library on Windows (#12281, thanks @HertzDevil)
    • โœ… Use interpreter to run std spec tests (#12355, thanks @cyangle)
    • โœ‚ Remove most uses of Symbol variables in standard library specs (#12462, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use @[::Primitive] and @[::Flags] where necessary (#11900, thanks @HertzDevil)
    • Document how to change base type of an enum (#9803, thanks @Blacksmoke16)
    • Spec: bump and document timeouts in interpreted mode (#12430, thanks @asterite)

    Collection

    • ๐Ÿ”จ Refactor and improve NamedTuple deserialization from JSON and YAML (#12008, thanks @HertzDevil)
    • ๐ŸŽ (performance) Optimize BitArray#tally(hash) (#11909, thanks @HertzDevil)
    • Use Slice#unsafe_slice_of and #to_unsafe_bytes in the standard library and compiler (#12280, thanks @HertzDevil)
    • ๐ŸŽ (performance) Optimize block-less overloads of BitArray#index and #rindex (#12087, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support tuple metaclass indexers with non-literal arguments (#11834, thanks @HertzDevil)
    • โž• Add Indexable#index! overloads with offset parameter (#12089, thanks @HertzDevil)

    Concurrency

    • ๐Ÿ›  Fix fiber clean loop on Windows (#12300, thanks @HertzDevil)
    • ๐Ÿ Enable Mutex on Windows (#12213, thanks @HertzDevil)

    Crypto

    • โž• Add support for Bcrypt algorithm version 2y (#12447, thanks @docelic)
    • ๐Ÿ‘ Allow using U/Int128 in Random (#11977, thanks @BlobCodes)

    Files

    • (breaking-change) Define #system_echo and #system_raw on all systems (#12352, thanks @HertzDevil)
    • (breaking-change) Do not expose Crystal::System::FileInfo through File::Info (#12385, thanks @HertzDevil)
    • ๐Ÿ›  Fix IO.pipe spec on FreeBSD (#12324, thanks @dmgk)
    • ๐Ÿ›  Fix docs error for File.match? ** globbing pattern. (#12343, thanks @zw963)
    • โž• Add Dir#info (#11991, thanks @didactic-drunk)
    • ๐Ÿ Implement IO::FileDescriptor's console methods on Windows (#12294, thanks @HertzDevil)
    • ๐Ÿ”— Fix typo: LibC::DT_LINK -> DT_LNK (#11954, thanks @HertzDevil)
    • Document IO::FileDescriptor#info (#12384, thanks @HertzDevil)
    • ๐ŸŽ (performance) Introduce IO::DEFAULT_BUFFER_SIZE (#12507, thanks @straight-shoota)
    • โž• Add support for IO::FileDescriptor staying open on finalize (#12367, thanks @refi64)

    Macros

    • โœจ Enhance record documentation (#12334, thanks @straight-shoota)

    Networking

    • โž• Add Socket::IPAddress.valid? (#12489, #10492, thanks @straight-shoota)
    • ๐Ÿ›  Fix HTTP::Client#exec to abort retry when client was closed (#12465, thanks @straight-shoota)
    • ๐Ÿ›  Fix specs with side effects (#12539, thanks @straight-shoota)
    • ๐Ÿ›  Fix HTTP::Client implicit compression with retry (#12536, thanks @straight-shoota)
    • HTTP::StaticFileHandler: Reduce max stat calls from 6 to 2 (#12310, thanks @didactic-drunk)
    • โž• Add warning about concurrent requests in HTTP::Client (#12527, thanks @straight-shoota)

    Numeric

    • โž• Add full integer support to sprintf and String#% (#10973, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make Float#to_s ignore NaN sign bit (#12399, thanks @HertzDevil)
    • ๐Ÿ–จ Make sprintf and String#% ignore NaN sign bit (#12400, thanks @HertzDevil)
    • ๐Ÿ›  Fix Complex#to_s imaginary component sign for certain values (#12244, thanks @HertzDevil)
    • More accurate definition of Complex#sign (#12242, thanks @HertzDevil)
    • ๐Ÿ›  Fix overflow for rand(Range(Int, Int)) when signed span is too large (#12545, thanks @HertzDevil)
    • ๐ŸŽ (performance) Add #rotate_left and #rotate_right for primitive integers (#12307, thanks @HertzDevil)
    • ๐ŸŽ (performance) Optimize BigDecimal#div for inexact divisions (#10803, thanks @HertzDevil)
    • Implement the Dragonbox algorithm for Float#to_s (#10913, thanks @HertzDevil)
    • โž• Add U/Int128 to isqrt spec (#11976, thanks @BlobCodes)

    โš™ Runtime

    • ๐Ÿ›  Fix: Parse DWARF5 Data16 values (#12497, thanks @stakach)
    • ๐ŸŽ macOS: Fix call stack when executable path contains symlinks (#12504, thanks @HertzDevil)
    • WASM: Add support for wasi-sdk 16: don't rely on __original_main (#12450, thanks @lbguilherme)

    Serialization

    • ๐Ÿ›  Fix YAML serialization class name ambiguity (#12537, thanks @hugopl)
    • ๐Ÿ‘ Allow non-type converter instances in ArrayConverter and HashValueConverter (#10638, thanks @HertzDevil)
    • ๐Ÿ”Š Document after_initialize method for yaml and json serializers (#12530, thanks @analogsalad)

    System

    • โž• Add missing fields to LibC::Passwd on FreeBSD (#12315, thanks @dmgk)
    • โž• Add platform-specific variants of Process.parse_arguments (#12278, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make Dir.current respect $PWD (#12471, thanks @straight-shoota)

    Text

    • ๐Ÿ›  Fix String shift state specs on FreeBSD (#12339, thanks @dmgk)
    • ๐Ÿ–จ Disallow mixing of sequential and named sprintf parameters (#12402, thanks @HertzDevil)
    • ๐Ÿ›  Fix Colorize doc example (#12492, thanks @zw963)
    • ๐ŸŽ (performance) Optimize String#downcase and String#upcase for single byte optimizable case (#12389, thanks @asterite)
    • ๐ŸŽ (performance) Optimize String#valid_encoding? (#12145, thanks @HertzDevil)
    • Implement String#unicode_normalize and String#unicode_normalized? (#11226, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support parameter numbers in sprintf (#12448, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use LibC.malloc instead of GC.malloc for LibPCRE allocations (#12456, thanks @lbguilherme)
    • โšก๏ธ Unicode: Update to version 15.0.0 (#12479, thanks @HertzDevil)
    • ๐Ÿ†“ Avoid free call in interpreted mode (#12496, thanks @straight-shoota)

    Compiler

    • ๐Ÿ‘Œ Improve recursive splat expansion detection (#11790, thanks @asterite)
    • Compiler: fix #to_s for empty parameters of lib funs (#12368, thanks @HertzDevil)
    • Compiler: transform Proc(*T, Void) to Proc(*T, Nil) (#12388, thanks @asterite)
    • Compiler: indent begin Expressions that are direct node children (#12362, thanks @HertzDevil)
    • Compiler: add missing location to node on literal expander for array (#12403, thanks @asterite)
    • Compiler: a generic class type can also be reference-like (#12347, thanks @asterite)
    • Hoist complex element expressions outside container literals (#12366, thanks @HertzDevil)
    • ๐ŸŽ (performance) Compiler: bind to tuple, not array (#12423, thanks @asterite)
    • ๐Ÿ‘‰ Use Path.new(string) instead of Path.new([string]) (#12419, thanks @asterite)
    • โš  Decouple warning detection from program instances (#12293, thanks @HertzDevil)
    • ๐ŸŽ (performance) Compiler: only have freeze_type in select AST nodes (#12428, thanks @asterite)
    • Correctly display codegen when cross-compiling (#12414, thanks @luislavena)
    • Compiler: simplify some calls (#12417, thanks @asterite)
    • ๐ŸŽ (performance) Compiler: optimizations in merge_if_vars (#12432, #12433, thanks @asterite)
    • Compiler refactor: extract type_from_dependencies (#12437, thanks @asterite)
    • ๐ŸŽ (performance) Compiler: refactor and slightly optimize merging two types (#12436, thanks @asterite)
    • ๐ŸŽ (performance) Compiler optimization: don't create call for hook unless needed (#12452, thanks @asterite)
    • ๐ŸŽ (performance) CrystalPath: Cache Dir.current to avoid thousands of allocations (#12455, thanks @yxhuvud)
    • ๐Ÿ‘ Better call error messages (#12469, thanks @asterite)
    • ๐ŸŽ (performance) Compiler optimization: avoid intermediate array when matching call arg types (#12485, thanks @asterite)

    Codegen

    • Codegen: fix how unions are represented to not miss bytes (#12551, thanks @asterite)
    • ๐Ÿ›  Fix alignment typo in compiler comments (#12564, thanks @mdwagner)
    • โœ‚ Remove redundant code from x86_64 abi (#12443, thanks @mattrberry)
    • Codegen: use var pointer for out instead of an extra variable (#10952, thanks @asterite)

    Debugger

    • ๐Ÿ‘ Basic GDB formatter support (#12209, thanks @HertzDevil)
    • โž• Add Visual Studio formatters for String, Array, and Hash (#12212, thanks @HertzDevil)

    Interpreter

    • Interpreter: handle the case of a def's body with no type (#12220, thanks @asterite)
    • Interpreter: simplify ivar initialization (#12222, thanks @asterite)
    • Interpreter: fix autocasting in multidispatch (#12223, thanks @asterite)
    • Interpreter: handle next inside captured block (#12237, thanks @asterite)
    • Interpreter: fix crystal_type_id for virtual metaclass type (#12246, thanks @asterite)
    • Interpreter: handle yield with splat combined with tuple unpacking (#12247, thanks @asterite)
    • Interpreter: handle inlined call that returns self for structs (#12259, thanks @asterite)
    • Interpreter: implement Int128/UInt128 intrinsics (#12258, thanks @asterite)
    • Interpreter: fix some conversion primitives (#12257, thanks @asterite)
    • Interpreter: don't override special vars inside block (#12251, thanks @asterite)
    • Interpreter: add missing cast from tuple to other tuple inside union (#12249, thanks @asterite)
    • Interpreter: allow declaring local vars during a pry session (#12180, thanks @asterite)
    • Interpreter: handle bitreverse intrinsics (#12273, thanks @asterite)
    • Interpreter: cache methods with captured block (#12285, thanks @asterite)
    • Interpreter: missing downcast from MixedUnionType to NilableProcType (#12286, thanks @asterite)
    • Interpreter: fix with ... yield with extra arguments (#12301, thanks @asterite)
    • Interpreter: consider nodes without a type as NoReturn (#12275, thanks @asterite)
    • Interpreter: take with ... yield scope into account for args bytesize (#12317, thanks @asterite)
    • ๐Ÿ›  Fix loader spec on FreeBSD (#12323, thanks @dmgk)
    • Interpreter: inline ivar access for virtual call with a single child (#12321, thanks @asterite)
    • Interpreter: fix as? when there's no resulting type (#12328, thanks @asterite)
    • Interpreter: handle missing closured struct self (#12345, thanks @asterite)
    • Interpreter: use non_nilable_type in NilableCast (#12348, thanks @asterite)
    • Interpreter: implement mixed union cast with compatible tuple types (#12349, thanks @asterite)
    • Interpreter: fix missing upcast_distinct from A+ to B (Crystal::VirtualType to Crystal::NonGenericClassType) (#12374, thanks @asterite)
    • Interpreter: discard tuple and named tuple (#12387, thanks @asterite)
    • Interpreter: cast proc call arguments to proc arg types (#12375, thanks @asterite)
    • Interpreter: set correct scope for class var initializer (#12441, thanks @asterite)
    • Interpreter (repl): use new MainVisitor each time we need to interpret code (#12512, thanks @asterite)
    • Interpreter: allow inspecting block vars without affecting program (#12520, thanks @asterite)
    • Interpreter: check upcast in nilable cast (#12533, thanks @asterite)
    • Interpreter: implement variable autocast (#12563, thanks @asterite)
    • Interpreter: handle missing upcast from GenericClassInstanceMetaclassType to VirtualMetaclassType (#12562, thanks @asterite)
    • ๐Ÿ‘€ Interpreter: let local vars be seen by macros in repl and pry (#12240, thanks @asterite)
    • Interpreter: handle local variable type declaration (#12239, thanks @asterite)
    • ๐Ÿ‘Œ Support libffi on Windows (#12200, thanks @HertzDevil)
    • Add $CRYSTAL_INTERPRETER_LOADER_INFO to show loaded libraries (#12221, thanks @straight-shoota)
    • Interpreter: node override (#12287, thanks @asterite)
    • Interpreter: introduce a Prompt type (#12288, thanks @asterite)
    • Interpreter: missing i += 1 (#12381, thanks @asterite)
    • ๐Ÿ‘Œ Support building the interpreter on Windows (#12397, thanks @HertzDevil)
    • Don't exit in interpreter spec and change type from Nil to NoReturn in FixMissingTypes (#12230, thanks @asterite)
    • Interpreter: fix multidispatch with captured block (#12236, thanks @asterite)
    • Interpreter: don't change compiled mode logic (#12252, thanks @asterite)
    • Wait more in HTTP::Server specs in interpreted mode (#12420, thanks @asterite)

    ๐Ÿ“œ Parser

    • Lexer: fix index out of bounds when scanning numbers (#12482, thanks @asterite)
    • ๐Ÿ›  Fix parser to never create doc from trailing comment (#11268, thanks @straight-shoota)
    • ๐Ÿ“œ Parser: declare local vars of indirect type declarations in call args (#11983, thanks @asterite)
    • โœ‚ Remove redundant conditional (#12196, thanks @potomak)
    • Warn on suffix-less integer literals outside Int64's range (#12427, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use enum instead of symbols for keywords in the lexer (#11871, thanks @HertzDevil)
    • Parser: Rename arg* to param* (#12235, thanks @potomak)
    • ๐Ÿ›  Fix test cases (#12508, thanks @potomak)

    Semantic

    • (breaking-change) Allow Union restrictions to be ordered before all other restrictions (#12335, thanks @HertzDevil)
    • (breaking-change) Use more robust ordering between def overloads (#10711, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Instance vars should not be allowed on Class, Tuple, NamedTuple, Enum, Pointer , Proc, StaticArray and Union. (#12160, thanks @I3oris)
    • Compiler and interpreter: fix is_a? from virtual metaclass to generic metaclass (#12306, thanks @asterite)
    • Compiler: fix type descendent for union metaclass (#12308, thanks @asterite)
    • Compiler: fix is_a? from generic class against generic class instance type (#12312, thanks @asterite)
    • ๐Ÿ›  Fix self in restrictions when instantiating macro def in subtypes (#10954, thanks @HertzDevil)
    • ๐Ÿ†“ Never resolve free variables as types during overload ordering (#11973, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use instantiated type as self when inferring instance variable types (#12466, thanks @HertzDevil)
    • ๐Ÿ›  Fix restriction comparison between Metaclass and Path (#12523, thanks @HertzDevil)
    • ๐ŸŽ (performance) Compiler: don't always use Array for node dependencies and observers (#12405, thanks @asterite)
    • ๐Ÿ‘ Compiler: better error message for symbol against enum (#12478, thanks @asterite)

    Tools

    ๐Ÿ“„ Docs-generator

    • ๐Ÿ›  Fix docs generator search constants id (#12262, thanks @GeopJr)

    Formatter

    • Formatter: format comment after select (#12506, thanks @asterite)
    • Formatter: try to format macros that don't interpolate content (#12378, thanks @asterite)

    Playground

    • Playground: Fix pass bound hostname to run sessions (#12356, thanks @orangeSi)
    • Don't show stacktrace when playground port is already in use. (#11844, thanks @hugopl)
    • Indent playground code using spaces (#12231, thanks @potomak)

    Other

    • bin/crystal: Ensure sh compatibility (#12486, thanks @HertzDevil)
    • โฌ†๏ธ bumping version 1.6.0-dev (#12263, thanks @beta-ziliani)
    • โšก๏ธ updating CI to 1.5.0 (#12260, thanks @beta-ziliani)
    • โž• Add fish shell completion (#12026, thanks @TunkShif)
    • Execute compopt only when it's present (#12248, thanks @potomak)
    • ๐Ÿ Use Makefile.win and wrapper script on Windows CI (#12344, thanks @HertzDevil)
    • [Makefile] Add format target (#11420, thanks @straight-shoota)
    • โšก๏ธ Update contact section of CODE of CONDUCT (#9219, thanks @paulcsmith)
    • โšก๏ธ Update nixpkgs 22.05 and LLVM 11 (#12498, thanks @straight-shoota)
    • [Makefile] Use EXPORT_CC for make crystal (#11760, thanks @straight-shoota)
    • โšก๏ธ Update distribution-scripts (#12502, #12555, thanks @straight-shoota)
    • ๐Ÿ›  Fix and enhance scripts/update-distribution-scripts.sh (#12503, thanks @straight-shoota)
    • โฌ†๏ธ [CI] Upgrade GitHub Actions to macos-11 (#12500, thanks @straight-shoota)
    • โž• Add icon and metadata to Windows Crystal compiler binary (#12494, thanks @HertzDevil)
    • Remove spec/win32_std_spec.cr and spec/generate_windows_spec.sh (#12282, #12549, thanks @HertzDevil and @straight-shoota)
  • v1.5.1 Changes

    September 07, 2022

    Standard Library

    • ๐Ÿ›  Fix Class#nilable? for recursive unions and root types (#12353, thanks @HertzDevil)

    Numeric

    • ๐Ÿ›  Fix Float#abs and Number#format for -0.0 (#12424, thanks @straight-shoota)

    Text

    • ๐Ÿ›  Fix null dereference when passing empty slice to Base64.encode (#12377, thanks @dscottboggs)

    Compiler

    • Do not check abstract def parameter names on abstract types and modules (#12434, thanks @HertzDevil)

    Codegen

    • Compiler/codegen: reset @needs_value (#12444, thanks @asterite)
    • ๐Ÿ›  Fix homogeneous_aggregate? check for aarch64 types (#12445, thanks @mattrberry)

    Semantic

    • Compiler: don't eagerly check cast type (#12272, thanks @asterite)
    • ๐Ÿ›  Fix type restriction augmenter for Union(*T) and similar (#12438, thanks @asterite)

    Tools

    Formatter

    • Formatter: Fix assign followed by comment (#12319, thanks @straight-shoota)
    • ๐Ÿ– Handle formatting annotated method parameters (#12446, thanks @Blacksmoke16)

    Other

    • โšก๏ธ Update distribution-scripts (#12359, thanks @straight-shoota)
    • โšก๏ธ Update distribution-scripts (#12333, thanks @straight-shoota)
    • [CI] Bumping xcode to 13.4.1 (#12264, thanks @beta-ziliani)
  • v1.5.0 Changes

    July 06, 2022

    Language

    • (breaking-change) Warn on positional parameter mismatches for abstract def implementations (#11915, #12167, thanks @HertzDevil)
    • ๐Ÿ›  Fix \{{...}} syntax in macro inside comments (#12175, thanks @asterite)
    • Let constant tuple indexers work with constants (#12012, thanks @asterite)
    • ๐Ÿ”จ Refactor restriction mechanism for autocasting (#12014, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support unions in Crystal::Macros::ASTNode#is_a? (#12086, thanks @HertzDevil)
    • Experimental: restriction augmenter (#12103, #12136, #12143, #12130, thanks @asterite)
    • ๐Ÿ‘ Method/macro parameter annotation support (#12044, thanks @Blacksmoke16)

    Standard Library

    • ๐Ÿ‘Œ Support Path for chdir arg in Process methods (#11932, thanks @caspiano)
    • โž• Add docs for Enum#value (#11947, thanks @lbguilherme)
    • ๐Ÿ›  Fix positional parameter warnings in specs (#12158, thanks @straight-shoota)
    • ๐Ÿ‘‰ Use more specific expectations in specs (#11951, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use contain expectations in more specs (#11950, thanks @HertzDevil)

    Collection

    • ๐Ÿ›  Fix Hash#reject! for non-equality key (#10511, thanks @straight-shoota)
    • Introduce Tuple.element_type and NamedTuple.element_type (#12011, thanks @HertzDevil)
    • ๐Ÿ“‡ Rename "take" to "first" (#11988, thanks @jmdyck)
    • โž• Add spec for Array#- with different generic type arguments (#12049, thanks @straight-shoota)

    Concurrency

    • Windows: Always use GC_set_stackbottom on Windows (#12186, thanks @HertzDevil)
    • ๐Ÿ Windows: Event loop based on IOCP (#12149, thanks @straight-shoota, @wonderix, @yxhuvud, @HertzDevil)
    • ๐Ÿ‘‰ Use enum instead of symbol for Atomic primitives (#11583, thanks @HertzDevil)
    • Allow Enumerable(Channel) parameter for Channel.send_first, .receive_first (#12101, thanks @carlhoerberg)

    Crypto

    • ๐ŸŽ (performance) Add faster Digest#hexfinal (#9292, thanks @didactic-drunk)
    • ๐Ÿ– Handle OpenSSL 3.0 KTLS ctrl calls (#12034, thanks @1player)

    Files

    • ๐Ÿ›  Fix Path#join(Enumerable) (#12032, thanks @straight-shoota)
    • ๐Ÿ›  Fix Path#join to convert argument path to base kind (#12033, thanks @straight-shoota)
    • ๐Ÿ›  Fix Dir.glob with multi components after recursive wildcard (#12057, thanks @straight-shoota)
    • โž• Add File#delete? and Dir#delete? (#11887, thanks @didactic-drunk)
    • Accept Path arguments in Compress::Zip (#11925, thanks @didactic-drunk)
    • โšก๏ธ Update file.cr (#12024, thanks @rdp)
    • โž• Add File#chown and #chmod (#11886, thanks @didactic-drunk)

    ๐ŸŒฒ Log

    • ๐Ÿ”„ Change Log emitters to not emit event when block output is nil (#12000, thanks @robacarp)

    Networking

    • ๐Ÿ Enable more networking specs on Windows (#12176, thanks @HertzDevil)
    • โž• Add specs for Windows directory separators in StaticFileHandler paths (#11884, thanks @straight-shoota)
    • โž• Add property HTTP::Server::Response#status_message (#10416, thanks @straight-shoota)

    Numeric

    • ๐Ÿ›  Fix Complex.multiplicative_identity (#12051, thanks @I3oris)
    • โž• Add docs for Float, BigFloat rounding methods (#12004, thanks @marksiemers)
    • Implement rt builtins __ashlti3, __ashrti3 and __lshrti3 for wasm32 (#11948, thanks @lbguilherme)

    Specs

    • Align Spec::Be, BeClose failure message to other messages (#11946, thanks @jgaskins)

    System

    • ๐Ÿ”’ (security) Fix check for null byte in File#tempfile args (#12076, thanks @straight-shoota)
    • โž• Add missing SC_PAGESIZE constant for aarch64-darwin (#12037, thanks @carlhoerberg)
    • ๐Ÿ“„ Docs: Add more prominent note about path traversal in File.tempfile (#12077, thanks @straight-shoota)
    • ๐Ÿ‘Œ Support Enumerable as argument to File.join (#12102, thanks @caspiano)

    โš™ Runtime

    • Mention #value explicitly in Pointer overview. (#12184, thanks @elebow)

    Text

    • Add specs for String#char_bytesize_at (#11872, thanks @straight-shoota)
    • Flush shift state for String#encode (#11993, thanks @HertzDevil)
    • ๐Ÿ– Handle invalid bytes in single-byte optimizable Strings correctly (#12108, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Don't stop on null byte in String#% (#12125, thanks @asterite)
    • โž• Add UUID.parse? (#11998, thanks @jgaskins)

    Time

    • ๐Ÿ›  Fix: Better error message for Time.parse! when end of input is reached (#12124, thanks @asterite)

    Compiler

    • โš  Clean up compiler warning specs (#11916, thanks @HertzDevil)
    • โž• Add support for NO_COLOR to Colorize (#11984, thanks @didactic-drunk)
    • ๐ŸŽ (performance) Use LLVM's new pass manager when possible (#12116, thanks @asterite)

    Macros

    • Document Crystal::Macros::Self and Underscore (#12085, thanks @HertzDevil)

    Generics

    • ๐Ÿ‘ Allow the empty instantiation NamedTuple() (#12009, thanks @HertzDevil)

    Interpreter

    • โž• Add missing EXPORT in interpreter spec (#12201, thanks @HertzDevil)
    • ๐Ÿ– Handle escaping exceptions in pry (#12211, thanks @asterite)
    • ๐Ÿ‘ Allow some options, and colorize whereami (#12198, thanks @asterite)
    • ๐Ÿ›  Fix instance var offset of virtual struct (#12189, thanks @asterite)
    • ๐Ÿ– Handle explicit return when method type is Nil (#12179, thanks @asterite)
    • Crystal::Loader: don't check if file exists, leave that to dlopen (#12207, thanks @asterite)
    • ๐Ÿ›  Fix call receiver by value from VirtualType struct (#12194, thanks @asterite)
    • Clear finished hooks after intepreting (#12174, thanks @asterite)
    • ๐Ÿ›  Fix FFI bindings for libffi >= 3.4 (#12192, thanks @straight-shoota)
    • ๐Ÿ›  Fix .class for modules and unions (#12205, thanks @asterite)
    • Implement Crystal::Loader for MSVC (#12140, thanks @HertzDevil)
    • ๐Ÿ›  Fix: cast from virtual metaclass to union (#12163, thanks @asterite)
    • ๐Ÿ‘ Allow inspect vars when inside a block (#12165, thanks @asterite)
    • ๐Ÿ‘€ Let pry see closured vars (#12169, thanks @asterite)
    • ๐Ÿ›  Fix caller (#12182, thanks @asterite)
    • Apply shell expansion in ldflags (#12094, thanks @mdwagner)
    • ๐Ÿ›  Fix expression value of constant assignment in interpreter (#12016, thanks @beta-ziliani)
    • ๐Ÿ›  Fix: Don't link librt and libdl on GNU systems (#12038, thanks @1player)

    ๐Ÿ“œ Parser

    • (breaking-change) Disallow empty parameter and argument names (#11971, thanks @HertzDevil)
    • ๐Ÿ†“ Disallow duplicate free variables in defs (#11965, thanks @HertzDevil)
    • Disallow duplicate fun parameter names (#11967, thanks @HertzDevil)
    • โœ‚ Remove redundant check for EOF on Crystal::Parser (#12067, thanks @lbguilherme)

    Semantic

    • Compiler: don't check ivar read forms a closure in exp.@x (#12183, thanks @asterite)
    • Compiler: raise when allocating an abstract virtual type (#12141, thanks @asterite)
    • Compiler: don't use with_scope if Call has a receiver (#12138, thanks @asterite)
    • Compiler: fix proc return type restriction for Proc(...) (#12129, thanks @asterite)
    • Compiler: simpler way to compute Def#raises? (#12121, thanks @asterite)
    • โœ‚ Remove unused ASTNode#unbind_all (#12120, thanks @asterite)

    Debugger

    • ๐Ÿ‘Œ Improve the LLDB spec driver script (#12119, thanks @HertzDevil)

    Tools

    ๐Ÿ“„ Docs-generator

    • ๐Ÿ“„ [Docs] Adjust method sort order to sort all operators first (#12104, thanks @straight-shoota)

    Formatter

    • ๐Ÿ›  Fix formatter lib-fun declaration with newlines (#12071, thanks @ftarulla)
    • ๐Ÿ›  Fix formatter alias-def with no-space before equals (#12073, thanks @ftarulla)
    • ๐Ÿ›  Fix formatter for parenthesized arg after space (#11972, thanks @straight-shoota)

    Playground

    • Playground: fix modalContenDom typo (#12188, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Unset executable bit from js/css files in playground (#12053, thanks @carlhoerberg)

    Other

    • ๐Ÿ— [CI] Add build compiler step to smoke tests (#11814, thanks @straight-shoota)
    • โž• Add Makefile for Windows (#11773, thanks @HertzDevil)
    • โšก๏ธ [CI] Update distribution-scripts (#12155, thanks @straight-shoota)
    • โšก๏ธ [CI] Add update-distributions-scripts.sh (#12156, thanks @straight-shoota)
    • [CI] Ignore pax_global_header on Windows CI (#12173, thanks @HertzDevil)
    • ๐Ÿš€ [CI] Invalidate cached libraries on new MSVC release (#12064, thanks @HertzDevil)
    • ๐Ÿ›  Fix spelling (#12040, thanks @jsoref)
    • ๐Ÿš€ Update previous Crystal release - 1.4.1 (#12029, thanks @straight-shoota)
    • ๐Ÿ“Œ [CI] Pin version of ubuntu base image for circleci jobs (#12030, thanks @straight-shoota)
    • Samples: avoid Symbol variables (#11923, thanks @HertzDevil)
  • v1.4.1 Changes

    April 22, 2022

    Standard Library

    Collection

    • Avoid compile-time error on empty NamedTuples. (#12007, thanks @I3oris)

    Files

    • โž• Add missing fun def for __xstat (#11985, thanks @straight-shoota)

    โš™ Runtime

    • โž• Add pthread link annotations in lib bindings (#12013, thanks @straight-shoota)
    • ๐Ÿ›  Fix GC typedefs on Windows (#11963, thanks @HertzDevil)

    Compiler

    Semantic

    • ๐Ÿšš Compiler: remove duplicate instance vars once we know them all (#11995, thanks @asterite)
  • v1.4.0 Changes

    April 06, 2022

    Language

    • โž• Add support for Int128 in codegen and macros (#11576, thanks @BlobCodes)
    • ๐Ÿ‘Œ Support ProcPointers with global path and top-level method references (#11777, thanks @HertzDevil)
    • ๐Ÿ›  Fix documentation for macros system and run (#11740, thanks @lbguilherme)
    • ๐Ÿ‘ Experimental: better type inference for ivars/cvars (#11812, thanks @asterite)
    • ๐Ÿ‘Œ Support @[Deprecated] on constants (#11680, thanks @HertzDevil)

    Standard Library

    • ๐Ÿ›  Fix compiler flags with optional arg eating following flags (#11201, thanks @yb66)
    • ๐Ÿ‘Œ Support GNU style optional arguments in OptionParser (#11546, thanks @HertzDevil)
    • โœ‚ Remove some unnecessary link annotations (#11563, thanks @straight-shoota)
    • โœ‚ Remove useless assignments (#11774, thanks @IgorPolyakov)
    • ๐Ÿ“š Use "truthy" and "falsey" in more places in the documentation (#11784, thanks @HertzDevil)
    • โž• Add missing code blocks for self in documentation (#11718, thanks @HertzDevil)
    • โž• Add support for LLVM 14.0 (#11905, thanks @HertzDevil)
    • ๐Ÿ›  Fix code examples in doc comments (2022-03) (#11927, thanks @maiha)

    Collection

    • โœ‚ Remove Iterator.of(Iterator.stop) from implementations (#11613, thanks @asterite)
    • โž• Add allow Enumerable arguments for Hash#select and #reject (#11750, thanks @mamantoha)
    • โž• Add docs for Hash#reject! (#11691, thanks @wontruefree)
    • โž• Add raising method variants Enumerable#find! and #index! (#11566, thanks @yxhuvud)
    • ๐ŸŽ (performance) Optimize block-less overloads of BitArray#fill (#11450, thanks @HertzDevil)
    • โž• Adds docs for Array#replace (#11682, thanks @wontruefree)
    • ๐ŸŽ (performance) Optimize BitArray's counting methods (#11591, thanks @HertzDevil)
    • โž• Add some return types to Array, Hash, Set and String (#11822, thanks @asterite)
    • โž• Add Hash#update (#11881, thanks @ftarulla)
    • ๐Ÿ‘ Allow Bytes[] to construct an empty Bytes (#11897, thanks @HertzDevil)
    • ๐Ÿ‘Œ Improve BitArray's constructors (#11898, thanks @HertzDevil)
    • โž• Add overload to Enumerable#tally and #tally_by accepting a hash (#11815, thanks @mamantoha)

    Crypto

    • โž• Add support for Bcrypt algorithm version 2b (#11595, thanks @docelic)

    Files

    • ๐Ÿ›  Fix race condition in chown (#11885, thanks @didactic-drunk)
    • โž• Add docs for Dir#each_child (#11688, thanks @wontruefree)
    • โž• Add docs for Dir#path (#11689, thanks @wontruefree)
    • ๐Ÿ‘Œ Support read-write + binary file modes in File.open (#11817, thanks @HertzDevil)
    • โž• Add docs for Dir#entries (#11701, thanks @wontruefree)
    • Add IO#getb_to_end (#11830, thanks @HertzDevil)
    • ๐Ÿ›  Fix IO::FileDescriptor#pos giving incorrect position after write (#10865, thanks @didactic-drunk)
    • โœ‚ Remove reference to binary file mode in File.open (#11824, thanks @HertzDevil)

    Macros

    • โž• Add #parse_type (#11126, thanks @Blacksmoke16)

    Networking

    • ๐ŸŽ (performance) Optimize URI.decode (#11741, thanks @asterite)
    • ๐Ÿ›  Fix address_spec expectation for Windows Server 2022 (#11794, thanks @straight-shoota)
    • Add space_to_plus option in URI::Params everywhere (#11821, thanks @asterite)
    • ๐Ÿ‘Œ Improve URI::Params#inspect to use hash-like literal (#11880, thanks @straight-shoota)
    • ๐Ÿ‘‰ Use enums instead of symbols for MIME::Multipart and HTTP::FormData (#11617, thanks @HertzDevil)

    Numeric

    • (breaking-change) Fix: Hide BigDecimal::ZERO and BigDecimal::TEN (#11820, thanks @lbguilherme)
    • (breaking-change) Add support for scientific notation in BigFloat#to_s (#10632, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Inspect string in error message for number parsing (#11883, thanks @straight-shoota)
    • โž• Add docs for Complex#zero? (#11697, thanks @wontruefree)
    • ๐Ÿ›  Fix E notation parsing in BigDecimal (#9577, thanks @stevegeek)
    • ๐ŸŽ (performance) Optimize Integer decoding from bytes (#11796, thanks @carlhoerberg)

    โš™ Runtime

    • ๐Ÿ›  Fix interpreter when shared library pthread is missing (#11807, thanks @straight-shoota)
    • ๐ŸŽ (performance) Implement Intrinsics.pause for aarch64 (#11742, thanks @lbguilherme, @jgaskins)
    • โž• Add crash handler on Windows (#11570, thanks @HertzDevil)
    • โž• Add specs for NamedTuple#from (#11816, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve error for incompatible generic arguments for WeakRef (#11911, thanks @straight-shoota)
    • โž• Add the wasm entrypoint defined in Crystal (#11936, thanks @lbguilherme)

    Serialization

    • ๐Ÿ‘ Allow passing instance method or conditional expressions to option ignore_serialize on JSON::Field (#11804, thanks @cyangle)
    • Implement Iterator.from_json and #to_json (#10437, thanks @wonderix)

    Specs

    • โž• Add file and line arguments to it_iterates (#11628, thanks @straight-shoota)
    • โœ‚ Remove duplicate word in documentation (#11797, thanks @samueleaton)

    System

    • (breaking-change) (security) Fix character mappings for Windows path conversions (#11847, thanks @straight-shoota)
    • โž• Add fallback for Path.home on Unix (#11544, thanks @HertzDevil)
    • ๐Ÿ˜Œ Relax ENV.fetch(key, &)'s block restriction (#11779, thanks @HertzDevil)
    • ๐Ÿ”จ Refactor target clauses for system implementations (#11813, thanks @straight-shoota)
    • ๐Ÿ›  Fix Path support for UNC shares (#11827, thanks @straight-shoota)
    • ๐Ÿ›  Fix regression for Linux older than 3.17: properly check that getrandom is available (#11953, thanks @lbguilherme)

    Text

    • ๐Ÿ›  Fix ensure PCRE JIT mode is available before running spec (#11533, thanks @Blacksmoke16)
    • โž• Add more Colorize overloads and fix docs (#11832, thanks @asterite)
    • ๐Ÿ”จ Refactor Colorize::Mode enum (#11663, thanks @straight-shoota)
    • โž• Add some docs for UUID (#11683, thanks @wontruefree)
    • โž• Add docs for UUID#urn (#11693, thanks @wontruefree)
    • โž• Add docs for String#[] (#11690, thanks @wontruefree)
    • ๐Ÿ‘ Allow explicit usage of libiconv (#11876, thanks @luislavena)
    • (breaking-change) Fix: Honour encoding in IO::Memory#to_s (#11875, thanks @straight-shoota)
    • โž• Add self return type to UUID constructor methods (#10539, thanks @straight-shoota)
    • ๐Ÿ›  Fix infinite loop for certain StringPool initial capacities (#11929, thanks @HertzDevil)

    Time

    • โž• Add examples to Time::Format methods (#11713, thanks @ThunderKey)
    • ๐Ÿ‘Œ Support day of year (%j) in Time parsers (#11791, thanks @HertzDevil)

    Compiler

    • Hello WebAssembly! (MVP implementation) (#10870, thanks @lbguilherme)
    • ๐Ÿ›  Fix compiler specs git integration for configurable default branch (#11754, thanks @yxhuvud)
    • ๐Ÿšš Crystal::ToSVisitor: Remove decorate_* methods (#11724, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use fewer symbols in the compiler source (#11625, thanks @HertzDevil)
    • โž• Add support for --m* flags to crystal spec and crystal eval (#11767, thanks @yxhuvud)
    • โž• Add local compiler wrapper script for Windows (#11524, thanks @HertzDevil)
    • โž• Add Crystal::Program#check_deprecation (#11684, thanks @HertzDevil)
    • ๐Ÿ”จ Refactor symbols for primitive number kinds to enums (#11621, thanks @HertzDevil)
    • โœ‚ Remove useless assignments II (#11843, thanks @IgorPolyakov)
    • Limit the number of rendered overloads on signature mismatch (#10890, thanks @caspiano)
    • ๐Ÿ‘Œ Support "can't infer type parameter" error for uninstantiated generic modules (#11904, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Accept only option flags in CRYSTAL_OPTS for build commands (#11922, thanks @HertzDevil, @beta-ziliani)
    • Evaluate LibLLVM::IS_LT_* during macro expansion time (#11913, thanks @HertzDevil)
    • ๐Ÿ›  Fix incorrect var type inside nested exception handler (#11928, thanks @asterite)
    • ๐Ÿ›  Fix: Look up return type in defining type (#11962, thanks @asterite)

    Codegen

    • ๐ŸŽ (performance) Codegen: Do not always request value for Proc#call (#11675, thanks @HertzDevil)

    Debugger

    • ๐Ÿ›  Fix debug location of inlined Proc#call body (#11676, thanks @HertzDevil)

    Generics

    • ๐Ÿ†“ Resolve non-type free variables in return type restrictions (#11861, thanks @HertzDevil)
    • ๐Ÿ›  Fix recursive pointerof detection with generic splat type variables (#11811, thanks @HertzDevil)

    Interpreter

    • ๐Ÿ›  Fix for Crystal interpreter crash (#11717, thanks @wmoxam)
    • ๐Ÿ‘ Interpreter: support Tuple#[] with range literals (#11783, thanks @HertzDevil)
    • Interpreter: Promote arguments of variadic function calls (#11795, thanks @straight-shoota)
    • Check if libraries are present using dlopen (#11852, thanks @FnControlOption)
    • ๐Ÿ‘‰ Use Crystal::Loader in the interpreter (#11579, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve Crystal::Loader errors (#11860, thanks @straight-shoota)
    • Enable interpreter integration specs for YAML (#11801, thanks @straight-shoota)

    ๐Ÿ“œ Parser

    • ๐Ÿ›  Fix parser error with semicolon + newline in parenthesized Expressions (#11769, thanks @straight-shoota)
    • ๐Ÿ›  Fix comment indentation in ASTNode#to_s (#11851, thanks @FnControlOption)
    • โž• Add locations for else, ensure, end keywords (#11476, thanks @FnControlOption)
    • โž• Add parser support to handle CRLF the same as LF (#11810, thanks @asterite)
    • Lexer: use Crystal::Token::Kind enum instead of symbols (#11616, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support Generic nodes with no type variables (#11906, thanks @HertzDevil)

    Semantic

    • (breaking-change) Drop skip_abstract_def_check flag support (#9217, thanks @makenowjust)
    • โž• Add error when instance variable is inherited from module and supertype (#11768, thanks @straight-shoota)
    • Check file-private types for abstract defs and recursive structs (#11838, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Prevent eager instance_sizeof on structs (#11856, thanks @mattrberry)
    • ๐Ÿ›  Fix: Do not consider global Path in def parameter restriction as free variable (#11862, thanks @HertzDevil)

    Tools

    • Do not inherit from Hash in the compiler (#11707, thanks @HertzDevil)
    • ๐Ÿ“œ Use OptionParser in crystal env (#11720, thanks @HertzDevil)

    Playground

    • โšก๏ธ Replace PNG icon with optimized SVG for playground (#7616, thanks @straight-shoota)

    Other

    • ๐Ÿš€ Update previous Crystal release - 1.3.2 (#11715, thanks @straight-shoota)
    • โž• Add scripts/release-update.sh (#11716, thanks @straight-shoota)
    • [Makefile] Honour $CC in EXPORT_CC (#11548, thanks @straight-shoota)
    • ๐Ÿ›  Fix typo in GHA aarch64 config (#11793, thanks @straight-shoota)
    • โœ… [CI] Test against LLVM 13 (#11343, thanks @straight-shoota)
    • [CI] Use parameters in circleci config (#11714, thanks @straight-shoota)
    • ๐Ÿ”จ Refactor etc/completion.bash (#11719, thanks @HertzDevil)
    • ๐Ÿ— [CI] Renaming jobs to be arch-os-job or arch-build-job (#11207, thanks @beta-ziliani)
    • ๐Ÿ‘Œ Improve documentation for review and merge processes (#11800, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve section ordering in scripts/github-changelog.cr (#11770, thanks @straight-shoota)
    • ๐Ÿ— Upload build artifacts to S3 bucket (#11902, thanks @matiasgarciaisaia, @straight-shoota)
    • ๐Ÿ›  Fix make install for BSD (#11758, thanks @straight-shoota)
    • ๐Ÿ›  Fix typo (#11939, thanks @taupiqueur)
    • โšก๏ธ [CI] Update to shards 0.17.0 (#11930, thanks @straight-shoota)
    • ๐Ÿ‘‰ Use be_empty expectations in more specs (#11937, thanks @HertzDevil)
    • โšก๏ธ [CI] Update distribution-scripts (#11969, thanks @straight-shoota)
  • v1.3.2 Changes

    January 18, 2022

    Standard Library

    Text

    • ๐Ÿ›  Fix buffer overflow in String#index (#11747, thanks @asterite, @straight-shoota)
  • v1.3.1 Changes

    January 13, 2022

    Standard Library

    • โœ‚ Remove useless variable declarations in trailing position (#11704, thanks @HertzDevil)

    Crypto

    • ๐Ÿ›  Fix for missing BIO_* functions in OpenSSL < 1.1.0 (#11736, thanks @daliborfilus)

    โš™ Runtime

    • Remove string allocation from GC_set_warn_proc (#11729, thanks @straight-shoota)

    Tools

    • Doc generator: Fix escape HTML in code span (#11686, thanks @straight-shoota)
    • ๐Ÿ›  Fix formatter error for ProcLiterals with Union return type (#11709, thanks @HertzDevil)

    Other

    • ๐Ÿ›  Fix typos (#11725, thanks @kianmeng)
  • v1.3.0 Changes

    January 06, 2022

    Compiler

    • Refer to T.class as "metaclass" in error messages, not "class" (#11378, thanks @HertzDevil)
    • Create Reason enum for exhaustive case in nil-reason check (#11449, thanks @rymiel)
    • ๐Ÿ‘Œ Improve cache directory behaviour on Windows (#11436, thanks @HertzDevil)
    • ๐Ÿ Automatically detect MSVC tools on Windows via vswhere (#11496, thanks @HertzDevil)
    • Clean up .pdb files for temporary executables on MSVC (#11553, thanks @HertzDevil)
    • Disable incremental linking on MSVC (#11552, thanks @HertzDevil)
    • ๐Ÿ‘ Allow multiple --emit compiler options to stack (#11556, thanks @HertzDevil)
    • ๐Ÿ”จ Refactor some type restrictions in the compiler (#11531, thanks @straight-shoota)
    • Detect cl.exe's path for compiler specs requiring a C compiler (#11560, thanks @HertzDevil)
    • 0๏ธโƒฃ Increase default stack size on MSVC to 8 MB (#11569, thanks @HertzDevil)
    • Resolve compiler wildcard require (#11562, thanks @straight-shoota)
    • Compiler: use enums instead of symbols in various places (#11607, thanks @HertzDevil)

    Codegen

    • Disable specs for StaticArray#sort_by on broken targets (#11359, thanks @straight-shoota)
    • ๐Ÿ›  Fix link flag behaviour on Windows MSVC (#11424, thanks @HertzDevil)
    • Attach debug locations to splat expansions inside array-like literals (#11655, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use full name for private types' class variables during codegen (#11651, thanks @HertzDevil)
    • ๐Ÿ›  Fix codegen when instantiating class methods of typedefs (#11636, thanks @HertzDevil)
    • โž• Add minimal load-time DLL support on Windows, support dllimport storage class (#11573, thanks @HertzDevil)

    Debugger

    • Attach debug locations to auto-generated initialize methods (#11313, thanks @HertzDevil)
    • Fix debug location for ~check_proc_is_not_closure (#11311, thanks @HertzDevil)

    Interpreter

    • crystal i, a Crystal interpreter (#11159, thanks @asterite)
    • Implement FFI bindings (#11475, thanks @straight-shoota)
    • โž• Add Crystal::Loader (#11434, #11662, thanks @straight-shoota, @HertzDevil)
    • Mark bswap32 instrinsic with interpreter primitive annotation (#11582, thanks @rymiel)
    • Split interpreter specs into separate files (#11578, thanks @straight-shoota)
    • โ†ช Workaround for GC issues in interpreter specs (#11634, thanks @straight-shoota)

    ๐Ÿ“œ Parser

    • ๐Ÿ“œ Parser: allow keyword as named argument inside macros (#10377, thanks @asterite)
    • ๐Ÿ“œ Parser: add missing end location to IsA node (#11351, thanks @FnControlOption)
    • ๐Ÿ›  Fix node locations for ProcLiterals with parameters (#11365, thanks @HertzDevil)
    • ๐Ÿ›  Fix parser error with named argument end in macro body (#11463, thanks @straight-shoota)
    • Report syntax error for too-long bin/hex/oct integer literals (#11447, thanks @oprypin)
    • [lexer] Correctly increase nesting for escaped macro unless (#11440, thanks @rymiel)
    • ๐Ÿ“œ Show proper syntax errors in some edge cases in the parser (#11446, thanks @oprypin)
    • ๐Ÿ›  Fix parse yield with parenthesis (#11469, thanks @straight-shoota)
    • ๐Ÿ”จ Lexer number parsing refactor (#11211, thanks @BlobCodes)
    • ๐Ÿ‘ Allow underscores after a leading zero in String#to_i (regression fix) (#11672, thanks @BlobCodes)
    • ๐Ÿ›  Fix no comma before short block in ToSVisitor (#11677, thanks @homonoidian)
    • Unify format of "unexpected token" error (#11473, thanks @straight-shoota)
    • ๐Ÿ‘ Implement lexer int128 support (#11571, thanks @BlobCodes)

    Semantic

    • ๐Ÿ‘‰ Show proper owner for Class's methods in error messages (#10590, thanks @HertzDevil)
    • Be more strict about ProcNotation variable declarations (#11372, thanks @HertzDevil)
    • ๐Ÿ‘ Allow metaclass parameters in Proc literals and pointers (#11367, thanks @HertzDevil)
    • ๐Ÿ›  Fix top-level multi-assign splat variable not working in macros (#11600, thanks @HertzDevil)
    • Replace semantic with assert_no_errors in compiler specs whenever possible (#11288, thanks @HertzDevil)
    • 0๏ธโƒฃ Make inject_primitives = false default for semantic specs (#11297, thanks @HertzDevil)
    • โž• Add spec for #8428 (#10073, thanks @docelic)
    • โœ‚ Remove and resolve spurious cast and its associated FIXME (#11455, thanks @rymiel)
    • โž• Add pending spec for recursive abstract struct (#11470, thanks @HertzDevil)

    Language

    • (breaking-change) Require elements in 1-to-n assignments to match targets exactly (#11145, thanks @HertzDevil)
    • (breaking-change) Require right-hand side of one-to-many assignments to be Indexable (#11545, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support splats on left-hand sides of multiple assignment expressions (#10410, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make all AST nodes immutable through container-returning methods (#11397, thanks @HertzDevil)
    • โž• Add auto upcast for integer and float values (#11431, #11529, thanks @asterite, @beta-ziliani)

    Standard Library

    • ๐Ÿ›  Fix Process::INITIAL_PWD for non-existent path (#10525, thanks @straight-shoota)
    • Resolve some TODOs (#11369, thanks @straight-shoota)
    • ๐Ÿ”จ Refactor some target flag uses (#11466, thanks @straight-shoota)
    • ๐Ÿ‘‰ Use Slice(UInt8)#fill in the standard library (#11468, thanks @HertzDevil)
    • Update spec/win32_std_spec.cr (#11432, #11637, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use strings instead of symbols in #finalize specs (#11619, thanks @HertzDevil)
    • ๐Ÿ›  Fix Enum.parse to handle case-sensitive member names (#11659, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve docs for Object#not_nil! (#11661, thanks @straight-shoota)

    Collection

    • (breaking-change) Always use start as parameter in subrange-accepting methods (#11350, thanks @HertzDevil)
    • (breaking-change) Refactor Indexable::Mutable#fill's overloads (#11368, thanks @HertzDevil)
    • โž• Add sorting methods to StaticArray (#10889, thanks @HertzDevil)
    • โž• Add spaceship operator to StaticArray (#11364, thanks @henrikac)
    • ๐ŸŽ (performance) Optimize BitArray#reverse! (#11363, thanks @HertzDevil)
    • ๐ŸŽ (performance) Grow large arrays more slowly (#11482, thanks @mgomes)
    • ๐Ÿ›  Fix docs for Indexable::Mutable#map! (#11349, thanks @HertzDevil)
    • Add Slice#unsafe_slice_of, #to_unsafe_bytes (#11379, thanks @HertzDevil)
    • ๐ŸŽ (performance) Avoid reallocation in Enumerable#each_cons and Iterator#cons's default reused array (#10384, thanks @HertzDevil)
    • ๐Ÿ›  Fix Array#unshift for large arrays (#11656, thanks @HertzDevil)

    Crypto

    • ๐Ÿ‘Œ Support OpenSSL on Windows (#11477, thanks @HertzDevil)
    • ๐Ÿ Encode OpenSSL version on Windows (#11516, thanks @HertzDevil)
    • โž• Add docs to Crypto::Bcrypt (#9647, thanks @j8r)
    • ๐Ÿ›  Fix getrandom for interpreter (#11624, thanks @straight-shoota)
    • ๐ŸŽ (performance) Use more efficient method to split UInt32 to bytes in Crypto::Blowfish (#11594, thanks @BlobCodes)

    Files

    • Add bindings to __xstat, __fxstat and __lxstat for x86_64-linux-gnu (#11361, #11536, thanks @straight-shoota)
    • ๐Ÿ›  Fix IO::Memory#to_s appending to itself (#11643, thanks @straight-shoota)

    LLVM

    • ๐Ÿ›  Fix LLVMExtDIBuilderCreateArrayType argument alignInBits should be UInt64 (#11644, thanks @lbguilherme)

    ๐ŸŒฒ Log

    • โž• Add Log.with_context with kwargs (#11517, thanks @caspiano)
    • ๐Ÿ”จ Refactor Log::BroadcastBackend#single_backend? (#11530, thanks @straight-shoota)

    Macros

    • โž• Add macro methods for Return, Break, Next, Yield, and exception handlers (#10822, thanks @HertzDevil)
    • โž• Add Crystal::Macros::ProcNotation#resolve and #resolve? (#11373, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support explicit return types in ProcLiterals (#11402, thanks @HertzDevil)
    • โž• Add several missing ASTNode macro methods (#10811, thanks @HertzDevil)
    • ๐Ÿ‘ Allow incomplete range arguments for #[](Range) macro methods (#11380, thanks @HertzDevil)
    • โž• Add macro methods for Metaclass nodes (#11375, thanks @HertzDevil)

    Networking

    • ๐Ÿ‘ Datagram support for UNIXServer (#11426, thanks @carlhoerberg)
    • ๐Ÿ›  Fix WebSocket#stream flushing for not exactly buffer size, add specs (#11299, thanks @will)
    • ๐Ÿ›  Fix flag for UNIX-like OS (#11382, thanks @straight-shoota)
    • โž• Add more check_headers to HTTP::Server::Response (#11253, thanks @straight-shoota)
    • Enable LogHandler address for win32 (#11465, thanks @straight-shoota)
    • Enable two specs to run on all platforms (#11467, thanks @straight-shoota)
    • TCPServer: explain how to get an ephermal port (#11407, thanks @rdp)
    • ๐Ÿ›  Fix HTTP::Server::Response#close when replaced output syncs close (#11631, thanks @straight-shoota)

    Numeric

    • (breaking-change) Fix Random.rand(max : Float32) return Float32 (#9946, thanks @j8r)
    • ๐Ÿ›  Fix Math linking errors on Windows MSVC (#11435, thanks @HertzDevil)
    • Implement compiler-rt __multi3 for arm (#11499, thanks @straight-shoota)
    • ๐Ÿ Use MPIR for Big* numbers on Windows (#11412, thanks @HertzDevil)
    • Add BigRational#to_big_r (#11462, thanks @HertzDevil)
    • ๐Ÿšš Move specs for arithmetic primitives to primitives_spec (#11298, thanks @HertzDevil)
    • Implement compiler-rt's 128-bit integer conversions to/from floats (#11437, thanks @HertzDevil)
    • ๐Ÿ›  Fix Number.significant to return 0 as is, not as Float64 (#11321, thanks @Sija)
    • ๐Ÿ›  Fix inequality for floating-point NaNs (#11229, thanks @HertzDevil)
    • โž• Add workaround for 128-bit integer division/modulo on Windows (#11551, thanks @HertzDevil)
    • Reject near-boundary and NaN values for Float-to-Int conversions (#11230, thanks @HertzDevil)

    โš™ Runtime

    • โš  GC/Boehm: Silence GC warnings about big allocations. (#11289, thanks @yxhuvud)
    • Disable impossible spec on win32, previously marked as pending (#11451, thanks @straight-shoota)
    • ๐Ÿ‘Œ Support call stacks on Windows (#11461, thanks @HertzDevil)
    • ๐Ÿ Make Windows PDB lookup relative to running executable (#11493, thanks @HertzDevil)

    Serialization

    • ๐Ÿ“œ Parses JSON UInt64 numbers. (#11395, thanks @hugopl)
    • ๐Ÿ›  Fix YAML::Any deserialize with alias (#11532, thanks @straight-shoota)

    Specs

    • ๐Ÿ‘‰ Use enums instead of symbols for Spec-related types (#11585, thanks @HertzDevil)

    System

    • โž• Add native Linux syscall interface (#10777, thanks @lbguilherme)
    • ๐Ÿ Implement Path.home on Windows (#11503, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support ~\ for Windows paths in Path#expand and File.expand_path (#11559, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support non-ASCII command-line arguments on Windows (#11564, thanks @HertzDevil)
    • ๐Ÿ Enable kernel_spec.cr on Windows CI (#11554, thanks @HertzDevil)
    • ๐Ÿ›  Fix getrandom syscall was blocking and didn't had proper error checking (#11460, thanks @lbguilherme)

    Text

    • Regex: use PCRE_UCP (#11265, thanks @asterite)
    • โž• Add missing it in UUID spec (#11353, thanks @darkstego)
    • โž• Add Char#unicode_escape and fix #dump and #inspect format (#11421, thanks @straight-shoota)
    • ๐Ÿ›  Fix Char#letter? to include all letter categories (#11474, thanks @straight-shoota)
    • Pass JIT Compile flag to study (#11325, thanks @Blacksmoke16)
    • โž• Add Comparison operator to UUID (#11352, thanks @darkstego)
    • โž• Add Char#printable? (#11429, thanks @straight-shoota)
    • ๐Ÿ›  Fix String#inspect and Char#inspect escape all non-printable characters (#11452, #11626, thanks @straight-shoota)
    • ๐Ÿ‘Œ Support custom encodings on Windows through GNU libiconv (#11480, thanks @HertzDevil)
    • (breaking-change) Change Regex#name_table to return Hash(Int32, String) (#11539, thanks @straight-shoota)
    • ๐Ÿ›  Fix skip surrogates in Char#succ and #pred (#11506, thanks @straight-shoota)
    • ๐ŸŽ (performance) Improve Base64 decoding performance (#11094, thanks @BlobCodes)
    • ๐Ÿ”จ Refactor syntax highlighter and add ANSI escape code highlighter for console (#11366, thanks @straight-shoota)
    • ๐Ÿ›  Fix UTF-8 console input/output on Windows (#11557, thanks @HertzDevil)
    • Implement Unicode grapheme clusters (#11472, #11611, thanks @straight-shoota)
    • (breaking-change) Fix Char#ascii_control? restrict to ASCII characters (#11510, thanks @straight-shoota)
    • ๐ŸŽ (performance) Performance: specify string sizes in advance (#11592, thanks @BlobCodes)
    • ๐ŸŽ (performance) Improve performance of Char#to_s (#11593, thanks @BlobCodes)
    • โž• Add docs to Colorize (#11664, thanks @straight-shoota)
    • ๐Ÿ‘Œ Support ANSI escape sequence output on more Windows consoles (#11622, thanks @HertzDevil)

    Tools

    • ๐Ÿ“„ [docs] Fix ditto with additional lines (#11336, thanks @straight-shoota)
    • ๐Ÿ“„ [docs] Compact some JSON fields for search (#11438, thanks @rymiel)
    • ๐Ÿ“„ [docs] Add 404.html page (#11428, thanks @straight-shoota)
    • ๐Ÿ“„ [docs] Improve search input a11y for generated docs (#11604, thanks @chances)
    • ๐Ÿ“„ [docs] use shard.yml version when no git tag present (#11232, thanks @superhawk610)
    • [formatter] Fix weird interactions with comments near indentation (#11441, thanks @rymiel)
    • [formatter] fix extra newline after comment in case else (#11448, thanks @rymiel)
    • [formatter] Fix space between call name and parenthesized arg (#11523, thanks @straight-shoota)
    • ๐Ÿ”จ [playground] Refactor PlaygroundPage resources list (#11608, thanks @straight-shoota)

    Other

    • ๐Ÿš€ Update previous Crystal release - 1.2.2 (#11430, thanks @straight-shoota)
    • Prepare 1.3.0-dev (#11317, thanks @straight-shoota)
    • [CI] Fix test_dist_linux_on_docker (#11512, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve compiler spec helpers for macro methods (#11139, thanks @HertzDevil)
    • โž• Add Makefile to build samples (#11419, thanks @straight-shoota)
    • ๐Ÿ‘Œ Verify downloads' hashes in Windows CI (#11423, thanks @matiasgarciaisaia)
    • ๐Ÿ Make the Windows compiler artifact more portable (#11494, thanks @HertzDevil)
    • ๐Ÿ‘ Allow compiler executable under test to be overridden (#11457, thanks @HertzDevil)
    • ๐Ÿ›  Fix CI rules for building libiconv on Windows (#11504, thanks @HertzDevil)
    • โšก๏ธ Update license template (#11498, thanks @taupiqueur)
    • ๐Ÿ“Œ Pin alpine repo for ssl libs to 3.15 (#11500, thanks @straight-shoota)
    • ๐Ÿ Don't generate PDB for MPIR on Windows (#11521, thanks @HertzDevil)
    • [Makefile] Check for LLVM_CONFIG only when LLVM is used (#11519, thanks @straight-shoota)
    • โšก๏ธ Update distribution-scripts (#11514, #11515, thanks @straight-shoota)
    • โž• Add commit hash to Windows builds (#11538, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support BuildTools and other VS variants in vswhere detection (#11534, thanks @neatorobito)
    • ๐Ÿ Define LIBXML_STATIC when building xml2.lib on Windows (#11574, thanks @HertzDevil)
    • ๐Ÿ‘Œ Improve texts in README.md (#11587, thanks @athix)
    • ๐Ÿ Include shards with Windows build artifacts (#11543, thanks @neatorobito)
    • ๐Ÿšš [CI] Remove libatomic_ops (#11598, thanks @straight-shoota)
    • โšก๏ธ Update NOTICE Copyright year to 2022 (#11679, thanks @matiasgarciaisaia)