Crystal Versions Save

The Crystal Programming Language

1.5.1

1 year ago

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)

1.5.0

1 year ago

1.5.0 (2022-07-06)

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)

1.4.1

2 years ago

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)

1.4.0

2 years ago

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)

1.3.2

2 years ago

Standard Library

Text

  • Fix buffer overflow in String#index (#11747, thanks @asterite, @straight-shoota)

1.3.1

2 years ago

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)

1.3.0

2 years ago

1.3.0 (2022-01-06)

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

1.2.2

2 years ago

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)

1.2.1

2 years ago

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)

1.2.0

2 years ago

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](https://github.com/crystal-lang/crystal/pull/11267, #11308, thanks @caspiano, thanks @straight-shoota, thanks @HertzDevil, thanks @beta-ziliani, thanks @caspiano)
  • (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)
  • 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)