All Versions
108
Latest Version
Avg Release Cycle
51 days
Latest Release
67 days ago

Changelog History
Page 1

  • v1.2.2 Changes

    November 10, 2021

    Compiler

    • x86_64 ABI: pass structs indirectly if there are no more available registers (#11344, thanks @ggiraldez)
    • โž• Add parentheses around type name for metaclasses of unions (#11315, thanks @HertzDevil)
    • (regression) Restrict virtual metaclasses to themselves against Class (#11377, thanks @HertzDevil)
    • (regression) Add fallback for union debug type if current debug file is not set (#11390, thanks @maxfierke)
    • (regression) Add missing debug locations to constant / class variable read calls (#11417, thanks @HertzDevil)

    Standard Library

    Collection

    • ๐Ÿ›  Fix BitArray#toggle when toggling empty subrange (#11381, thanks @HertzDevil)

    Crypto

    • โšก๏ธ Update for OpenSSL 3.0.0 (#11360, thanks @straight-shoota)
    • ๐Ÿ‘ท Restore libressl support and add CI for that (#11400, thanks @straight-shoota)
    • Replace lib version comparisons by functional feature checks (#11374, thanks @straight-shoota)

    โš™ Runtime

    • โž• Add support for DWARF 5 (#11399, thanks @straight-shoota)
    • Retrieve filename of shared libs, use in stacktraces (#11408, thanks @rdp)

    Other

    • [CI] Fix enable nix-command as experimental feature (#11398, thanks @straight-shoota)
    • ๐Ÿ“ฆ [CI] Fix OpenSSL 3 apk package name (#11418, thanks @straight-shoota)
    • โšก๏ธ Update distribution-scripts (#11404, thanks @straight-shoota)
    • [CI] Fix pcre download URL (#11422, thanks @straight-shoota)
  • v1.2.1 Changes

    October 21, 2021

    Compiler

    • โž• Adding location to the Path returned by the literal expander for regex (#11334, thanks @beta-ziliani)

    Standard Library

    • โž• Add support for LLVM 13 (#11302, thanks @maxfierke)

    โš™ Runtime

    • Move the :nodoc: flags to the right place to hide the __mul* functions. (#11326, thanks @wyhaines)

    Tools

    • โšก๏ธ Update markd subtree to v0.4.2 (#11338, thanks @straight-shoota)
  • v1.2.0 Changes

    October 13, 2021

    Compiler

    • ๐Ÿ›  Fix variance checks between generic instances for Proc#call and abstract defs. (#10899, thanks @HertzDevil)
    • ๐Ÿ›  Fix proc_spec forcing normal compilation instead of JIT (#10964, thanks @straight-shoota)
    • ๐Ÿ›  Fix ProcNotation#to_s remove whitespace for nil output type (#10935, thanks @straight-shoota)
    • Compiler: carry FileModule information inside Block (#11039, thanks @asterite)
    • Splat values correctly inside return/break/next statements (#10193, thanks @HertzDevil)
    • ๐Ÿ– Handle already stripped column numbers in compiler exceptions (#11008, thanks @pyrsmk)
    • Substitute unbound type parameters in virtual metaclass types (#11067, thanks @HertzDevil)
    • ๐Ÿ‘Œ Improve detection of instance variables in extended modules (#10554, thanks @HertzDevil)
    • Don't compute instance variable initializers on unbound generic instances (#11000, thanks @HertzDevil)
    • Syntax errors for invalid 128-bit integer literals (#10975, thanks @rymiel)
    • ๐Ÿ‘Œ Support auto-splatting in captured block literals (#10251, thanks @HertzDevil)
    • Detect cyclic includes between generic modules (#10529, thanks @HertzDevil)
    • โž• Add stricter checks for arguments to macro methods on AST nodes (#10498, thanks @HertzDevil)
    • Compiler: fix is_a? for virtual metaclass types (#11121, thanks @asterite)
    • ๐Ÿ›  Fix edge cases with unicode method names (#10978, thanks @HertzDevil)
    • Don't emit debug info for unused variable declarations (#10957, thanks @HertzDevil)
    • Fix Call.def_full_name print full block parameter (#10915, thanks @straight-shoota)
    • ๐Ÿ‘ Allow union types to be unbound (#11166, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make typeof start a nested lexical scope (#10796, thanks @HertzDevil)
    • ๐Ÿ›  Fix edge case for intersection between virtual metaclasses (#11185, thanks @HertzDevil)
    • Compiler: don't trigger "already had enclosing call" for same object (#11202, thanks @asterite)
    • Properly handle indirect arguments for external C functions (#11189, thanks @ggiraldez)
    • ๐Ÿ›  Fix resolve generic argument in block output type restriction mismatch (#11186, thanks @straight-shoota)
    • Secure array slicing when expanding macro for stack trace (#11109, thanks @pyrsmk)
    • ๐Ÿ›  Fix debug locations for Proc pointers (#11243, thanks @HertzDevil)
    • ๐Ÿ‘ Allow assignments from generic instance metaclasses to virtual metaclasses (#11250, thanks @HertzDevil)
    • Refactor CrystalPath#find_in_path_relative_to_dir for readability (#10876, #10990, #10988, thanks @straight-shoota)
    • ๐Ÿ‘ Allow constants and instance / class variables as receivers for setter proc pointers (#10741, thanks @HertzDevil)
    • Do not use globals for regex (#10951, thanks @asterite)
    • Define type filtering through an intersection operation (#10781, thanks @HertzDevil)
    • ๐Ÿ›  Fix no overflow check when primitive int converts to same type (#11003, thanks @HertzDevil)
    • Attach debug locations to generated internal LLVM functions (#10934, thanks @HertzDevil)
    • โž• Add helpful error message for invalid number literal like '.42' (#4665, thanks @MakeNowJust)
    • โž• Add CrystalPath.expand_paths, expand relative to compiler path (#11030, thanks @straight-shoota)
    • Clarify usage of "arguments" and "parameters" in error messages (#10378, thanks @HertzDevil)
    • ๐ŸŽ (performance) Don't generate type IDs for formal generic instances (#11167, thanks @HertzDevil)
    • ๐ŸŽ (performance) Don't generate unique type IDs for virtual metaclasses (#11188, thanks @HertzDevil)
    • โž• Add an environment variable for dumping type IDs (#11168, thanks @HertzDevil)
    • ๐Ÿ‘ Allow underscores in macro for's loop variables (#11141, thanks @HertzDevil)
    • ๐ŸŽ (performance) Compiler: cache cleanup transformer (#11197, thanks @asterite)
    • Avoid needless union in LLVM::ABI::AArch64#homogeneous_aggregate? (#11199, thanks @asterite)
    • ๐Ÿ‘ Removing ThinLTO support (#11194, thanks @beta-ziliani)
    • Error if abstract def implementation is inherited from supertype (#11056, thanks @straight-shoota)
    • ๐ŸŽ (performance) Add inject_primitives: false to macro_spec (#11269, thanks @straight-shoota)
    • Primitive annotations for interpreter (#11147, thanks @asterite)
    • ๐Ÿ‘Œ Support generic module instances in TypeNode#includers (#11116, thanks @HertzDevil)
    • Reject hash literals with mixed syntax (#11154, thanks @MakeNowJust)

    Language

    • ๐Ÿ‘‰ Make .as?(NoReturn) always return nil (#10896, thanks @HertzDevil)
    • Compiler: make is_a?(union) work correctly for virtual types (#11176, thanks @asterite)
    • ๐Ÿ‘ท Adjust docs for Crystal::Macros::HashLiteral#[] (#10930, thanks @kevinsjoberg)
    • ๐Ÿ›  Fix path lookup when ancestor finds type with same name as current scope (#10901, thanks @HertzDevil)
    • ๐Ÿ›  Fix several compile-time operations on generic instance metaclasses (#11101, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make #is_a? in macros respect the AST node hierarchy (#11062, thanks @HertzDevil)
    • โž• Add docs to string methods in SymbolLiteral and MacroId (#9298, thanks @MakeNowJust)
    • โž• Add clarification about when instance_vars can be called (#11171, thanks @willhbr)
    • โž• Add file_exists? macro method (#10540, thanks @Sija)

    Standard Library

    • (breaking-change) Change nonsense return types to Nil: uncategorized (#10625, thanks @oprypin)
    • (breaking-change) Change nonsense return types to Nil in formatter classes (#10623, thanks @oprypin)
    • โž• Add base64 to prelude (#11050, thanks @straight-shoota)
    • โœ‚ Remove calls to deprecated SystemError.from_winerror (#11220, thanks @straight-shoota)
    • โž• Add support for LLVM 12 (#10873, #11178, thanks @maxfierke, @Blacksmoke16)
    • Examples: fix (2021-09) (#11234, thanks @maiha)
    • Don't use :nodoc: when overriding public methods (#11096, thanks @HertzDevil)
    • โž• Add internal registry implementation for win32 (#11137, thanks @straight-shoota)

    Collection

    • (breaking-change) Move Array#product to Indexable#cartesian_product (#10013, thanks @HertzDevil)
    • Disallow Slice(T).new(Int) where T is a union of primitive number types (#10982, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make Array#transpose, Enumerable#reject, Enumerable#to_h work with tuples (#10445, thanks @HertzDevil)
    • ๐Ÿ›  Fix Enumerable#each block return type (#10928, thanks @straight-shoota)
    • ๐Ÿ›  Fix key type for empty NamedTuple be Symbol (#10942, thanks @caspiano)
    • ๐Ÿ›  Fix overflow in BitArray#[](Int, Int) for sizes between 33 and 64 (#10809, thanks @HertzDevil)
    • ๐Ÿ›  Fix Range#step for non-integer Steppable types (#11130, thanks @straight-shoota)
    • ๐ŸŽ (performance) Construct an array literal in NamedTuple#map (#10950, thanks @caspiano)
    • โž• Add Slice#fill (#10924, thanks @HertzDevil)
    • โž• Add range overloads for BitArray#toggle (#10743, thanks @HertzDevil)
    • โž• Add stable sort implementation to Slice, Array and Indexable::Mutable (#10163, #11029, #11254, thanks @MakeNowJust, thanks @straight-shoota)
    • ๐Ÿ‘ Allow Enumerable(T)#reduce's return type to differ from T (#11065, thanks @HertzDevil)
    • Implement Enumerable#tally_by (#10922, thanks @caspiano)
    • โž• Add the Indexable::Mutable(T) module (#11059, thanks @HertzDevil)
    • โœ‚ Remove restriction of bsearch block output type (#11212, thanks @straight-shoota)
    • โž• Add and improve type restrictions of block arguments (#10467, #11246, #11267
    • ๐ŸŽ (performance) Optimize #rotate! (#11198, thanks @HertzDevil)

    Concurrency

    • ๐Ÿ›  Fix Documentation of Fiber.timeout (#11271, thanks @toddsundsted)
    • ๐ŸŽ (performance) Scheduler#reschedule: Shortcut lookup for current fiber. (#11156, thanks @yxhuvud)
    • โž• Add sleep support to win32 event loop (#10605, thanks @straight-shoota)

    Files

    • (breaking-change) Change nonsense return types to Nil in IO-related methods (#10621, thanks @oprypin)
    • ๐Ÿ›  Fix File.match? to accept Path type as path argument (#11075, thanks @fishnibble)
    • โž• Add FileUtils method specs with String and Path arguments (#10987, thanks @straight-shoota)
    • 0๏ธโƒฃ Make IO#read_char's default behaviour UTF-8-strict (#10446, thanks @HertzDevil)
    • ๐Ÿ›  Fix glob with multiple recurse patterns (#10813, thanks @straight-shoota)
    • IO: fix bug in gets without peek involving \r and limit (#11241, thanks @asterite)
    • ๐Ÿ‘‰ Make FileUtils.mv work across filesystems (#10783, thanks @naqvis)
    • ๐ŸŽ (performance) Improve performance of Path#dirname and Path#extension (#11001, thanks @BlobCodes)

    Networking

    • (breaking-change) Change nonsense return types to Nil in HTTP-related methods and Log (#10624, thanks @oprypin)
    • ๐Ÿ›  Fix trailing rescue syntax (#11083, thanks @straight-shoota)
    • ๐Ÿ›  Fix spec for HTTP::Params can't run on its own (#11128, thanks @asterite)
    • ๐Ÿ›  Fix parsing cookie Domain attribute with leading dot (#11098, thanks @mamantoha)
    • Rescue OpenSSL::SSL::Error in HTTP::Server#handle_client (#11146, thanks @straight-shoota)
    • ๐Ÿ›  Fix TCPSocket constructors (#11049, thanks @straight-shoota)
    • ๐Ÿ‘Œ Support basic auth from URI in websockets (#10854, thanks @willhbr)
    • ๐Ÿท Tag std specs that need network access (#11048, thanks @toshokan)
    • Proper handling of max-age and expires for cookies (#10564, thanks @straight-shoota, @watzon)
    • Retry HTTP::Client requests once if io is closed (#11088, thanks @carlhoerberg)
    • Implement Socket for win32 (#10784, thanks @straight-shoota)
    • โž• Add URI.encode_path and deprecate URI.encode (#11248, thanks @straight-shoota)

    Numeric

    • (breaking-change) Refine type restriction of Math.frexp(BigFloat) (#10998, thanks @straight-shoota)
    • ๐Ÿ›  Fix BigInt#to_s emitting null bytes for certain values (#11063, thanks @HertzDevil)
    • ๐Ÿ›  Fix Float#humanize for values outside 1e-4...1e15 (#10881, thanks @straight-shoota)
    • โž• Add type restrictions and fix return types of BigFloat#to_x methods (#10996, thanks @straight-shoota)
    • โž• Add integer square root (#10549, thanks @kimburgess)
    • โž• Add negative exponential support to BigDecimal (#10892, thanks @stakach)
    • Add #next_float and #prev_float to Float32 and Float64 (#10908, thanks @HertzDevil)
    • โž• Add precision parameter to Int#to_s (#10926, thanks @HertzDevil)
    • ๐ŸŽ (performance) Improve Int parsing performance (#11093, thanks @BlobCodes)
    • Implement Int128 compiler-rt methods (#11206, thanks @BlobCodes)
    • ๐Ÿ›  Fix BigDecimal operations with floats (#10874, thanks @stakach)
    • โž• Add String#to_(u/i)128(?) methods (#11245, thanks @BlobCodes)

    โš™ Runtime

    • Extract libunwind from callstack (#11205, thanks @straight-shoota)

    Serialization

    • (breaking-change) Change nonsense return types to Nil: JSON and YAML (#10622, thanks @oprypin)
    • (breaking-change) Add type restriction and conversion to YAML::PullParser#location (#10997, thanks @straight-shoota)
    • ๐Ÿ‘ Allow EOF IO passed to JSON::PullParser.new (#10864, thanks @Blacksmoke16)
    • Quote the named tuple's keys on deserialization (#10919, thanks @Blacksmoke16)
    • โ™ป๏ธ Refactor JSON::PullParser#consume_number to use stdlib number parsing (#10447, thanks @straight-shoota)
    • XML Namespace improvements (#11072, thanks @Blacksmoke16)
    • โž• Add JSON/YAML serialization to URI (#10404, thanks @straight-shoota)

    Specs

    • โž• Add missing require in iterator_spec (#11148, thanks @asterite)
    • โž• Add missing requires to run a couple of specs standalone (#11152, thanks @asterite)
    • ๐Ÿ‘ Allow describe without requiring an argument (#10974, thanks @straight-shoota)

    System

    • SystemError: Fix inconsistent signature. (#11002, thanks @yxhuvud)

    Text

    • (breaking-change) Deprecate String#unsafe_byte_at (#10559, thanks @straight-shoota)
    • (breaking-change) Rename IO#write_utf8 to #write_string. (#11051, thanks @straight-shoota)
    • ๐Ÿ‘‰ Use #write_string instead of #write whenever writing strings to unknown IOs (#11011, thanks @HertzDevil)
    • Don't use #write_byte whenever writing ASCII characters to unknown IOs (#11124, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make Int#chr reject surrogate halves (#10451, thanks @HertzDevil)
    • CSV: don't eagerly check next char after newline (#11174, thanks @asterite)
    • ๐Ÿ›  Fix link on regex.cr (#11204, thanks @gemmaro)
    • ๐Ÿ— Disallow non-UTF-8 encoding settings for String::Builder (#11025, thanks @HertzDevil)
    • โšก๏ธ Unicode: update to version 14.0.0 (#11215, thanks @Blacksmoke16)

    Tools

    • Formatter: Handle (-> ) correctly (#10945, thanks @HertzDevil)
    • ๐Ÿ‘‰ Use markd for markdown rendering in the compiler (#11040, thanks @straight-shoota)
    • Formatter: Handle leading tuple literals in multi-expression return/break/next properly (#10597, thanks @HertzDevil)
    • Include parent headings in anchor links (#9839, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix formatting nested multiline array and tuple (#11153, thanks @MakeNowJust)
    • crystal init: Improve transformation of project name with hyphens (#11170, thanks @Kanezoh)
    • ๐Ÿ›  Fix formatting generic types with suffix (#11187, thanks @MakeNowJust)
    • โš  Make WARNING an admonition keyword (#10898, thanks @HertzDevil)
    • โ™ป๏ธ Refactor hierarchy printers (#10791, thanks @HertzDevil)

    Other

    • ๐Ÿ›  Fix typos (#11045, #11163, #11138, hanks @toshokan, thanks @MakeNowJust, thanks @schmijos)
    • โšก๏ธ Update readme to point to IRC channel on libera.chat (#11024, thanks @jhass)
    • โšก๏ธ [CI] Update ruby-install (#11276, thanks @straight-shoota)
    • ๐Ÿง [CI] Remove test_linux_32 and add smoke test for 32-bit gnu (#11127, thanks @straight-shoota)
    • ๐Ÿ“ฆ [CI] Remove obsolete package_build workflow (#11240, thanks @straight-shoota)
    • ๐Ÿ— [CI] Add build matrix with 1.0.0 and 1.1.1 (#11278, thanks @straight-shoota)
    • โšก๏ธ [CI] Update aarch64.yml (#11160, thanks @beta-ziliani)
    • โšก๏ธ [CI] Update distribution-scripts (universal darwin & demote alpine to 3.12) (#11228, thanks @bcardiff)
    • โšก๏ธ Update shards 0.16.0 (#11292, thanks @straight-shoota)
    • ๐Ÿš€ Update previous release Crystal 1.1.0 (#10955, thanks @straight-shoota)
    • ๐Ÿ”€ Merge changelog entry for 1.1.1 (#11028, thanks @straight-shoota)
    • ๐Ÿš€ Update previous release Crystal 1.1.1 (#11053, thanks @straight-shoota)
    • PR template (#10894, thanks @beta-ziliani)
    • โž• Add github-changelog script (#11155, thanks @straight-shoota)
    • โž• Add make install (#10878, thanks @straight-shoota)
    • [CI] Sanitize version from branch name (#11294, thanks @straight-shoota)
    • โšก๏ธ Update libgc to 8.2.0 (#11293, thanks @straight-shoota)
    • ๐Ÿš€ [CI] Unify maintenance_release and tagged_release workflows (#11273, thanks @straight-shoota)
    • โšก๏ธ [CI] Update distribution-scripts (make install) (#11307, thanks @straight-shoota)
    • ๐Ÿš€ [CI] Enable publish docker images on tagged release (#11309, thanks @straight-shoota)
    • โšก๏ธ [CI] Update distribution-scripts (fix for libgc in alpine Docker image) (#11310, thanks @straight-shoota)
    • ๐ŸŽ [CI] Pin macOS runner to 10.15 (#11282, thanks @straight-shoota)
    • [CI] Fix push_obs_nightly (#11301, thanks @straight-shoota)
    • โšก๏ธ [CI] Update distribution-scripts (#11285, thanks @straight-shoota)
    • ๐Ÿ— [CI] Remove i386 builds (#11287, thanks @straight-shoota)
  • v1.1.1 Changes

    July 26, 2021

    Language changes

    • โช Revert name of top-level module to main (#10993, thanks @beta-ziliani)

    Standard Library

    • ๐Ÿ›  Fix missing required args for Socket::Addrinfo::Error.new (#10960, thanks @straight-shoota)
    • ๐Ÿ›  Fix disable unnecessary spec on win32 (#10971, thanks @straight-shoota)
    • โœ‚ Remove incorrect type restrictions on index methods with offset (#10972, thanks @straight-shoota)
    • ๐Ÿ›  Fix: documentation of #step in Number and Char (#10966, #11006, thanks @beta-ziliani and @straight-shoota)

    Compiler

    • ๐Ÿ›  Fix parsing macro body with escaped backslash in literal (#10995, thanks @straight-shoota)

    Other

    • โšก๏ธ Updating aarch64 actions to use 1.0.0 images (#10976, thanks @beta-ziliani)
  • v1.1.0 Changes

    July 14, 2021

    Language changes

    • ๐Ÿ‘Œ Support splat expansions inside tuple and array literals. (#10429, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support breaks with values inside while expressions. (#10566, thanks @HertzDevil)

    Macros

    • โž• Add @top_level to access the top-level scope in macros. (#10682, thanks @beta-ziliani)
    • Fix: preserve integer sizes in NumberLiteral#int_bin_op. (#10713, thanks @collidedscope)
    • โž• Add NumberLiteral#to_number. (#10802, thanks @straight-shoota)
    • (breaking-change) Add Crystal::Macros::Path#global? deprecating the old Crystal::Macros::Path#global. (#10812, thanks @HertzDevil)
    • ๐Ÿ›  Minor fixes to docs of UnaryExpression macro nodes. (#10816, thanks @HertzDevil)
    • โž• Add macro method ASTNode#nil?. (#10850, #10616, thanks @straight-shoota)

    Standard library

    Global changes

    ๐Ÿ Windows support

    • Port Socket::Address to win32 . (#10610, thanks @straight-shoota)
    • Port Socket::Addrinfo to win32. (#10650, thanks @straight-shoota)
    • Extract system-specifics from Socket. (#10706, thanks @straight-shoota)
    • Make WinError portable and add it to prelude. (#10725, thanks @straight-shoota)
    • Improve portability of SystemError. (#10726, thanks @straight-shoota)
    • Refactor Socket::Addrinfo::Error based on os_error. (#10761, thanks @straight-shoota)
    • Add WinError.wsa_value and specs for WinError. (#10762, thanks @straight-shoota)
    • Add specs for Errno. (#10763, thanks @straight-shoota)
    • Refactor: Move win32 libc bindings from winbase.cr to approriate files. (#10771, thanks @straight-shoota)
    • Refactor: Change protocol socket fd to Socket::Handle. (#10772, thanks @straight-shoota)
    • Fix Socket::Connect error in addrinfo inherit os_error. (#10782, thanks @straight-shoota)
    • Reorganize some win32 libc bindings (#10776, thanks @straight-shoota)

    Type annotations

    Numeric

    • โž• Add Number.new overload for String. (#10422, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix Math.pw2ceil for zero and 64-bit integers. (#10555, thanks @straight-shoota)
    • โž• Add #positive? & #negative? to Number and Time::Span. (#10601, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix imprecise Number#significant algorithm. (#10615, thanks @straight-shoota)
    • โž• Add BigFloat's rounding modes. (#10618, thanks @HertzDevil)
    • ๐Ÿ›  Fix handling of arithmetic overflow in BigDecimal#div. (#10628, thanks @kellydanma)
    • Clarify behaviour of unsafe Float-to-number conversions. (#10631, thanks @HertzDevil)
    • ๐Ÿ›  Fix return type restriction for Number#humanize overload. (#10633, thanks @HertzDevil)
    • ๐Ÿ›  Fix printf float with with many digits. (#10719, thanks @straight-shoota)
    • โž• Add BigDecimal's missing rounding modes. (#10798, thanks @HertzDevil)
    • โž• Add support for using big rational #** with unsigned ints. (#10887, thanks @stakach)
    • Add overflow detection to BigFloat#to_i64 and #to_u64. (#10630, thanks @HertzDevil)

    Text

    • ๐ŸŽ (performance) Optimize Levenshtein.distance. (#8324, thanks @r00ster91)
    • โ™ป๏ธ Refactor: add private Slice#hexdump(io : IO) overload. (#10496, thanks @HertzDevil)
    • Restrict MatchData#begin and #end to Int32. (#10656, thanks @straight-shoota)
    • Refactor: remove #check_needs_resize from IO::Memory, String::Builder. (#10732, thanks @straight-shoota)
    • ๐Ÿ›  Fix Base64#encode, exclude last 3 bytes from bswap. (#10752, thanks @kostya)
    • Refactor: avoid union type in Char::Reader#decode_char_at. (#10758, thanks @asterite)

    Collections

    • โž• Add sub/superset checking methods to Hash. (#7500, thanks @Sija)
    • ๐Ÿ‘Œ Improve documentation of Array#[](Range). (#10243, thanks @straight-shoota)
    • โž• Add Steppable module as generalized Number#step. (#10279, thanks @straight-shoota)
    • Add docs for #map_with_index. (#10512, thanks @wontruefree)
    • โž• Add Array#truncate. (#10712, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Always copy Hash's default block on #dup and #clone. (#10744, thanks @HertzDevil)
    • Apply Array#push's resizing heuristic to #unshift. (#10750, thanks @HertzDevil)
    • โ™ป๏ธ Refactor index / count normalization in range-like methods. (#10753, thanks @HertzDevil)
    • โž• Add methods for cumulative folding and prefix sums. (#10789, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Pass read-only flag to peeked slice in IO::Memory. (#10891, thanks @z64)

    Crypto

    • โž• Add methods for getting peer certificates and signatures in OpenSSL. (#8005, thanks @will)
    • โž• Add docs for OpenSSL::Cipher. (#9934, thanks @sol-vin)
    • ๐Ÿ›  Fix format of src/openssl/cipher.cr. (#10705, thanks @straight-shoota)
    • ๐Ÿ“š Refine documentation for Random#urlsafe_base64. (#10724, thanks @straight-shoota)
    • Fix ssl context required for add_x509_verify_flags. (#10756, thanks @stakach)

    Time

    • ๐Ÿ‘Œ Improve error handling for load_localtime on unix. (#10654, thanks @straight-shoota)
    • ๐Ÿ›  Fix broken call to Time#to_s. (#10778, thanks @straight-shoota)
    • ๐Ÿ›  Fix Time#shift cover date boundaries with zone offset. (#10871, thanks @straight-shoota)

    Files

    • ๐Ÿ›  Fix and unify documentation for puts. (#10614, thanks @straight-shoota)
    • ๐Ÿ›  Fix Path#sibling return type. (#10655, thanks @Sija)
    • โž• Add Path in FileUtils's methods to match the interfaces it's wrapping. (#10747, thanks @yb66)
    • ๐Ÿ›  Fix FileDescriptor#pos return Int64 on armv6 (#10845, thanks @straight-shoota)

    Fibers

    • ๐Ÿ“š Clarify documentation on Path#join and #==. (#10455, thanks @straight-shoota)

    Networking

    • โž• Add an example middleware for remote_address. (#10408, thanks @oprypin)
    • โž• Add OAuth2::Client#http_client. (#10452, thanks @straight-shoota)
    • ๐Ÿ›  Fix undefined constant error for http/params. (#10537, thanks @stakach)
    • ๐Ÿ›  Fix looping forever at 100% CPU if socket is closed. (#10658, thanks @didactic-drunk)
    • ๐Ÿ›  Fix documentation of HTTP::Cookies#[]= empty path. (#10669, thanks @straight-shoota)
    • ๐Ÿ›  Fix handling of EAI_SYSTEM for getaddrinfo. (#10757, thanks @straight-shoota)
    • ๐ŸŽ (performance) Cache socket.local_address and socket.remote_address. (#10765, thanks @lbguilherme)
    • ๐Ÿ›  Fix: IO::ARGF#read should always return i32. (#10828, thanks @stakach)
    • ๐Ÿ›  Fix HTTP::Cookie parse quoted cookie value. (#10853, thanks @straight-shoota)
    • โž• Add Socket::Addrinfo#inspect (#10775, thanks @straight-shoota)

    System

    • ๐Ÿ›  Fix sentence structure in process.cr. (#9259, thanks @matthewmcgarvey)

    โš™ Runtime

    • Implement segfault handler in Crystal. (#10463, thanks @maxfierke)
    • ๐Ÿ‘Œ Improve documentation for Pointer.malloc and GC methods. (#10644, thanks @straight-shoota)
    • โž• Add links to literal types in the language reference. (#10827, thanks @straight-shoota)

    Serialization

    • โž• Add docs for some json methods. (#10257, thanks @rdp)
    • Add UUID.from_json_object_key?. (#10517, thanks @kalinon)
    • ๐Ÿ›  Fix JSON::Lexer's UTF-16 escape sequence parsing. (#10450, thanks @HertzDevil)
    • Fix YAML::Serializable.use_yaml_discriminator with typed enum. (#10460, thanks @straight-shoota)
    • ๐Ÿ›  Fix YAML to not parse empty string as nil. (#10608, thanks @straight-shoota)
    • โž• Add UUID to yaml parsing. (#10715, thanks @kalinon)
    • ๐Ÿ›  Fix double flushing json/yaml builders. (#10716, thanks @matthewmcgarvey)

    Specs

    • โž• Add spec helper it_iterates for iteration methods. (#10158, #10797, thanks @straight-shoota)
    • โž• Add usage instructions for spec runner to compiler. (#10046, thanks @straight-shoota)
    • ๐Ÿ›  Fix: Handle invalid option errors on crystal spec. (#10787, thanks @hugopl)
    • ๐Ÿ“„ Include spec/** in docs_main. (#10863, thanks @straight-shoota)

    Compiler

    • โž• Add support for type var splats inside Tuple during generic parameter substitution. (#10232, thanks @HertzDevil)
    • ๐Ÿ›  Fix: consider free vars in parameters of abstract def implementations before existing types, in particular fixing the creation of empty types. (#10503, thanks @HertzDevil)
    • ๐Ÿ›  Fix variance checks between generic instances for Proc#call and abstract defs. (#10507, #10899, thanks @HertzDevil)
    • ๐Ÿ›  Fix error message when default parameter value doesn't match non-type restriction. (#10515, thanks @HertzDevil)
    • ๐Ÿ›  Fix type restriction logic for generic module instances. (#10519, thanks @HertzDevil)
    • ๐Ÿ›  Fix logic for subclass restricted against uninstantiated nested generic superclass. (#10522, #10560, thanks @HertzDevil)
    • ๐Ÿ›  Fix: eliminate extraneous types in certain non-commutative unions. (#10527, thanks @HertzDevil)
    • ๐Ÿ›  Fix: exclude variables' final types inside while true if re-assigned before first break. (#10538, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make Pointer(T)#value= even stricter for generic arguments. (#10553, thanks @HertzDevil)
    • ๐Ÿ›  Fix body locations for def nodes that have default args . (#10619, thanks @oprypin)
    • ๐Ÿ›  Fix call nodes' location after transforming its splats. (#10620, thanks @oprypin)
    • Fix check_type_allowed_as_proc_argument to show the type name. (#10688, thanks @straight-shoota)
    • โž• Add free variables to "no overload matches" errors. (#10692, thanks @HertzDevil)
    • ๐Ÿ›  Fix: make virtual unbound types also unbound. (#10704, thanks @HertzDevil)
    • ๐Ÿ›  Fix: run instance variable initializers on instantiated generic superclasses only. (#10729, thanks @HertzDevil)
    • ๐Ÿ›  Fix: allow previous_def to init superclass's non-nilable ivars. (#10733, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Use only last sub-expression of Expressions nodes for conditional type filters. (#10738, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Don't compute type filters inside typeof's argument. (#10739, thanks @HertzDevil)
    • ๐Ÿ›  Fix: Devirtualize types in TypeNode#==(other : TypeNode) and #!=. (#10742, thanks @HertzDevil)
    • ๐Ÿ›  Fix exit types of variables assigned inside while conditions. (#10759, thanks @HertzDevil)
    • ๐Ÿ›  Fix logic for responds_to? of generic module instances. (#10760, thanks @HertzDevil)
    • โž• Add support for accessing a common value of a union type. (#10770, thanks @asterite)
    • ๐Ÿ›  Fix subtype relation when generic type variable is a virtual abstract struct. (#10779, thanks @HertzDevil)
    • ๐Ÿ›  Fix array literals consisting entirely of splat expansions. (#10792, thanks @HertzDevil)
    • ๐Ÿ›  Fix parsing macro literal containing char literal. (#10799, thanks @straight-shoota)
    • โ™ป๏ธ Refactor: Use type instead of is_a? in filters. (#10815, thanks @caspiano)
    • Expand named macro expression arguments before outer macro call expansion. (#10819, thanks @HertzDevil)
    • ๐Ÿ–จ Be more strict about printing operator calls as short forms. (#10825, thanks @HertzDevil)
    • ๐Ÿ›  Fix union logic between metaclasses of uninstantiated generic classes in same hierarchy. (#10832, thanks @HertzDevil)
    • ๐Ÿ›  Fix uninstantiated generic classes casting to themselves. (#10883, thanks @HertzDevil)
    • ๐Ÿ‘ Allow underscore in block return type even if the type can't be computed (#10933, thanks @asterite)
    • ๐Ÿ›  Fix parser identifies call with named args as var (#10842, thanks @straight-shoota)

    Tools

    Formatter

    • ๐Ÿ›  Fix: allow trailing space in parenthesized unions. (#10595, thanks @HertzDevil)
    • ๐Ÿ›  Fix: don't consume newline after endless range literals. (#10596, thanks @HertzDevil)
    • ๐Ÿ›  Fix indentation of heredocs relative to delimiter. (#10806, thanks @HertzDevil)
    • ๐Ÿ›  Fix heredoc indent with outer indent. (#10867, thanks @straight-shoota)

    Doc generator

    • ๐Ÿ›  Fix escaping of argument lists in doc generator, expose JSON. (#10109, #10821, thanks @oprypin and @Sija)
    • ๐Ÿ–จ Print named generic type arguments of type restrictions in docs. (#10424, thanks @HertzDevil)
    • ๐Ÿ›  Fix: respect overload order between methods. (#10609, thanks @HertzDevil)
    • ๐Ÿ›  Fix PropagateDocVisitor visit macro def. (#10634, thanks @straight-shoota)
    • ๐Ÿ›  Fix: remove superclass from ASTNode in API docs. (#10664, thanks @beta-ziliani)
    • (breaking-change) Remove deprecated ditto doc directive. (#10755, thanks @caspiano) (Note that it was scheduled for removal since 0.34)
    • ๐Ÿ›  Fix: Restrict macro types' ancestors to ASTNode. (#10722, thanks @HertzDevil)
    • ๐Ÿ›  Fix docs generator search use html_id. (#10875, thanks @straight-shoota)
    • ๐Ÿ›  Fix --sitemap-priority, --sitemap-changefreq. (#10906, thanks @HertzDevil)

    Others

    • โšก๏ธ CI: Update to use 1.0.0. (#10533, thanks @bcardiff)
    • โฌ†๏ธ Bump distribution-scripts. (#10639, #10673, #10754, thanks @straight-shoota and @bcardiff)
    • ๐Ÿ›  Fix contribution instructions. (#10558, thanks @straight-shoota)
    • โœ‚ Remove .dockerignore. (#10642, thanks @miry)
    • โž• Add section about pull requests to the contributing guide. (#10683, thanks @straight-shoota)
    • ๐Ÿ— Publish nightly builds to OBS. (#10684, thanks @straight-shoota)
    • โœ‚ Remove broken travis.yml config from crystal init. (#10800, thanks @straight-shoota)
    • โœ… Disable broken test_darwin job on circleci. (#10823, thanks @straight-shoota)
    • โšก๏ธ Update distribution-scripts for shards 0.15.0. (#10862, thanks @straight-shoota)
    • โž• Add smoke tests for platforms where we don't run full tests (#10848, thanks @straight-shoota)
  • v1.0.0 Changes

    March 22, 2021

    Language changes

    • ๐Ÿ‘Œ Support Tuple#[](Range) with compile-time range literals. (#10379, thanks @HertzDevil)

    Macros

    • Don't use named argument key names as parameters for method_missing calls. (#10388, thanks @HertzDevil)

    Standard library

    • (breaking-change) Drop deprecated definitions. (#10386, thanks @bcardiff)
    • ๐Ÿ›  Fix example codes in multiple places. (#10505, thanks @maiha)

    Macros

    • (breaking-change) Always add explicit return types in getter/property macros. (#10405, thanks @Sija)

    Numeric

    • (breaking-change) Change default rounding mode to TIES_EVEN. (#10508, thanks @straight-shoota)
    • ๐Ÿ›  Fix downcasting float infinity. (#10420, thanks @straight-shoota)
    • ๐Ÿ›  Fix String#to_f out of range behaviour. (#10425, thanks @straight-shoota)
    • Implement rounding mode for Number#round. (#10413, #10360, #10479, thanks @straight-shoota)

    Text

    • โž• Add missing unicode whitespace support to String methods. (#10367, thanks @straight-shoota)

    Collections

    • ๐Ÿ›  Fix Range#== to ignore generic type arguments. (#10309, thanks @straight-shoota)
    • Make Enumerable#flat_map, Iterator#flat_map work with mixed element types. (#10329, thanks @HertzDevil)
    • โœ‚ Remove duplicated sort related specs. (#10208, thanks @MakeNowJust)
    • ๐Ÿ›  Fix docs regarding Set#each return type. (#10477, thanks @kachick)
    • Fix docs examples regarding Set#*set_of?. (#10285, thanks @oddp)
    • ๐Ÿ›  Fix expectation on set specs. (#10482, thanks @kachick)

    Serialization

    • (breaking-change) Serialize Enum to underscored String by default. (#10431, thanks @straight-shoota, @caspiano)
    • (breaking-change) Use class instead of struct for types in XML module. (#10436, thanks @hugopl)
    • โž• Add YAML::Nodes::Node#kind. (#10432, thanks @straight-shoota)

    Files

    • Let IO::Memory not be writable with read-only Slice. (#10391, thanks @straight-shoota)
    • ๐Ÿ‘ Allow Int64 values within IO#read_at. (#10356, thanks @Blacksmoke16)
    • โž• Add IO::Sized#remaining=(value) to reuse an existing instance. (#10520, thanks @jgaskins)

    Networking

    • ๐Ÿ”’ (security) Remove Cookie Name Decoding. (#10442, thanks @security-curious)
    • (breaking-change) Remove implicit en-/decoding for cookie values. (#10485, thanks @straight-shoota)
    • (breaking-change) Split HTTP::Cookies.from_headers into separate methods for server/client. (#10486, thanks @straight-shoota)
    • ๐ŸŽ (performance) Minor performance improvements to HTTP::Cookies. (#10488, thanks @straight-shoota)
    • Respect subclasses when constructing HTTP::Client from class methods. (#10375, thanks @oprypin)
    • ๐Ÿ‘‰ Make the content-length header more RFC compliant. (#10353, thanks @Blacksmoke16)
    • Fix #respond_with_status when headers written or closed. (#10415, thanks @straight-shoota)
    • ๐Ÿ›  Fix Cookie#== to take all ivars into account. (#10487, thanks @straight-shoota)
    • โœ‚ Remove implicit path=/ from HTTP::Cookie. (#10491, thanks @straight-shoota)
    • โž• Add HTTP::Request#local_address. (#10385, thanks @carlhoerberg)

    ๐ŸŒฒ Logging

    • Close AsyncDispatcher on #finalize. (#10390, thanks @straight-shoota)

    System

    • ๐Ÿ›  Fix Process.parse_argument behavior against a quote in a word. (#10337, thanks @MakeNowJust)
    • โž• Add aarch64 support for macOS/darwin targets. (#10348, thanks @maxfierke, @RomainFranceschini)
    • Add LibC::MAP_ANONYMOUS to x86_64-darwin to match other platforms. (#10398, thanks @sourgrasses)

    โš™ Runtime

    • ๐Ÿ‘Œ Improve error message for ELF reader on uninitialized runtime. (#10282, thanks @straight-shoota)

    Compiler

    • (breaking-change) Disallow surrogate halves in escape sequences of string and character literals, use \x for arbitrary binary values. (#10443, thanks @HertzDevil)
    • ๐Ÿ›  Fix ICE when exhaustive in-clause calls pseudo-method. (#10382, thanks @HertzDevil)
    • ๐Ÿ›  Fix ICE when parsing foo.% calls. (#10351, thanks @MakeNowJust)
    • ๐Ÿ›  Fix edge cases for symbol quoting rules. (#10389, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support closured vars inside Const initializer. (#10478, thanks @RX14)
    • ๐Ÿ“š Documentation grammar fix. (#10369, thanks @szTheory)

    Language semantics

    • Don't fail on untyped is_a?. (#10320, thanks @asterite)
    • ๐Ÿ›  Fix named arguments in super and previous_def calls. (#10400, thanks @HertzDevil)
    • ๐Ÿ›  Fix assignments in array literals. (#10009, thanks @straight-shoota)
    • Consider type var splats in generic type restrictions. (#10168, thanks @HertzDevil)
    • Align Proc.new(&block)'s behaviour with other captured blocks. (#10263, thanks @HertzDevil)
    • ๐Ÿ”€ Don't merge NamedTuple metaclasses through instance types. (#10501, thanks @HertzDevil)
    • Access instantiations of NamedTuple and other generics uniformly. (#10401, thanks @HertzDevil)
    • ๐Ÿ‘Œ Improve error message for auto-cast error at Var assign. (#10327, thanks @straight-shoota)
    • Exclude abstract defs from "no overload matches" errors. (#10483, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support splats inside tuple literals in type names. (#10430, thanks @HertzDevil)
    • Accept pointer instance types on falsey conditional branches. (#10464, thanks @HertzDevil)
    • Match named arguments by external parameter names when checking overload cover. (#10530, thanks @HertzDevil)

    Doc generator

    • Detect source locations in more situations. (#10439, thanks @oprypin)

    Others

    • CI improvements and housekeeping. (#10299, #10340, #10476, #10480, thanks @bcardiff, @Sija, @straight-shoota)
    • โšก๏ธ Update distribution-scripts to use Shards v0.14.1. (#10494, thanks @bcardiff)
    • โž• Add GitHub issue templates. (#8934, thanks @j8r)
    • โž• Add LLVM 11.1 to the list of supported versions. (#10523, thanks @Sija)
    • ๐Ÿ›  Fix SDL examples crashes. (#10470, thanks @megatux)
  • v0.36.1 Changes

    February 02, 2021

    Standard library

    • ๐Ÿ›  Fix Enum.from_value? for flag enum with non Int32 base type. (#10303, thanks @straight-shoota)

    Text

    • Don't raise on String.new with null pointer and bytesize 0. (#10308, thanks @asterite)

    Collections

    • โช Explicitly return a Hash in Hash#dup and Hash#clone (reverts #9871). (#10331, thanks @straight-shoota)

    Serialization

    • ๐Ÿ—„ XML: fix deprecation warning. (#10335, thanks @bcardiff)

    โš™ Runtime

    • Eager load DWARF only if CRYSTAL_LOAD_DWARF=1. (#10326, thanks @bcardiff)

    Compiler

    • ๐ŸŽ (performance) Initialize right-away constants in a separate function. (#10334, thanks @asterite)
    • ๐Ÿ›  Fix incorrect casting between different union types. (#10333, thanks @asterite)
    • ๐Ÿ›  Fix a formatting error in the "missing argument" error. (#10325, thanks @BlobCodes)
    • ๐Ÿ›  Fix while condition assignment check for Not. (#10347, thanks @asterite)
    • ๐Ÿ‘ Allow operators and setters-like macros names back. (#10338, thanks @asterite)

    Language semantics

    • ๐Ÿ›  Fix type check not considering virtual types. (#10304, thanks @asterite)
    • ๐Ÿ‘‰ Use path lookup when looking up type for auto-cast match. (#10318, thanks @asterite)
  • v0.36.0 Changes

    January 26, 2021

    Language changes

    • (breaking-change) Reject annotations on ivars defined in base class. (#9502, thanks @waj)
    • (breaking-change) Make ** be right associative. (#9684, thanks @asterite)

    Macros

    • (breaking-change) Deprecate TypeNode#has_attribute? in favor of #annotation. (#9950, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support heredoc literal in macro. (#9467, thanks @MakeNowJust)
    • ๐Ÿ‘Œ Support %Q, %i, %w, and %x literals in macros. (#9811, thanks @toddsundsted)
    • ๐Ÿ‘ Allow executing multi-assignments in macros. (#9440, thanks @MakeNowJust)

    Standard library

    • (breaking-change) Drop deprecated CRC32, Adler32 top-level. (#9530, thanks @bcardiff)
    • (breaking-change) Drop deprecated Flate, Gzip, Zip, Zlib top-level. (#9529, thanks @bcardiff)
    • (breaking-change) Drop deprecated with_color top-level method. (#9531, thanks @bcardiff)
    • (breaking-change) Make SemanticVersion parsing more strict. (#9868, thanks @hugopl)
    • Respect explicitly provided type vars for Tuple.new and NamedTuple.new. (#10047, thanks @HertzDevil)
    • ๐Ÿ›  Fix OptionParser to handle sub-commands with hyphen. (#9465, thanks @erdnaxeli)
    • ๐Ÿ›  Fix OptionParser to not call handler if value is given to none value handler. (#9603, thanks @MakeNowJust)
    • ๐Ÿ‘‰ Make def_equals compare first by reference. (#9650, thanks @waj)
    • โœ‚ Remove unnecessary def ==(other) fallbacks. (#9571, thanks @MakeNowJust)
    • ๐Ÿ›  Fix OptionParser indentation of option descriptions. (#10183, thanks @wonderix)
    • โž• Add #hash to Log::Metadata, Path, SemanticVersion, Socket::Address, URI::Params, and UUID. (#10119, thanks @straight-shoota)
    • โ™ป๏ธ Refactor several case statements with exhaustive case/in. (#9656, thanks @Sija)
    • โœ‚ Remove Kernel mentions in docs. (#9549, thanks @toddsundsted)
    • ๐Ÿ‘Œ Improve docs for Object#dup. (#10053, thanks @straight-shoota)
    • ๐Ÿ›  Fix example codes in multiple places. (#9818, thanks @maiha)
    • ๐Ÿ›  Fix typos, misspelling and styling. (#9636, #9638, #9561, #9786, #9840, #9844, #9854, #9869, #10068, #10123, #10102, #10116, #10229, #10252, thanks @kubo, @m-o-e, @mgomes, @philipp-classen, @dukeraphaelng, @camreeves, @docelic, @ilmanzo, @Sija, @pxeger, @oprypin)

    Macros

    • ๐Ÿ›  Fix documentation for #[]= macro methods. (#10025, thanks @HertzDevil)

    Numeric

    • (breaking-change) Move Complex#exp, Complex#log, etc. to Math.exp, Math.log overloads. (#9739, thanks @cristian-lsdb)
    • ๐ŸŽ (performance) Use unchecked arithmetics in Int#times. (#9511, thanks @waj)
    • Check for overflow when extending signed integers to unsigned integers. (#10000, thanks @HertzDevil)
    • ๐Ÿ›  Fix sprintf for zero left padding a negative number. (#9725, thanks @asterite)
    • ๐Ÿ›  Fix BigInt#to_64 and BigInt#hash. (#10121, thanks @oprypin)
    • ๐Ÿ›  Fix BigDecimal#to_s for numbers between -1 and 0. (#9897, thanks @dukeraphaelng)
    • ๐Ÿ›  Fix Number#step. (#10130, #10295, thanks @straight-shoota, @bcardiff)
    • ๐Ÿ‘‰ Make Complex unary plus returns self. (#9719, thanks @asterite)
    • ๐Ÿ‘Œ Improve Int#lcm and Int#gcd. (#9999, thanks @HertzDevil)
    • โž• Add Math::TAU. (#10179, thanks @j8r)
    • โž• Add wrapped unary negation to unsigned integer types to allow &- x expressions. (#9947, thanks @HertzDevil)
    • ๐Ÿ‘Œ Improve documentation of mathematical functions. (#9994, thanks @HertzDevil)

    Text

    • (breaking-change) Fix String#index not working well for broken UTF-8 sequences. (#9713, thanks @asterite)
    • ๐ŸŽ (performance) String: Don't materialize Regex match[0] if not needed. (#9615, thanks @asterite)
    • ๐Ÿ›  Fix String#rindex default offset for matching empty regex correctly. (#9690, thanks @MakeNowJust)
    • โž• Add various String#delete_at methods. (#9398, thanks @asterite)
    • Raise if passing null Pointer to String. (#9653, thanks @jgaskins)
    • โž• Add Regex#capture_count. (#9746, thanks @Sija)
    • โž• Add Regex::MatchData#[] overloading to Range. (#10076, thanks @MakeNowJust)
    • ๐Ÿ›  Fix duplicates in String documentation. (#9987, thanks @Nicolab)
    • โž• Add docs for substitution to Kernel.sprintf. (#10227, thanks @straight-shoota)

    Collections

    • (breaking-change) Make Hash#reject!, Hash#select!, and Hash#compact! consistent with Array and return self. (#9904, thanks @caspiano)
    • (breaking-change) Deprecate Hash#delete_if in favor of Hash#reject!, add Dequeue#reject! and Dequeue#select!. (#9878, thanks @caspiano)
    • (breaking-change) Change Set#delete to return Bool. (#9590, thanks @j8r)
    • (breaking-change) Drop deprecated Enumerable#grep. (#9711, thanks @j8r)
    • (breaking-change) Remove Hash#key_index . (#10016, thanks @asterite)
    • (breaking-change) Deprecate StaticArray#[]=(value) in favor of StaticArray#fill. (#10027, thanks @HertzDevil)
    • (breaking-change) Rename Set#{sub,super}set? to {sub,super}set_of?. (#10187, thanks @straight-shoota)
    • ๐ŸŽ (performance) Optimize Array#shift and Array#unshift. (#10081, thanks @asterite)
    • ๐ŸŽ (performance) Array#rotate optimization for small arrays. (#8516, thanks @wontruefree)
    • โช Fix Hash#dup and Hash#clone to return correct type for subclasses. (#9871, thanks @vlazar) (Reverted by #10331 in 0.36.1)
    • ๐Ÿ›  Fix Iterator#cons_pair return type. (#9788, thanks @asterite)
    • ๐Ÿ›  Fix key type restriction of Hash#merge block. (#9495, thanks @MakeNowJust)
    • ๐Ÿ›  Fix Range#step. (#10203, thanks @straight-shoota)
    • Let Range#step delegate to begin.step and allow float based ranges to be stepped. (#10209, thanks @straight-shoota)
    • ๐Ÿ›  Fix Indexable#join with IO. (#10152, thanks @straight-shoota)
    • ๐Ÿ›  Fix Flatten for value-type iterators. (#10096, thanks @f-fr)
    • Fix Indexable.range_to_index_and_count to not raise IndexError. (#10191, thanks @straight-shoota)
    • ๐Ÿ‘ฏ Handle recursive structures in def_clone, Hash, Array, Dequeue. (#9800, thanks @asterite)
    • โž• Add BitArray#dup. (#9550, thanks @andremedeiros)
    • ๐Ÿ‘ Allow Iterator#zip to take multiple Iterator arguments. (#9944, thanks @HertzDevil)
    • โž• Add Iterator#with_object(obj, &). (#9956, thanks @HertzDevil)
    • Always clear unused bits of BitArrays. (#10008, thanks @HertzDevil)
    • โšก๏ธ Update Enumerable#sum(initial, &) docs. (#9860, thanks @jage)
    • โž• Add Array#unsafe_build. (#10092, thanks @straight-shoota)
    • โž• Add identity methods for #sum and #product. (#10151, thanks @straight-shoota)
    • ๐Ÿšš Move combinations, permutations, etc., from Array to Indexable. (#10235, thanks @wonderix)
    • ๐Ÿšš Move sampling methods to Enumerable. (#10129, thanks @HertzDevil)
    • ๐Ÿ“š Use Set#add in Set#add documentation. (#9441, thanks @hugopl)
    • ๐Ÿ‘Œ Improve Hash#values_at docs. (#9955, thanks @j8r)

    Serialization

    • (breaking-change) Drop deprecated JSON.mapping. (#9527, thanks @bcardiff)
    • (breaking-change) Drop deprecated YAML.mapping. (#9526, thanks @bcardiff)
    • ๐Ÿ›  Fix flag enum deserialization from Int64. (#10145, thanks @straight-shoota)
    • โž• Add support for selective JSON and YAML serialization. (#9567, thanks @stakach)
    • YAML: correctly serialize infinity and NaN. (#9780, thanks @asterite)
    • YAML: allow using discriminator in contained types. (#9851, thanks @asterite)
    • Support more literal types in JSON::Serializable.use_json_discriminator macro. (#9222, thanks @voximity)
    • Support more literal types in YAML::Serializable.use_yaml_discriminator macro. (#10149, thanks @straight-shoota)
    • โž• Add JSON serialization to big number types. (#9898, #10054, thanks @dukeraphaelng, @Sija)
    • 0๏ธโƒฃ Handle namespaced defaults in JSON::Serializable and YAML::Serializable. (#9733, thanks @jgaskins)
    • Standardize YAML error location. (#9273, thanks @straight-shoota)
    • โšก๏ธ Update YAML::Field(converter) argument docs. (#9557, thanks @dscottboggs)
    • ๐Ÿ‘‰ Use content instead of value when inspect XML::Attribute. (#9592, thanks @asterite)
    • ๐Ÿ“œ Let JSON::PullParser#on_key yield self and return value. (#10028, thanks @straight-shoota)
    • Cleanup YAML/JSON Any#dig methods. (#9415, thanks @j8r)
    • ๐Ÿ“œ Document JSON::PullParser. (#9983, thanks @erdnaxeli)
    • Clarify Serialization Converter requirements and examples. (#10202, thanks @Daniel-Worrall)

    Time

    • (breaking-change) Drop deprecated Time::Span.new variants. (#10051, thanks @Sija)
    • (breaking-change) Deprecate Time::Span#duration, use Time::Span#abs. (#10144, thanks @straight-shoota)
    • โž• Add %Z time format directive. (#10141, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve handling edge cases for Time::Location#load. (#10140, thanks @straight-shoota)
    • Enable pending specs. (#10093, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve Time::Span arithmetic specs. (#10143, thanks @straight-shoota)

    Files

    • (breaking-change) Make File.size and FileInfo#size be Int64 instead of UInt64. (#10015, thanks @asterite)
    • (breaking-change) Fix FileUtils.cp_r when destination is a directory. (#10180, thanks @wonderix)
    • ๐Ÿง Enable large-file support on i386-linux-gnu. (#9478, thanks @kubo)
    • ๐Ÿ›  Fix glob not following symdir directories. (#9910, thanks @straight-shoota)
    • ๐Ÿ Windows: allow creating symlinks without admin rights. (#9767, thanks @oprypin)
    • ๐Ÿ Windows: allow touching directories. (#10284, thanks @straight-shoota)
    • ๐Ÿ›  Fix Dir.glob when readdir doesn't report file type. (#9877, thanks @straight-shoota)
    • โž• Add Path#stem. (#10037, thanks @straight-shoota)
    • Move File#fsync, File#flock_exclusive, File#flock_shared, and File#flock_unlock methods to IO::FileDescriptor. (#9794, thanks @naqvis)
    • ๐Ÿ— Call IO#flush on builder finish methods. (#9321, thanks @straight-shoota)
    • ๐Ÿ‘Œ Support using Path in MIME and File::Error APIs. (#10034, thanks @Blacksmoke16)
    • ๐Ÿ Windows: enable FileUtils specs. (#9902, thanks @oprypin)

    Networking

    • (breaking-change) Rename HTTP::Params to URI::Params. (#10098, thanks @straight-shoota)
    • (breaking-change) Rename URI#full_path to URI#request_target. (#10099, thanks @straight-shoota)
    • (breaking-change) URI::Params#[]= replaces all values. (#9605, thanks @asterite)
    • ๐Ÿ›  Fix type of HTTP::Server::Response#closed? to Bool. (#9489, thanks @straight-shoota)
    • ๐Ÿ›  Fix Socket#accept to obey read_timeout. (#9538, thanks @waj)
    • ๐Ÿ›  Fix Socket to allow datagram over unix sockets. (#9838, thanks @bcardiff)
    • ๐Ÿ›  Fix HTTP::Headers#== and HTTP::Headers#hash. (#10186, thanks @straight-shoota)
    • ๐Ÿ‘‰ Make HTTP::StaticFileHandler serve pre-gzipped content. (#9626, thanks @waj)
    • โœ‚ Delete Content-Encoding and Content-Length headers after decompression in HTTP::Client::Response. (#5212, thanks @maiha)
    • Delay setup of HTTP::CompressHandler until content is written. (#9625, thanks @waj)
    • ๐Ÿ‘ Allow HTTP::Client to work with any IO. (#9543, thanks @waj)
    • ๐Ÿ‘‰ Make HTTP::Server don't override content-length if already set. (#9726, thanks @asterite)
    • Do not share underlying hash between URI::Params. (#9641, thanks @jgaskins)
    • โž• Add HTTP::Cookie::SameSite::None. (#9262, thanks @j8r)
    • โž• Add HTTP::Client logging and basic instrumentation. (#9756, thanks @bcardiff)
    • โž• Add HTTP::Request#hostname+ utils. (#10029, thanks @straight-shoota)
    • โž• Add URI#authority. (#10100, thanks @straight-shoota)
    • โž• Add Socket::IPAddress#private?. (#9517, thanks @jgillich)
    • ๐Ÿ‘‰ Make Socket::IpAddress a bit more type-friendly. (#9528, thanks @asterite)
    • ๐Ÿ‘‰ Make specs pass in non-IPv6 environments. (#9438, thanks @jhass)
    • ๐Ÿ‘‰ Make specs pending instead of failing in no multi-cast environments. (#9566, thanks @jhass)
    • โœ‚ Remove invalid optimization on Encoding. (#9724, thanks @asterite)
    • โฌ‡๏ธ Drop RemoteAddressType private alias. (#9777, thanks @bcardiff)
    • โž• Add documentation for HTTP::WebSocket. (#9761, #9778, thanks @ibraheemdev, @bcardiff)
    • ๐Ÿ›  Fix HTTP docs. (#9612, #9627, #9717, thanks @RX14, @asterite, @3n-k1)
    • ๐Ÿ›  Fix reference to TCP protocol in docs. (#9457, thanks @dprobinson)

    ๐ŸŒฒ Logging

    • (breaking-change) Drop deprecated Logger. (#9525, thanks @bcardiff)
    • ๐ŸŽ (performance) Add logging dispatcher to defer entry dispatch from current fiber. (#9432, thanks @waj)
    • ๐ŸŒฒ Take timestamp as an argument in Log::Entry initializer. (#9570, thanks @Sija)
    • ๐Ÿ‘Œ Improve docs regarding Log.setup. (#9497, #9559, thanks @caspiano, @jjlorenzo)

    Crypto

    • ๐Ÿ”’ (security) Fix "force-peer" verify_mode setup. (#9668, thanks @PhilAtWysdom)
    • ๐Ÿ”’ (security) Force secure renegotiation on server to prevent Secure Client-Initiated Renegotiation vulnerability attack. (#9815, thanks @bcardiff)
    • (breaking-change) Refactor Digest and introduce Digest::MD5, Digest::SHA1, Digest::SHA256, Digest::SHA512 backed by openssl. (#9864, thanks @bcardiff)
    • ๐Ÿ›  Fix overflows in MD5 and SHA1. (#9781, thanks @bcardiff)
    • Add OpenSSL::SSL::Context#set_modern_ciphers and related methods to set ciphers and cipher suites in a more portable fashion. (#9814, #10298, thanks @bcardiff)
    • โž• Add OpenSSL::SSL::Context#security_level. (#9831, thanks @bcardiff)
    • OpenSSL::digest add require for OpenSSL::Error. (#10173, thanks @wonderix)

    Concurrency

    • (breaking-change) Hide Channel internal implementation methods. (#9564, thanks @j8r)
    • Channel#close returns true unless the channel was already closed. (#9443, thanks @waj)
    • ๐Ÿ‘Œ Support splat expressions inside spawn macro. (#10234, thanks @HertzDevil)
    • โœ‚ Remove incorrect note about negative timeout not triggering. (#10131, thanks @straight-shoota)

    System

    • ๐Ÿ›  Fix Process.find_executable to check the found path is executable and add Windows support. (#9365, thanks @oprypin)
    • Add Process.parse_arguments and fix CRYSTAL_OPTS parsing. (#9518, thanks @MakeNowJust)
    • Port to NetBSD. (#9360, thanks @niacat)
    • โž• Add note about raising IO::Error to Process methods. (#9894, thanks @straight-shoota)
    • Handle errors in User/Group from_name?/from_id? as not found. (#10182, thanks @wonderix)
    • define the SC_PAGESIZE constant on more platforms. (#9821, thanks @carlhoerberg)

    โš™ Runtime

    • ๐Ÿ›  Fix bug with passing many args then a struct in Win64 C lib ABI. (#9520, thanks @oprypin)
    • ๐Ÿ›  Fix C ABI for AArch64. (#9430, thanks @jhass)
    • Disable LLVM Global Isel. (#9401, #9562, thanks @jhass, @bcardiff)
    • ๐Ÿ–จ Print original exception after failing to raise it. (#9220, thanks @jhass)
    • ๐Ÿ–จ Use Dwarf information on Exception::CallStack.print_frame and crash stacktraces. (#9792, #9852, thanks @bcardiff)
    • MachO: Handle missing LC_UUID. (#9706, thanks @bcardiff)
    • ๐Ÿ‘ Allow WeakRef to compile with -Dgc_none. (#9806, thanks @bcardiff)
    • ๐Ÿ›  Fix example in Crystal.main docs. (#9736, thanks @hugopl)
    • โž• Add a C ABI spec for accepting a large struct - failing on Win32, AArch64. (#9534, thanks @oprypin)
    • Don't relativize paths outside of current directory in backtrace. (#10177, thanks @Sija)
    • Avoid loading DWARF if env var CRYSTAL_LOAD_DWARF=0. (#10261, thanks @bcardiff)
    • ๐Ÿ›  Fix DWARF loading in FreeBSD. (#10259, thanks @bcardiff)
    • Print unhandled exceptions from main routine with #inspect_with_backtrace. (#10086, thanks @straight-shoota)

    Spec

    • (breaking-change) Add support for custom failure messages in expectations. (#10127, #10289, thanks @Fryguy, @straight-shoota)
    • ๐Ÿ‘ Allow absolute file paths in crystal spec CLI. (#9951, thanks @KevinSjoberg)
    • ๐Ÿ‘ Allow --link-flags to be used. (#6243, thanks @bcardiff)
    • ๐Ÿ‘Œ Improve duration display in spec --profile. (#10044, thanks @straight-shoota)
    • โž• Add exception handler in spec at_exit. (#10106, thanks @straight-shoota)

    Compiler

    • ๐ŸŽ (performance) Don't use init check for constants that are declared before read. (#9801, thanks @asterite)
    • ๐ŸŽ (performance) Don't use init check for class vars initialized before read. (#9995, thanks @asterite)
    • ๐ŸŽ (performance) Don't use init flag for string constants. (#9808, thanks @asterite)
    • โš™ Run side effects for class var with constant initializer. (#10010, thanks @asterite)
    • ๐Ÿ›  Fix VaList and disable va_arg for AArch64. (#9422, thanks @jhass)
    • ๐Ÿ›  Fix cache corrupted when compilation is cancelled. (#9558, thanks @waj)
    • Consider select as an openning keyword in macros. (#9624, thanks @asterite)
    • ๐Ÿ‘‰ Use function attribute frame-pointer. (#9361, thanks @kubo39)
    • Make missing __crystal_raise_overflow error more clear. (#9686, thanks @3n-k1)
    • Forbid calls with both block arg and block. (#10026, thanks @HertzDevil)
    • โž• Add method name to frozen type error. (#10057, thanks @straight-shoota)
    • ๐Ÿ”’ Use file lock to avoid clashes between compilations. (#10050, thanks @asterite)
    • โž• Add a couple of missing end locations to some nodes. (#10012, thanks @asterite)
    • Don't visit enum member expanded by macro twice. (#10105, thanks @asterite)
    • ๐Ÿ›  Fix crash when matching arguments against splat restriction after positional parameters. (#10172, thanks @HertzDevil)
    • ๐Ÿ›  Fix parsing of do end blocks inside parenthesis. (#10189, #10207, thanks @straight-shoota, @Sija)
    • ๐Ÿ›  Fix regex parsing after then in case/when. (#10274, thanks @asterite)
    • ๐Ÿ›  Fix error message for non-exhaustive case statements of 3 or more Bool/Enum values. (#10194, thanks @HertzDevil)
    • Forbid reopening generic types with different type var splats. (#10167, thanks @HertzDevil)
    • Apply stricter checks to macro names. (#10069, thanks @HertzDevil)
    • Reword error message when including/inheriting generic type without type vars. (#10206, thanks @HertzDevil)
    • ๐Ÿ–จ Print a message pointing to the online playground if compiled without it. (#9622, thanks @deiv)
    • ๐Ÿ– Handle typedef type restriction against alias type correctly. (#9490, thanks @MakeNowJust)
    • ๐ŸŽ‰ Initial support LLVM 11.0 with known issue regarding optimizations #10220. (#9829, #10293, thanks @bcardiff)
    • โž• Add support for --mcpu native. (#10264, #10276, thanks @BlobCodes, @bcardiff)
    • ๐Ÿ›  Fix Process.run uses in compiler to handle exec failure. (#9893, #9911, #9913, thanks @straight-shoota, @bcardiff, @oprypin)
    • ๐Ÿ›  Fix Command#report_warnings to gracefully handle missing Compiler#program. (#9866, thanks @straight-shoota)
    • โž• Add Program#host_compiler. (#9920, thanks @straight-shoota)
    • โž• Add Crystal::Path#name_size implementation. (#9380, thanks @straight-shoota)
    • โ™ป๏ธ Refactor helper methods in call_error.cr. (#9376, thanks @straight-shoota)
    • Delegate def error location to implementing type. (#10159, thanks @straight-shoota)
    • โ™ป๏ธ Refactor Crystal::Exception to Crystal::CodeError. (#10197, thanks @straight-shoota)
    • Refactor check_single_def_error_message. (#10196, thanks @straight-shoota)
    • Code clean-ups. (#9468, thanks @MakeNowJust)
    • โ™ป๏ธ Refactors for compiler specs. (#9379, thanks @straight-shoota)
    • ๐Ÿ Windows CI: Fix and enable compiler specs. (#9348, #9560, thanks @oprypin)

    Language semantics

    • (breaking-change) Handle union restrictions with free vars properly. (#10267, thanks @HertzDevil)
    • (breaking-change) Disallow keywords as block argument name. (#9704, thanks @asterite)
    • (breaking-change) Fix a-b -c incorrectly parsed as a - (b - c). (#9652, #9884, thanks @asterite, @bcardiff)
    • (breaking-change) Check abstract def implementations with splats, default values and keyword arguments. (#9585, thanks @waj)
    • (breaking-change) Make abstract def return type warning an error. (#9810, thanks @bcardiff)
    • (breaking-change) Error when abstract def implementation adds a type restriction. (#9634, thanks @waj)
    • (breaking-change) Don't interpret Proc typedefs as aliases. (#10254, thanks @HertzDevil)
    • (breaking-change) Remove the special logic of union of pointer and nil. (#9872, thanks @asterite)
    • Check abstract def implementations with double splats. (#9633, thanks @waj)
    • ๐Ÿ‘‰ Make inherited hook work through generic instances. (#9701, thanks @asterite)
    • Attach doc comment to annotation in macro expansion. (#9630, thanks @MakeNowJust)
    • Marks else branch of exhaustive case as unreachable, improving resulting type. (#9659, thanks @Sija)
    • ๐Ÿ‘‰ Make Pointer(T)#value= stricter for generic arguments. (#10224, thanks @asterite)
    • Extend type filtering of conditional clauses to arbitrary logical connectives. (#10147, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support NamedTuple instance restrictions in redefinition checks. (#10245, thanks @HertzDevil)
    • Respect block arg restriction when given block has a splat parameter. (#10242, thanks @HertzDevil)
    • ๐Ÿ‘‰ Make overloads without double splat more specialized than overloads with one. (#10185, thanks @HertzDevil)
    • ๐Ÿ‘Œ Support type splats inside explicit Unions in type restrictions. (#10174, thanks @HertzDevil)
    • ๐Ÿ›  Fix splats on generic arguments. (#9859, thanks @asterite)
    • Correctly compute line number after macro escape. (#9858, thanks @asterite)
    • ๐Ÿ›  Fix bug for C structs assigned to a type. (#9743, thanks @matthewmcgarvey)
    • Promote C variadic args as needed. (#9747, thanks @asterite)
    • ๐Ÿ›  Fix parsing of def self./ and def self.%. (#9721, thanks @asterite)
    • ๐Ÿ›  Fix ASTNode#to_s for parenthesized expression in block. (#9629, thanks @MakeNowJust)
    • Don't form a closure on typeof(@ivar). (#9723, thanks @asterite)
    • โž• Add a few missing expanded.transform self. (#9506, thanks @asterite)
    • Treat super as special only if it doesn't have a receiver (i.e.: allow super user defined methods). (#10011, thanks @asterite)
    • ๐Ÿ‘ Implement auto-casting in a better way. (#9501, thanks @asterite)
    • Try literal type first when autocasting to unions types. (#9610, thanks @asterite)
    • Correctly pass named arguments for previous_def and super. (#9834, thanks @asterite)
    • Turn proc pointer into proc literal in some cases to closure needed variables. (#9824, thanks @asterite)
    • ๐Ÿ›  Fix proc of self causing multi-dispatch. (#9972, thanks @asterite)
    • ๐Ÿ›  Fixes and improvements to closured variables. (#9986, thanks @asterite)
    • ๐Ÿ”€ Don't merge proc types but allow assigning them if they are compatible. (#9971, thanks @asterite)
    • Reset nilable vars inside block method. (#10091, thanks @asterite)
    • ๐Ÿ†“ Reset free vars before attempting each overload match. (#10271, thanks @HertzDevil)
    • ๐Ÿ‘ Let offsetof support Tuples. (#10218, thanks @hugopl)

    Tools

    • Fetch git config correctly. (#9640, thanks @dorianmariefr)

    Formatter

    • Avoid adding a newline after comment before end. (#9722, thanks @asterite)
    • Apply string pieces combination even if heredoc has no indent. (#9475, thanks @MakeNowJust)
    • Correctly format named arguments like foo:bar. (#9740, thanks @asterite)
    • ๐Ÿ– Handle comment before do in a separate line. (#9762, thanks @asterite)
    • ๐Ÿ›  Fix indent for the first comment of select when/else. (#10002, thanks @MakeNowJust)
    • โฌ‡๏ธ Reduce redundant newlines at end of begin ... end. (#9741, thanks @MakeNowJust)
    • Let formatter normalize crystal language tag for code blocks in doc comments. (#10156, thanks @straight-shoota)
    • ๐Ÿ›  Fix indentation of trailing comma in call with a block. (#10223, thanks @MakeNowJust)

    Doc generator

    • ๐Ÿ”— Linkification: refactor, fix edge cases and add specs. (#9817, thanks @oprypin)
    • ๐Ÿ“„ Exclude types from docs who are in nodoc namespaces. (#9819, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix link generation for lib type reference. (#9931, thanks @straight-shoota)
    • Correctly render underscores in code blocks. (#9822, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix some HTML in docs generator. (#9918, thanks @straight-shoota)
    • Correctly handle broken source code on syntax highlighting. (#9416, thanks @MakeNowJust)
    • ๐Ÿ“„ Re-introduce canonical URL for docs generator. (#9917, thanks @straight-shoota)
    • ๐Ÿ”ฆ Expose "location" and "args_html" in doc JSON. (#10122, #10200, thanks @oprypin)
    • ๐Ÿ”ฆ Expose "aliased_html" in doc JSON, make "aliased" field nullable. (#10117, thanks @oprypin)
    • ๐Ÿ‘Œ Support linking to section headings in same tab. (#9826, thanks @Blacksmoke16)
    • Do not highlight undef as a keyword, it's not. (#10216, thanks @rhysd)

    Others

    • CI improvements and housekeeping. (#9507, #9513, #9512, #9515, #9514, #9609, #9642, #9758, #9763, #9850, #9906, #9907, #9912, #10078, #10217, #10255, thanks @jhass, @bcardiff, @waj, @oprypin, @j8r, @Sija)
    • โž• Add timeout to individual specs on multi-threading. (#9865, thanks @bcardiff)
    • ๐ŸŽ‰ Initial AArch64 CI. (#9508, #9582, thanks @jhass, @waj)
    • โšก๏ธ Update distribution-scripts and use LLVM 10 on Linux packages. (#9710, thanks @bcardiff)
    • โšก๏ธ Update distribution-scripts and publish nightly packages to bintray. (#9663, thanks @bcardiff)
    • โšก๏ธ Update distribution-scripts to use Shards v0.13.0. (#10280, thanks @bcardiff)
    • ๐ŸŽ‰ Initial Nix development environment. Use Nix for OSX CI instead of homebrew. (#9727, #9776, thanks @bcardiff)
    • Prevent recursive call in bin/crystal wrapper. (#9505, thanks @jhass)
    • ๐Ÿ‘ Allow overriding CRYSTAL_PATH in bin/crystal wrapper . (#9632, thanks @bcardiff)
    • ๐Ÿ‘‰ Makefile: support changing the current crystal via env var and argument. (#9471, thanks @bcardiff)
    • ๐Ÿ‘‰ Makefile: improve supported LLVM versions message. (#10221, #10269, thanks @rdp, @straight-shoota)
    • โšก๏ธ Update CONTRIBUTING.md. (#9448, #10249, #10250, thanks @wontruefree, @sanks64, @straight-shoota)
    • โ™ป๏ธ Refactor RedBlackTree sample to use an enum instead of symbols. (#10233, thanks @Sija)
    • โž• Add security policy. (#9984, thanks @straight-shoota)
    • ๐Ÿ“„ Use name: nightly in docs-versions.sh for HEAD. (#9915, thanks @straight-shoota)
    • ๐Ÿ“„ Use canonical base url for generating docs. (#10007, thanks @straight-shoota)
    • โœ‚ Remove Vagrantfile. (#10033, thanks @straight-shoota)
    • โšก๏ธ Update NOTICE's copyright year to 2021. (#10166, thanks @matiasgarciaisaia)
  • v0.35.1 Changes

    June 19, 2020

    Standard library

    Collections

    • โœ‚ Remove Hash#each type restriction to allow working with splats. (#9456, thanks @bcardiff)

    Networking

    • โช Revert IO#write changes in 0.35.0 and let it return Nil. (#9469, thanks @bcardiff)
    • ๐ŸŒฒ Avoid leaking logging context in HTTP request handlers. (#9494, thanks @Blacksmoke16)

    Crypto

    • ๐Ÿ‘‰ Use less strict cipher compatibility for OpenSSL client context. (#9459, thanks @straight-shoota)
    • ๐Ÿ›  Fix Digest::Base block argument type restrictions. (#9500, thanks @straight-shoota)

    ๐ŸŒฒ Logging

    • ๐Ÿ›  Fix Log.context.set docs for hash based data. (#9470, thanks @bcardiff)

    Compiler

    • โš  Show warnings even if there are errors. (#9461, thanks @asterite)
    • ๐Ÿ›  Fix parsing of {foo: X, typeof: Y} type. (#9453, thanks @MakeNowJust)
    • ๐Ÿ›  Fix parsing of proc in hash of key type. (#9458, thanks @MakeNowJust)
    • ๐Ÿ— Revert debug level information changes in specs to fix 32 bits builds. (#9466, thanks @bcardiff)

    Others

    • CI improvements and housekeeping. (#9455, thanks @bcardiff)
    • Code formatting. (#9482, thanks @MakeNowJust)
  • v0.35.0 Changes

    June 09, 2020

    Language changes

    • (breaking-change) Let case when be non-exhaustive, introduce case in as exhaustive. (#9258, #9045, thanks @asterite)
    • ๐Ÿ‘ Allow ->@ivar.foo and ->@@cvar.foo expressions. (#9268, thanks @MakeNowJust)

    Macros

    • ๐Ÿ‘ Allow executing OpAssign (+=, ||=, etc.) inside macros. (#9409, thanks @asterite)

    Standard library

    • (breaking-change) Refactor to standardize on first argument for methods receiving IO. (#9134, #9289, #9303, #9318, thanks @straight-shoota, @bcardiff, @oprypin)
    • (breaking-change) Cleanup Digest and OpenSSL::Digest. (#8426, thanks @didactic-drunk)
    • ๐Ÿ›  Fix Enum#to_s for private enum. (#9126, thanks @straight-shoota)
    • Refactor Benchmark::IPS::Entry to use UInt64 in bytes_per_op. (#9081, thanks @jhass)
    • โž• Add Experimental annotation and doc label. (#9244, thanks @bcardiff)
    • โž• Add subcommands to OptionParser. (#9009, #9133, thanks @RX14, @Sija)
    • ๐Ÿ‘‰ Make NamedTuple#sorted_keys public. (#9263, thanks @waj)
    • ๐Ÿ›  Fix example codes in multiple places. (#9203, thanks @maiha)

    Macros

    • (breaking-change) Remove top-level assert_responds_to macro. (#9085, thanks @bcardiff)
    • (breaking-change) Drop top-level parallel macro. (#9097, thanks @bcardiff)
    • ๐Ÿ›  Fix lazy property not forwarding annotations. (#9140, thanks @asterite)
    • โž• Add host_flag? macro method, not affected by cross-compilation. (#9049, thanks @oprypin)
    • Add .each and .each_with_index to various macro types. (#9120, thanks @Blacksmoke16)
    • โž• Add StringLiteral#titleize macro method. (#9269, thanks @MakeNowJust)
    • โž• Add TypeNode methods to check what "type" the node is. (#9270, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix support TypeNode.name(generic_args: false) for generic instances. (#9224, thanks @Blacksmoke16)

    Numeric

    • (breaking-change) Add Int#digits, reverse BigInt#digits result. (#9383, thanks @asterite)
    • ๐Ÿ›  Fix overflow checking for operations with mixed sign. (#9403, thanks @waj)
    • โž• Add BigInt#factorial using GMP. (#9132, thanks @peheje)

    Text

    • โž• Add String#titleize. (#9204, thanks @hugopl)
    • โž• Add Regex#matches? and String#matches?. (#8989, thanks @MakeNowJust)
    • โž• Add IO overloads to various String case methods. (#9236, thanks @Blacksmoke16)
    • ๐Ÿ‘Œ Improve docs examples regarding Regex::MatchData. (#9010, thanks @MakeNowJust)
    • ๐Ÿ‘Œ Improve docs on String methods. (#8447, thanks @jan-zajic)

    Collections

    • (breaking-change) Add Enumerable#first with fallback block. (#8999, thanks @MakeNowJust)
    • ๐Ÿ›  Fix Array#delete_at bug with negative start index. (#9399, thanks @asterite)
    • ๐Ÿ›  Fix Enumerable#{zip,zip?} when self is an Iterator. (#9330, thanks @mneumann)
    • ๐Ÿ‘‰ Make Range#each and Range#reverse_each work better with end/begin-less values. (#9325, thanks @asterite)
    • ๐Ÿ‘Œ Improve docs on Hash. (#8887, thanks @rdp)

    Serialization

    • (breaking-change) Deprecate JSON.mapping and YAML.mapping. (#9272, thanks @straight-shoota)
    • (breaking-change) Make INI a module. (#9408, thanks @j8r)
    • ๐Ÿ›  Fix integration between record macro and JSON::Serializable/YAML::Serializable regarding default values. (#9063, thanks @Blacksmoke16)
    • ๐Ÿ›  Fix XML.parse invalid mem access in multi-thread. (#9098, thanks @bcardiff, @asterite)
    • ๐Ÿ›  Fix double string escape in XML::Node#content=. (#9300, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve xpath regarding namespaces. (#9288, thanks @asterite)
    • Escape CDATA end sequences. (#9230, thanks @Blacksmoke16)
    • โž• Add JSON and YAML serialization to Path. (#9156, thanks @straight-shoota)
    • Specify pkg-config name for libyaml. (#9426, thanks @jhass)
    • Specify pkg-config name for libxml2. (#9436, thanks @Blacksmoke16)
    • ๐Ÿ‘‰ Make YAML specs robust against libyaml 0.2.5. (#9427, thanks @jhass)

    Time

    • (breaking-change) Support different number of fraction digits for RFC3339 time format. (#9283, thanks @waj)
    • ๐Ÿ›  Fix parsing AM/PM hours. (#9334, thanks @straight-shoota)
    • ๐Ÿ‘Œ Improve File.utime precision from second to 100-nanosecond on Windows. (#9344, thanks @kubo)

    Files

    • (breaking-change) Move Flate, Gzip, Zip, Zlib to Compress. (#8886, thanks @bcardiff)
    • (breaking-change) Cleanup File & FileUtils. (#9175, thanks @bcardiff)
    • ๐Ÿ›  Fix realpath on macOS 10.15 (Catalina). (#9296, thanks @waj)
    • ๐Ÿ›  Fix File#pos, File#seek and File#truncate over 2G on Windows. (#9015, thanks @kubo)
    • ๐Ÿ›  Fix File.rename to overwrite the destination file on Windows, like elsewhere. (#9038, thanks @oprypin)
    • ๐Ÿ›  Fix File's specs and related exception types on Windows. (#9037, thanks @oprypin)
    • โž• Add support for Path arguments to multiple methods. (#9153, thanks @straight-shoota)
    • โž• Add Path#each_part iterator. (#9138, thanks @straight-shoota)
    • โž• Add Path#relative_to. (#9169, thanks @straight-shoota)
    • โž• Add support for Path pattern to Dir.glob. (#9420, thanks @straight-shoota)
    • ๐Ÿ Implement File#fsync on Windows. (#9257, thanks @kubo)
    • โ™ป๏ธ Refactor Path regarding empty and .. (#9137, thanks @straight-shoota)

    Networking

    • (breaking-change) Make IO#skip, IO#write returns the number of bytes it skipped/written as Int64. (#9233, #9363, thanks @bcardiff)
    • (breaking-change) Improve error handling and logging in HTTP::Server. (#9115, #9034, thanks @waj, @straight-shoota)
    • (breaking-change) Change HTTP::Request#remote_address type to Socket::Address?. (#9210, thanks @waj)
    • ๐Ÿ›  Fix flush methods to always flush underlying IO. (#9320, thanks @straight-shoota)
    • ๐Ÿ›  Fix HTTP::Server sporadic failure in SSL handshake. (#9177, thanks @waj)
    • WebSocket shouldn't reply with same close code. (#9313, thanks @waj)
    • Ignore response body during WebSocket handshake. (#9418, thanks @waj)
    • Treat cookies which expire in this instant as expired. (#9061, thanks @RX14)
    • Set sync or flush_on_newline for standard I/O on Windows. (#9207, thanks @kubo)
    • Prefer HTTP basic authentication in OAuth2 client. (#9127, thanks @crush-157)
    • โฌ†๏ธ Defer request upgrade in HTTP::Server (aka: WebSockets). (#9243, thanks @waj)
    • ๐Ÿ‘Œ Improve URI::Punycode, HTTP::WebSocketHandler, HTTP::Status documentation. (#9068, #9130, #9180, thanks @Blacksmoke16, @dscottboggs, @wontruefree)
    • โœ‚ Remove HTTP::Params::Builder#to_s, use underlying IO directly. (#9319, thanks @straight-shoota)
    • ๐Ÿ›  Fixed some regular failing specs in multi-thread mode. (#9412, thanks @bcardiff)

    Crypto

    • ๐Ÿ”’ (security) Update SSL server secure defaults. (#9026, thanks @straight-shoota)
    • Add LibSSL NO_TLS_V1_3 option. (#9350, thanks @lun-4)

    ๐ŸŒฒ Logging

    • (breaking-change) Rename Log::Severity::Warning to Warn. Drop Verbose. Add Trace and Notice. (#9293, #9107, #9316, thanks @bcardiff, @paulcsmith)
    • (breaking-change) Allow local data on entries via Log::Metadata and redesign Log::Context. (#9118, #9227, #9150, #9157, thanks @bcardiff, @waj)
    • (breaking-change) Split top-level Log::Metadata from Log::Metadata::Value, drop immutability via clone, improve performance. (#9295, thanks @bcardiff)
    • (breaking-change) Rework Log.setup_from_env and defaults. (#9145, #9240, thanks @bcardiff)
    • โž• Add Log.capture spec helper. (#9201, thanks @bcardiff)
    • ๐ŸŒฒ Redesign Log::Formatter. (#9211, thanks @waj)
    • โž• Add to_json for Log::Context. (#9101, thanks @paulcsmith)
    • โž• Add Log::IOBackend#new with formatter named argument. (#9105, #9434, thanks @paulcsmith, @bcardiff)
    • ๐Ÿ‘ Allow nil as context raw values. (#9121, thanks @bcardiff)
    • โž• Add missing Log#with_context. (#9058, thanks @bcardiff)
    • ๐Ÿ›  Fix types referred in documentation. (#9117, thanks @bcardiff)
    • ๐Ÿ‘ Allow override context within logging calls. (#9146, thanks @bcardiff)
    • Check severity before backend. (#9400, thanks @asterite)

    Concurrency

    System

    • (breaking-change) Deprecate Process#kill, use Process#signal. (#9006, thanks @oprypin, @jan-zajic)
    • Process raises IO::Error (or subclasses). (#9340, thanks @waj)
    • โž• Add Process.quote and fix shell usages in the compiler. (#9043, #9369, thanks @oprypin, @bcardiff)
    • ๐Ÿ Implement Process support on Windows. (#9047, #9021, #9122, #9112, #9149, #9310, thanks @oprypin, @RX14, @kubo, @jan-zajic)
    • ๐Ÿ›  Fix compile-time checking of dup3/clock_gettime methods definition. (#9407, thanks @asterite)
    • ๐Ÿ‘‰ Use Int64 as portable Process.pid type. (#9019, thanks @oprypin)

    โš™ Runtime

    • (breaking-change) Deprecate top-level fork. (#9136, thanks @bcardiff)
    • (breaking-change) Move Debug to Crystal namespace. (#9176, thanks @bcardiff)
    • ๐Ÿ›  Fix segfaults when static linking with musl. (#9238, thanks @waj)
    • Allow calling at_exit inside at_exit. (#9388, thanks @asterite)
    • Rework DWARF loading and fix empty backtraces in musl. (#9267, thanks @waj)
    • โž• Add DragonFly(BSD) support. (#9178, thanks @mneumann)
    • โž• Add Crystal::System::Process to split out system-specific implementations. (#9035, thanks @oprypin)
    • ๐Ÿšš Move internal CallStack to Exception::CallStack. (#9076, thanks @bcardiff)
    • Specify pkg-config name for libevent. (#9395, thanks @jhass)

    Spec

    • Reference global Spec in be_a macro. (#9066, thanks @asterite)
    • โž• Add -h short flag to spec runner. (#9164, thanks @straight-shoota)
    • ๐Ÿ›  Fix crystal spec file paths on Windows. (#9234, thanks @oprypin)
    • โ™ป๏ธ Refactor spec hooks. (#9090, thanks @straight-shoota)

    Compiler

    • (breaking-change) Improve compiler single-file run syntax to make it shebang-friendly #!. (#9171, thanks @RX14)
    • (breaking-change) Use Process.quote for crystal env output. (#9428, thanks @MakeNowJust)
    • (breaking-change) Simplify Link annotation handling. (#8972, thanks @RX14)
    • ๐Ÿ›  Fix parsing of foo:"bar" inside call or named tuple. (#9033, thanks @asterite)
    • ๐Ÿ›  Fix parsing of anonymous splat and block arg. (#9113, thanks @MakeNowJust)
    • ๐Ÿ›  Fix parsing of unless inside macro. (#9024, #9167, thanks @MakeNowJust)
    • ๐Ÿ›  Fix parsing of \ (backslash + space) inside regex literal to (space). (#9079, thanks @MakeNowJust)
    • ๐Ÿ›  Fix parsing of ambiguous '+' and '-'. (#9194, thanks @max-codeware)
    • ๐Ÿ›  Fix parsing of capitalized named argument. (#9232, thanks @asterite)
    • ๐Ÿ›  Fix parsing of {[] of Foo, self.foo} expressions. (#9329, thanks @MakeNowJust)
    • ๐Ÿ›  Fix cast fun function pointer to Proc. (#9287, thanks @asterite)
    • ๐Ÿ—„ Make compiler warn on deprecated macros. (#9343, thanks @bcardiff)
    • ๐Ÿ‘ Basic support for Win64 C lib ABI. (#9387, thanks @oprypin)
    • ๐Ÿ Make the compiler able to run on Windows and compile itself. (#9054, #9062, #9095, #9106, #9307, thanks @oprypin, @Sija)
    • โž• Add docs regarding CRYSTAL_OPTS. (#9018, thanks @straight-shoota)
    • โœ‚ Remove Process.run("which") from compiler. (#9141, thanks @straight-shoota)
    • โ™ป๏ธ Refactor type parser. (#9208, thanks @MakeNowJust)
    • โ™ป๏ธ Refactor & clean-up in compiler. (#8781, #9195, thanks @rhysd, @straight-shoota)
    • โ™ป๏ธ Refactor CrystalPath::Error. (#9359, thanks @straight-shoota)
    • โ™ป๏ธ Refactor and improvements on spec_helper. (#9367, #9059, #9393, #9351, #9402, thanks @straight-shoota, @jhass, @oprypin)
    • Split general ABI specs from x86_64-specific ones, run on every platform. (#9384, thanks @oprypin)

    Language semantics

    • ๐Ÿ›  Fix RegexLiteral#to_s output when first character of literal is whitespace. (#9017, thanks @MakeNowJust)
    • ๐Ÿ›  Fix autocasting in multidispatch. (#9004, thanks @asterite)
    • ๐Ÿ›  Fix propagation of annotations into other scopes. (#9125, thanks @asterite)
    • ๐Ÿ›  Fix yield computation inside macro code. (#9324, thanks @asterite)
    • ๐Ÿ›  Fix incorrect type generated with as? when type is a union. (#9417, #9435, thanks @asterite)
    • Don't duplicate instance var in inherited generic type. (#9433, thanks @asterite)
    • Ensure type_vars works for generic modules. (#9161, thanks @toddsundsted)
    • 0๏ธโƒฃ Make autocasting work in default values against unions. (#9366, thanks @asterite)
    • Skip no closure check for non-Crystal procs. (#9248, thanks @jhass)

    Debugger

    • ๐Ÿ‘Œ Improve debugging support. (#8538, thanks @skuznetsov)
    • ๐Ÿšš Move recent additions to DIBuilder to LLVMExt. (#9114, thanks @bcardiff)

    Tools

    Formatter

    • ๐Ÿ›  Fix formatting of regex after some comments. (#9109, thanks @MakeNowJust)
    • ๐Ÿ›  Fix formatting of &.!. (#9391, thanks @MakeNowJust)
    • Avoid crash on heredoc with interpolations. (#9382, thanks @MakeNowJust)
    • โ™ป๏ธ Refactor: code clean-up. (#9231, thanks @MakeNowJust)

    Doc generator

    • ๐Ÿ›  Fix links to methods with String default values. (#9200, thanks @bcardiff)
    • ๐Ÿ›  Fix syntax highlighting of heredoc. (#9396, thanks @MakeNowJust)
    • ๐Ÿ“„ Correctly attach docs before annotations to following types. (#9332, thanks @asterite)
    • ๐Ÿ‘ Allow annotations and :ditto: in macro. (#9341, thanks @bcardiff)
    • โž• Add project name and version to API docs. (#8792, thanks @straight-shoota)
    • โž• Add version selector to API docs. (#9074, #9187, #9250, #9252, #9254, thanks @straight-shoota, @bcardiff)
    • ๐Ÿ‘‰ Show input type path instead of full qualified path on generic. (#9302, thanks @MakeNowJust)
    • โœ‚ Remove README link in API docs. (#9082, thanks @straight-shoota)
    • โœ‚ Remove special handling for version tags in docs generator. (#9083, thanks @straight-shoota)
    • Refactor is_crystal_repo based on project name. (#9070, thanks @straight-shoota)
    • โ™ป๏ธ Refactor Docs::Generator source link generation. (#9119, #9305, thanks @straight-shoota)

    Playground

    • ๐Ÿ‘ Allow building compiler without 'playground', to avoid dependency on sockets. (#9031, thanks @oprypin)
    • โž• Add support to jquery version 3. (#9028, thanks @deiv)

    Others

    • CI improvements and housekeeping. (#9012, #9129, #9242, #9370, thanks @bcardiff)
    • โšก๏ธ Update to Shards 0.11.1. (#9446, thanks @bcardiff)
    • Tidy up Makefile and crystal env output. (#9423, thanks @bcardiff)
    • Always include lib directory in the CRYSTAL_PATH. (#9315, thanks @waj)
    • Use SOURCE_DATE_EPOCH only to determine compiler date. (#9088, thanks @straight-shoota)
    • ๐Ÿ Win CI: Bootstrap Crystal, build things on Windows, publish the binary. (#9123, #9155, #9144, #9346, thanks @oprypin)
    • Regenerate implementation tool sample. (#9003, thanks @nulty)
    • Avoid requiring non std-lib spec spec_helper. (#9294, thanks @bcardiff)
    • ๐Ÿ‘Œ Improve grammar and fix typos. (#9087, #9212, #9368, thanks @MakeNowJust, @j8r)
    • ๐Ÿ“„ Hide internal functions in docs. (#9410, thanks @bcardiff)
    • Advertise full crystal spec command for running a particular spec. (#9103, thanks @paulcsmith)
    • โšก๏ธ Update README. (#9225, #9163, thanks @danimiba, @straight-shoota)
    • ๐Ÿ›  Fix LICENSE and add NOTICE file. (#3903, thanks @MakeNowJust)