Releases
1.6.0
Language
Standard Library
Collection
Refactor and improve NamedTuple
deserialization from JSON and YAML (#12008 , thanks @HertzDevil )
(performance) Optimize BitArray#tally(hash)
(#11909 , thanks @HertzDevil )
Use Slice#unsafe_slice_of
and #to_unsafe_bytes
in the standard library and compiler (#12280 , thanks @HertzDevil )
(performance) Optimize block-less overloads of BitArray#index
and #rindex
(#12087 , thanks @HertzDevil )
Support tuple metaclass indexers with non-literal arguments (#11834 , thanks @HertzDevil )
Add Indexable#index!
overloads with offset
parameter (#12089 , thanks @HertzDevil )
Concurrency
Crypto
Files
(breaking-change) Define #system_echo
and #system_raw
on all systems (#12352 , thanks @HertzDevil )
(breaking-change) Do not expose Crystal::System::FileInfo
through File::Info
(#12385 , thanks @HertzDevil )
Fix IO.pipe
spec on FreeBSD (#12324 , thanks @dmgk )
Fix docs error for File.match?
**
globbing pattern. (#12343 , thanks @zw963 )
Add Dir#info
(#11991 , thanks @didactic-drunk )
Implement IO::FileDescriptor
's console methods on Windows (#12294 , thanks @HertzDevil )
Fix typo: LibC::DT_LINK
-> DT_LNK
(#11954 , thanks @HertzDevil )
Document IO::FileDescriptor#info
(#12384 , thanks @HertzDevil )
(performance) Introduce IO::DEFAULT_BUFFER_SIZE
(#12507 , thanks @straight-shoota )
Add support for IO::FileDescriptor
staying open on finalize (#12367 , thanks @refi64 )
Macros
Networking
Numeric
Add full integer support to sprintf
and String#%
(#10973 , thanks @HertzDevil )
Make Float#to_s
ignore NaN sign bit (#12399 , thanks @HertzDevil )
Make sprintf
and String#%
ignore NaN sign bit (#12400 , thanks @HertzDevil )
Fix Complex#to_s
imaginary component sign for certain values (#12244 , thanks @HertzDevil )
More accurate definition of Complex#sign
(#12242 , thanks @HertzDevil )
Fix overflow for rand(Range(Int, Int))
when signed span is too large (#12545 , thanks @HertzDevil )
(performance) Add #rotate_left
and #rotate_right
for primitive integers (#12307 , thanks @HertzDevil )
(performance) Optimize BigDecimal#div
for inexact divisions (#10803 , thanks @HertzDevil )
Implement the Dragonbox algorithm for Float#to_s
(#10913 , thanks @HertzDevil )
Add U/Int128
to isqrt
spec (#11976 , thanks @BlobCodes )
Runtime
Serialization
Fix YAML serialization class name ambiguity (#12537 , thanks @hugopl )
Allow non-type converter instances in ArrayConverter
and HashValueConverter
(#10638 , thanks @HertzDevil )
Document after_initialize
method for yaml
and json
serializers (#12530 , thanks @analogsalad )
System
Text
Fix String
shift state specs on FreeBSD (#12339 , thanks @dmgk )
Disallow mixing of sequential and named sprintf
parameters (#12402 , thanks @HertzDevil )
Fix Colorize
doc example (#12492 , thanks @zw963 )
(performance) Optimize String#downcase
and String#upcase
for single byte optimizable case (#12389 , thanks @asterite )
(performance) Optimize String#valid_encoding?
(#12145 , thanks @HertzDevil )
Implement String#unicode_normalize
and String#unicode_normalized?
(#11226 , thanks @HertzDevil )
Support parameter numbers in sprintf
(#12448 , thanks @HertzDevil )
Use LibC.malloc
instead of GC.malloc
for LibPCRE allocations (#12456 , thanks @lbguilherme )
Unicode: Update to version 15.0.0 (#12479 , thanks @HertzDevil )
Avoid free call in interpreted mode (#12496 , thanks @straight-shoota )
Compiler
Improve recursive splat expansion detection (#11790 , thanks @asterite )
Compiler: fix #to_s
for empty parameters of lib funs (#12368 , thanks @HertzDevil )
Compiler: transform Proc(*T, Void)
to Proc(*T, Nil)
(#12388 , thanks @asterite )
Compiler: indent begin
Expression
s that are direct node children (#12362 , thanks @HertzDevil )
Compiler: add missing location to node on literal expander for array (#12403 , thanks @asterite )
Compiler: a generic class type can also be reference-like (#12347 , thanks @asterite )
Hoist complex element expressions outside container literals (#12366 , thanks @HertzDevil )
(performance) Compiler: bind to tuple, not array (#12423 , thanks @asterite )
Use Path.new(string)
instead of Path.new([string])
(#12419 , thanks @asterite )
Decouple warning detection from program instances (#12293 , thanks @HertzDevil )
(performance) Compiler: only have freeze_type
in select AST nodes (#12428 , thanks @asterite )
Correctly display codegen when cross-compiling (#12414 , thanks @luislavena )
Compiler: simplify some calls (#12417 , thanks @asterite )
(performance) Compiler: optimizations in merge_if_vars
(#12432 , #12433 , thanks @asterite )
Compiler refactor: extract type_from_dependencies
(#12437 , thanks @asterite )
(performance) Compiler: refactor and slightly optimize merging two types (#12436 , thanks @asterite )
(performance) Compiler optimization: don't create call for hook unless needed (#12452 , thanks @asterite )
(performance) CrystalPath: Cache Dir.current
to avoid thousands of allocations (#12455 , thanks @yxhuvud )
Better call error messages (#12469 , thanks @asterite )
(performance) Compiler optimization: avoid intermediate array when matching call arg types (#12485 , thanks @asterite )
Codegen
Debugger
Interpreter
Interpreter: handle the case of a def's body with no type (#12220 , thanks @asterite )
Interpreter: simplify ivar initialization (#12222 , thanks @asterite )
Interpreter: fix autocasting in multidispatch (#12223 , thanks @asterite )
Interpreter: handle next
inside captured block (#12237 , thanks @asterite )
Interpreter: fix crystal_type_id
for virtual metaclass type (#12246 , thanks @asterite )
Interpreter: handle yield with splat combined with tuple unpacking (#12247 , thanks @asterite )
Interpreter: handle inlined call that returns self for structs (#12259 , thanks @asterite )
Interpreter: implement Int128
/UInt128
intrinsics (#12258 , thanks @asterite )
Interpreter: fix some conversion primitives (#12257 , thanks @asterite )
Interpreter: don't override special vars inside block (#12251 , thanks @asterite )
Interpreter: add missing cast from tuple to other tuple inside union (#12249 , thanks @asterite )
Interpreter: allow declaring local vars during a pry session (#12180 , thanks @asterite )
Interpreter: handle bitreverse intrinsics (#12273 , thanks @asterite )
Interpreter: cache methods with captured block (#12285 , thanks @asterite )
Interpreter: missing downcast from MixedUnionType
to NilableProcType
(#12286 , thanks @asterite )
Interpreter: fix with ... yield
with extra arguments (#12301 , thanks @asterite )
Interpreter: consider nodes without a type as NoReturn
(#12275 , thanks @asterite )
Interpreter: take with ... yield
scope into account for args bytesize (#12317 , thanks @asterite )
Fix loader spec on FreeBSD (#12323 , thanks @dmgk )
Interpreter: inline ivar access for virtual call with a single child (#12321 , thanks @asterite )
Interpreter: fix as?
when there's no resulting type (#12328 , thanks @asterite )
Interpreter: handle missing closured struct self (#12345 , thanks @asterite )
Interpreter: use non_nilable_type
in NilableCast (#12348 , thanks @asterite )
Interpreter: implement mixed union cast with compatible tuple types (#12349 , thanks @asterite )
Interpreter: fix missing upcast_distinct
from A+
to B
(Crystal::VirtualType
to Crystal::NonGenericClassType
) (#12374 , thanks @asterite )
Interpreter: discard tuple and named tuple (#12387 , thanks @asterite )
Interpreter: cast proc call arguments to proc arg types (#12375 , thanks @asterite )
Interpreter: set correct scope for class var initializer (#12441 , thanks @asterite )
Interpreter (repl): use new MainVisitor
each time we need to interpret code (#12512 , thanks @asterite )
Interpreter: allow inspecting block vars without affecting program (#12520 , thanks @asterite )
Interpreter: check upcast in nilable cast (#12533 , thanks @asterite )
Interpreter: implement variable autocast (#12563 , thanks @asterite )
Interpreter: handle missing upcast from GenericClassInstanceMetaclassType
to VirtualMetaclassType
(#12562 , thanks @asterite )
Interpreter: let local vars be seen by macros in repl and pry (#12240 , thanks @asterite )
Interpreter: handle local variable type declaration (#12239 , thanks @asterite )
Support libffi on Windows (#12200 , thanks @HertzDevil )
Add $CRYSTAL_INTERPRETER_LOADER_INFO
to show loaded libraries (#12221 , thanks @straight-shoota )
Interpreter: node override (#12287 , thanks @asterite )
Interpreter: introduce a Prompt
type (#12288 , thanks @asterite )
Interpreter: missing i += 1
(#12381 , thanks @asterite )
Support building the interpreter on Windows (#12397 , thanks @HertzDevil )
Don't exit in interpreter spec and change type from Nil
to NoReturn
in FixMissingTypes
(#12230 , thanks @asterite )
Interpreter: fix multidispatch with captured block (#12236 , thanks @asterite )
Interpreter: don't change compiled mode logic (#12252 , thanks @asterite )
Wait more in HTTP::Server
specs in interpreted mode (#12420 , thanks @asterite )
Parser
Semantic
(breaking-change) Allow Union
restrictions to be ordered before all other restrictions (#12335 , thanks @HertzDevil )
(breaking-change) Use more robust ordering between def overloads (#10711 , thanks @HertzDevil )
Fix: Instance vars should not be allowed on Class
, Tuple
, NamedTuple
, Enum
, Pointer
, Proc
, StaticArray
and Union
. (#12160 , thanks @I3oris )
Compiler and interpreter: fix is_a?
from virtual metaclass to generic metaclass (#12306 , thanks @asterite )
Compiler: fix type descendent for union metaclass (#12308 , thanks @asterite )
Compiler: fix is_a?
from generic class against generic class instance type (#12312 , thanks @asterite )
Fix self
in restrictions when instantiating macro def in subtypes (#10954 , thanks @HertzDevil )
Never resolve free variables as types during overload ordering (#11973 , thanks @HertzDevil )
Use instantiated type as self
when inferring instance variable types (#12466 , thanks @HertzDevil )
Fix restriction comparison between Metaclass
and Path
(#12523 , thanks @HertzDevil )
(performance) Compiler: don't always use Array for node dependencies and observers (#12405 , thanks @asterite )
Compiler: better error message for symbol against enum (#12478 , thanks @asterite )
Tools
Docs-generator
Formatter
Formatter: format comment after select (#12506 , thanks @asterite )
Formatter: try to format macros that don't interpolate content (#12378 , thanks @asterite )
Playground
Playground: Fix pass bound hostname to run sessions (#12356 , thanks @orangeSi )
Don't show stacktrace when playground port is already in use. (#11844 , thanks @hugopl )
Indent playground code using spaces (#12231 , thanks @potomak )
Other
bin/crystal
: Ensure sh
compatibility (#12486 , thanks @HertzDevil )
bumping version 1.6.0-dev (#12263 , thanks @beta-ziliani )
updating CI to 1.5.0 (#12260 , thanks @beta-ziliani )
Add fish shell completion (#12026 , thanks @TunkShif )
Execute compopt
only when it's present (#12248 , thanks @potomak )
Use Makefile.win
and wrapper script on Windows CI (#12344 , thanks @HertzDevil )
[Makefile] Add format target (#11420 , thanks @straight-shoota )
Update contact section of CODE of CONDUCT (#9219 , thanks @paulcsmith )
Update nixpkgs 22.05 and LLVM 11 (#12498 , thanks @straight-shoota )
[Makefile] Use EXPORT_CC
for make crystal
(#11760 , thanks @straight-shoota )
Update distribution-scripts (#12502 , #12555 , thanks @straight-shoota )
Fix and enhance scripts/update-distribution-scripts.sh
(#12503 , thanks @straight-shoota )
[CI] Upgrade GitHub Actions to macos-11 (#12500 , thanks @straight-shoota )
Add icon and metadata to Windows Crystal compiler binary (#12494 , thanks @HertzDevil )
Remove spec/win32_std_spec.cr
and spec/generate_windows_spec.sh
(#12282 , #12549 , thanks @HertzDevil and @straight-shoota )
You canβt perform that action at this time.