Releases
1.3.0
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
Interpreter
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 ProcLiteral
s 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
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
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
Files
LLVM
Fix LLVMExtDIBuilderCreateArrayType
argument alignInBits
should be UInt64
(#11644 , thanks @lbguilherme )
Log
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 ProcLiteral
s (#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
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
Serialization
Specs
System
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
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 )
You can’t perform that action at this time.