All Versions
118
Latest Version
Avg Release Cycle
46 days
Latest Release
534 days ago
Changelog History
Page 1
Changelog History
Page 1
-
v1.6.2 Changes
November 03, 2022Language
- 🛠 Fix
VirtualMetaclassType#implements?
to ignore base type (#12632, thanks @straight-shoota)
Compiler
- Compiler: handle yield expressions without a type (#12679, thanks @asterite)
- 🔨 Partial revert "Compiler: refactor and slightly optimize merging two types (#12436)" (#12709, thanks @caspiano)
Semantic
- Compiler: ignore type filters when accepting cast for
obj
andto
(#12668, thanks @asterite)
Other
- 🔒 (security) CI: Update to OpenSSL 3.0.7 for bundled lib on Windows (#12712, thanks @beta-ziliani)
- 🛠 Fix
-
v1.6.1 Changes
October 21, 2022Compiler
Interpreter
- Interpreter (repl): migrate types even if their size remains the same (#12581, thanks @asterite)
- Unbreak the interpreter on FreeBSD (#12600, thanks @dmgk)
- 🛠 Fix FFI specs on release builds (#12601, thanks @HertzDevil)
- ➕ Adding welcome message to the interpreter (#12511, thanks @beta-ziliani)
Semantic
- Treat single splats with same restriction as equivalent (#12584, thanks @HertzDevil)
Tools
Formatter
- Formatter: escape backslashes in macro literals when subformatting (#12582, thanks @asterite)
Playground
- 🛠 Fix origin validation in playground server for localhost (#12599, thanks @straight-shoota)
Other
- 🛠 Fix doc typos in
Socket::IPAddress
(#12583, thanks @Blacksmoke16) - 🛠 Fix building Wasm32 on Crystal 1.6 (Regression) (#12580, thanks @lbguilherme)
- ⬆️ Bump version to 1.6.1-dev (#12588, thanks @straight-shoota)
- 🏁 Disable failing specs on Windows CI (#12585, thanks @HertzDevil)
- 🏗 Detect
llvm-configXX
while building compiler (#12602, thanks @HertzDevil)
-
v1.6.0 Changes
October 06, 2022Language
- Add 'wasm_import_module' option to the
@[Link]
annotation (#11935, thanks @lbguilherme)
Standard Library
- 👉 Use
GC.malloc_atomic
withGC.realloc
, notPointer#realloc
(#12391, thanks @HertzDevil) - 👌 Improve syntax highlighter (#12409, thanks @I3oris)
- 🏁 Enable miscellaneous parts of the standard library on Windows (#12281, thanks @HertzDevil)
- ✅ Use interpreter to run std spec tests (#12355, thanks @cyangle)
- ✂ Remove most uses of
Symbol
variables in standard library specs (#12462, thanks @HertzDevil) - 👉 Use
@[::Primitive]
and@[::Flags]
where necessary (#11900, thanks @HertzDevil) - Document how to change base type of an enum (#9803, thanks @Blacksmoke16)
- Spec: bump and document timeouts in interpreted mode (#12430, thanks @asterite)
Collection
- 🔨 Refactor and improve
NamedTuple
deserialization from JSON and YAML (#12008, thanks @HertzDevil) - 🐎 (performance) Optimize
BitArray#tally(hash)
(#11909, thanks @HertzDevil) - Use
Slice#unsafe_slice_of
and#to_unsafe_bytes
in the standard library and compiler (#12280, thanks @HertzDevil) - 🐎 (performance) Optimize block-less overloads of
BitArray#index
and#rindex
(#12087, thanks @HertzDevil) - 👌 Support tuple metaclass indexers with non-literal arguments (#11834, thanks @HertzDevil)
- ➕ Add
Indexable#index!
overloads withoffset
parameter (#12089, thanks @HertzDevil)
Concurrency
- 🛠 Fix fiber clean loop on Windows (#12300, thanks @HertzDevil)
- 🏁 Enable
Mutex
on Windows (#12213, thanks @HertzDevil)
Crypto
- ➕ Add support for Bcrypt algorithm version 2y (#12447, thanks @docelic)
- 👍 Allow using
U/Int128
inRandom
(#11977, thanks @BlobCodes)
Files
- (breaking-change) Define
#system_echo
and#system_raw
on all systems (#12352, thanks @HertzDevil) - (breaking-change) Do not expose
Crystal::System::FileInfo
throughFile::Info
(#12385, thanks @HertzDevil) - 🛠 Fix
IO.pipe
spec on FreeBSD (#12324, thanks @dmgk) - 🛠 Fix docs error for
File.match?
**
globbing pattern. (#12343, thanks @zw963) - ➕ Add
Dir#info
(#11991, thanks @didactic-drunk) - 🏁 Implement
IO::FileDescriptor
's console methods on Windows (#12294, thanks @HertzDevil) - 🔗 Fix typo:
LibC::DT_LINK
->DT_LNK
(#11954, thanks @HertzDevil) - Document
IO::FileDescriptor#info
(#12384, thanks @HertzDevil) - 🐎 (performance) Introduce
IO::DEFAULT_BUFFER_SIZE
(#12507, thanks @straight-shoota) - ➕ Add support for
IO::FileDescriptor
staying open on finalize (#12367, thanks @refi64)
Macros
- ✨ Enhance
record
documentation (#12334, thanks @straight-shoota)
Networking
- ➕ Add
Socket::IPAddress.valid?
(#12489, #10492, thanks @straight-shoota) - 🛠 Fix
HTTP::Client#exec
to abort retry when client was closed (#12465, thanks @straight-shoota) - 🛠 Fix specs with side effects (#12539, thanks @straight-shoota)
- 🛠 Fix
HTTP::Client
implicit compression with retry (#12536, thanks @straight-shoota) HTTP::StaticFileHandler
: Reduce max stat calls from 6 to 2 (#12310, thanks @didactic-drunk)- ➕ Add warning about concurrent requests in
HTTP::Client
(#12527, thanks @straight-shoota)
Numeric
- ➕ Add full integer support to
sprintf
andString#%
(#10973, thanks @HertzDevil) - 👉 Make
Float#to_s
ignore NaN sign bit (#12399, thanks @HertzDevil) - 🖨 Make
sprintf
andString#%
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
toisqrt
spec (#11976, thanks @BlobCodes)
⚙ Runtime
- 🛠 Fix: Parse DWARF5 Data16 values (#12497, thanks @stakach)
- 🍎 macOS: Fix call stack when executable path contains symlinks (#12504, thanks @HertzDevil)
- WASM: Add support for
wasi-sdk 16
: don't rely on__original_main
(#12450, thanks @lbguilherme)
Serialization
- 🛠 Fix YAML serialization class name ambiguity (#12537, thanks @hugopl)
- 👍 Allow non-type converter instances in
ArrayConverter
andHashValueConverter
(#10638, thanks @HertzDevil) - 🔊 Document
after_initialize
method foryaml
andjson
serializers (#12530, thanks @analogsalad)
System
- ➕ Add missing fields to
LibC::Passwd
on FreeBSD (#12315, thanks @dmgk) - ➕ Add platform-specific variants of
Process.parse_arguments
(#12278, thanks @HertzDevil) - 👉 Make
Dir.current
respect$PWD
(#12471, thanks @straight-shoota)
Text
- 🛠 Fix
String
shift state specs on FreeBSD (#12339, thanks @dmgk) - 🖨 Disallow mixing of sequential and named
sprintf
parameters (#12402, thanks @HertzDevil) - 🛠 Fix
Colorize
doc example (#12492, thanks @zw963) - 🐎 (performance) Optimize
String#downcase
andString#upcase
for single byte optimizable case (#12389, thanks @asterite) - 🐎 (performance) Optimize
String#valid_encoding?
(#12145, thanks @HertzDevil) - Implement
String#unicode_normalize
andString#unicode_normalized?
(#11226, thanks @HertzDevil) - 👌 Support parameter numbers in
sprintf
(#12448, thanks @HertzDevil) - 👉 Use
LibC.malloc
instead ofGC.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)
toProc(*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 ofPath.new([string])
(#12419, thanks @asterite) - ⚠ Decouple warning detection from program instances (#12293, thanks @HertzDevil)
- 🐎 (performance) Compiler: only have
freeze_type
in select AST nodes (#12428, thanks @asterite) - Correctly display codegen when cross-compiling (#12414, thanks @luislavena)
- Compiler: simplify some calls (#12417, thanks @asterite)
- 🐎 (performance) Compiler: optimizations in
merge_if_vars
(#12432, #12433, thanks @asterite) - Compiler refactor: extract
type_from_dependencies
(#12437, thanks @asterite) - 🐎 (performance) Compiler: refactor and slightly optimize merging two types (#12436, thanks @asterite)
- 🐎 (performance) Compiler optimization: don't create call for hook unless needed (#12452, thanks @asterite)
- 🐎 (performance) CrystalPath: Cache
Dir.current
to avoid thousands of allocations (#12455, thanks @yxhuvud) - 👍 Better call error messages (#12469, thanks @asterite)
- 🐎 (performance) Compiler optimization: avoid intermediate array when matching call arg types (#12485, thanks @asterite)
Codegen
- Codegen: fix how unions are represented to not miss bytes (#12551, thanks @asterite)
- 🛠 Fix alignment typo in compiler comments (#12564, thanks @mdwagner)
- ✂ Remove redundant code from x86_64 abi (#12443, thanks @mattrberry)
- Codegen: use var pointer for
out
instead of an extra variable (#10952, thanks @asterite)
Debugger
- 👍 Basic GDB formatter support (#12209, thanks @HertzDevil)
- ➕ Add Visual Studio formatters for
String
,Array
, andHash
(#12212, thanks @HertzDevil)
Interpreter
- Interpreter: handle the case of a def's body with no type (#12220, thanks @asterite)
- Interpreter: simplify ivar initialization (#12222, thanks @asterite)
- Interpreter: fix autocasting in multidispatch (#12223, thanks @asterite)
- Interpreter: handle
next
inside captured block (#12237, thanks @asterite) - Interpreter: fix
crystal_type_id
for virtual metaclass type (#12246, thanks @asterite) - Interpreter: handle yield with splat combined with tuple unpacking (#12247, thanks @asterite)
- Interpreter: handle inlined call that returns self for structs (#12259, thanks @asterite)
- Interpreter: implement
Int128
/UInt128
intrinsics (#12258, thanks @asterite) - Interpreter: fix some conversion primitives (#12257, thanks @asterite)
- Interpreter: don't override special vars inside block (#12251, thanks @asterite)
- Interpreter: add missing cast from tuple to other tuple inside union (#12249, thanks @asterite)
- Interpreter: allow declaring local vars during a pry session (#12180, thanks @asterite)
- Interpreter: handle bitreverse intrinsics (#12273, thanks @asterite)
- Interpreter: cache methods with captured block (#12285, thanks @asterite)
- Interpreter: missing downcast from
MixedUnionType
toNilableProcType
(#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
fromA+
toB
(Crystal::VirtualType
toCrystal::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
toVirtualMetaclassType
(#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
toNoReturn
inFixMissingTypes
(#12230, thanks @asterite) - Interpreter: fix multidispatch with captured block (#12236, thanks @asterite)
- Interpreter: don't change compiled mode logic (#12252, thanks @asterite)
- Wait more in
HTTP::Server
specs in interpreted mode (#12420, thanks @asterite)
📜 Parser
- Lexer: fix index out of bounds when scanning numbers (#12482, thanks @asterite)
- 🛠 Fix parser to never create doc from trailing comment (#11268, thanks @straight-shoota)
- 📜 Parser: declare local vars of indirect type declarations in call args (#11983, thanks @asterite)
- ✂ Remove redundant conditional (#12196, thanks @potomak)
- Warn on suffix-less integer literals outside
Int64
's range (#12427, thanks @HertzDevil) - 👉 Use enum instead of symbols for keywords in the lexer (#11871, thanks @HertzDevil)
- Parser: Rename
arg*
toparam*
(#12235, thanks @potomak) - 🛠 Fix test cases (#12508, thanks @potomak)
Semantic
- (breaking-change) Allow
Union
restrictions to be ordered before all other restrictions (#12335, thanks @HertzDevil) - (breaking-change) Use more robust ordering between def overloads (#10711, thanks @HertzDevil)
- 🛠 Fix: Instance vars should not be allowed on
Class
,Tuple
,NamedTuple
,Enum
,Pointer
,Proc
,StaticArray
andUnion
. (#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
andPath
(#12523, thanks @HertzDevil) - 🐎 (performance) Compiler: don't always use Array for node dependencies and observers (#12405, thanks @asterite)
- 👍 Compiler: better error message for symbol against enum (#12478, thanks @asterite)
Tools
📄 Docs-generator
- 🛠 Fix docs generator search constants id (#12262, thanks @GeopJr)
Formatter
- Formatter: format comment after select (#12506, thanks @asterite)
- Formatter: try to format macros that don't interpolate content (#12378, thanks @asterite)
Playground
- Playground: Fix pass bound hostname to run sessions (#12356, thanks @orangeSi)
- Don't show stacktrace when playground port is already in use. (#11844, thanks @hugopl)
- Indent playground code using spaces (#12231, thanks @potomak)
Other
bin/crystal
: Ensuresh
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
formake 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
andspec/generate_windows_spec.sh
(#12282, #12549, thanks @HertzDevil and @straight-shoota)
- Add 'wasm_import_module' option to the
-
v1.5.1 Changes
September 07, 2022Standard Library
- 🛠 Fix
Class#nilable?
for recursive unions and root types (#12353, thanks @HertzDevil)
Numeric
- 🛠 Fix
Float#abs
andNumber#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
- 🛠 Fix
-
v1.5.0 Changes
July 06, 2022Language
- (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
forchdir
arg inProcess
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
andNamedTuple.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 forChannel.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?
andDir#delete?
(#11887, thanks @didactic-drunk) - Accept
Path
arguments inCompress::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 isnil
(#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 foraarch64-darwin
(#12037, thanks @carlhoerberg) - 📄 Docs: Add more prominent note about path traversal in
File.tempfile
(#12077, thanks @straight-shoota) - 👌 Support
Enumerable
as argument toFile.join
(#12102, thanks @caspiano)
⚙ Runtime
- Mention
#value
explicitly inPointer
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
String
s 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
toColorize
(#11984, thanks @didactic-drunk) - 🐎 (performance) Use LLVM's new pass manager when possible (#12116, thanks @asterite)
Macros
- Document
Crystal::Macros::Self
andUnderscore
(#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
andlibdl
on GNU systems (#12038, thanks @1player)
📜 Parser
- (breaking-change) Disallow empty parameter and argument names (#11971, thanks @HertzDevil)
- 🆓 Disallow duplicate free variables in defs (#11965, thanks @HertzDevil)
- Disallow duplicate
fun
parameter names (#11967, thanks @HertzDevil) - ✂ Remove redundant check for EOF on
Crystal::Parser
(#12067, thanks @lbguilherme)
Semantic
- Compiler: don't check ivar read forms a closure in
exp.@x
(#12183, thanks @asterite) - Compiler: raise when allocating an abstract virtual type (#12141, thanks @asterite)
- Compiler: don't use
with_scope
if Call has a receiver (#12138, thanks @asterite) - Compiler: fix proc return type restriction for
Proc(...)
(#12129, thanks @asterite) - Compiler: simpler way to compute
Def#raises?
(#12121, thanks @asterite) - ✂ Remove unused
ASTNode#unbind_all
(#12120, thanks @asterite)
Debugger
- 👌 Improve the LLDB spec driver script (#12119, thanks @HertzDevil)
Tools
📄 Docs-generator
- 📄 [Docs] Adjust method sort order to sort all operators first (#12104, thanks @straight-shoota)
Formatter
- 🛠 Fix formatter lib-fun declaration with newlines (#12071, thanks @ftarulla)
- 🛠 Fix formatter alias-def with no-space before equals (#12073, thanks @ftarulla)
- 🛠 Fix formatter for parenthesized arg after space (#11972, thanks @straight-shoota)
Playground
- Playground: fix
modalContenDom
typo (#12188, thanks @HertzDevil) - 🛠 Fix: Unset executable bit from js/css files in playground (#12053, thanks @carlhoerberg)
Other
- 🏗 [CI] Add build compiler step to smoke tests (#11814, thanks @straight-shoota)
- ➕ Add Makefile for Windows (#11773, thanks @HertzDevil)
- ⚡️ [CI] Update distribution-scripts (#12155, thanks @straight-shoota)
- ⚡️ [CI] Add
update-distributions-scripts.sh
(#12156, thanks @straight-shoota) - [CI] Ignore
pax_global_header
on Windows CI (#12173, thanks @HertzDevil) - 🚀 [CI] Invalidate cached libraries on new MSVC release (#12064, thanks @HertzDevil)
- 🛠 Fix spelling (#12040, thanks @jsoref)
- 🚀 Update previous Crystal release - 1.4.1 (#12029, thanks @straight-shoota)
- 📌 [CI] Pin version of ubuntu base image for circleci jobs (#12030, thanks @straight-shoota)
- Samples: avoid
Symbol
variables (#11923, thanks @HertzDevil)
-
v1.4.1 Changes
April 22, 2022Standard Library
Collection
- Avoid compile-time error on empty
NamedTuple
s. (#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)
- Avoid compile-time error on empty
-
v1.4.0 Changes
April 06, 2022Language
- ➕ Add support for
Int128
in codegen and macros (#11576, thanks @BlobCodes) - 👌 Support
ProcPointer
s with global path and top-level method references (#11777, thanks @HertzDevil) - 🛠 Fix documentation for macros
system
andrun
(#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 forHash#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 emptyBytes
(#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 inURI::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
andHTTP::FormData
(#11617, thanks @HertzDevil)
Numeric
- (breaking-change) Fix: Hide
BigDecimal::ZERO
andBigDecimal::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
onJSON::Field
(#11804, thanks @cyangle) - Implement
Iterator.from_json
and#to_json
(#10437, thanks @wonderix)
Specs
- ➕ Add
file
andline
arguments toit_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 toUUID
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
) inTime
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
: Removedecorate_*
methods (#11724, thanks @HertzDevil) - 👉 Use fewer symbols in the compiler source (#11625, thanks @HertzDevil)
- ➕ Add support for
--m*
flags tocrystal spec
andcrystal 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
incrystal 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
inEXPORT_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
orarch-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)
- ➕ Add support for
-
v1.3.2 Changes
January 18, 2022Standard Library
Text
- 🛠 Fix buffer overflow in
String#index
(#11747, thanks @asterite, @straight-shoota)
- 🛠 Fix buffer overflow in
-
v1.3.1 Changes
January 13, 2022Standard 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
ProcLiteral
s withUnion
return type (#11709, thanks @HertzDevil)
Other
- 🛠 Fix typos (#11725, thanks @kianmeng)
-
v1.3.0 Changes
January 06, 2022Compiler
- Refer to
T.class
as "metaclass" in error messages, not "class" (#11378, thanks @HertzDevil) - Create
Reason
enum for exhaustive case in nil-reason check (#11449, thanks @rymiel) - 👌 Improve cache directory behaviour on Windows (#11436, thanks @HertzDevil)
- 🏁 Automatically detect MSVC tools on Windows via
vswhere
(#11496, thanks @HertzDevil) - Clean up .pdb files for temporary executables on MSVC (#11553, thanks @HertzDevil)
- Disable incremental linking on MSVC (#11552, thanks @HertzDevil)
- 👍 Allow multiple
--emit
compiler options to stack (#11556, thanks @HertzDevil) - 🔨 Refactor some type restrictions in the compiler (#11531, thanks @straight-shoota)
- Detect
cl.exe
's path for compiler specs requiring a C compiler (#11560, thanks @HertzDevil) - 0️⃣ Increase default stack size on MSVC to 8 MB (#11569, thanks @HertzDevil)
- Resolve compiler wildcard require (#11562, thanks @straight-shoota)
- Compiler: use enums instead of symbols in various places (#11607, thanks @HertzDevil)
Codegen
- Disable specs for
StaticArray#sort_by
on broken targets (#11359, thanks @straight-shoota) - 🛠 Fix link flag behaviour on Windows MSVC (#11424, thanks @HertzDevil)
- Attach debug locations to splat expansions inside array-like literals (#11655, thanks @HertzDevil)
- 👉 Use full name for private types' class variables during codegen (#11651, thanks @HertzDevil)
- 🛠 Fix codegen when instantiating class methods of typedefs (#11636, thanks @HertzDevil)
- ➕ Add minimal load-time DLL support on Windows, support
dllimport
storage class (#11573, thanks @HertzDevil)
Debugger
- Attach debug locations to auto-generated
initialize
methods (#11313, thanks @HertzDevil) - Fix debug location for
~check_proc_is_not_closure
(#11311, thanks @HertzDevil)
Interpreter
crystal i
, a Crystal interpreter (#11159, thanks @asterite)- Implement FFI bindings (#11475, thanks @straight-shoota)
- ➕ Add
Crystal::Loader
(#11434, #11662, thanks @straight-shoota, @HertzDevil) - Mark
bswap32
instrinsic with interpreter primitive annotation (#11582, thanks @rymiel) - Split interpreter specs into separate files (#11578, thanks @straight-shoota)
- ↪ Workaround for GC issues in interpreter specs (#11634, thanks @straight-shoota)
📜 Parser
- 📜 Parser: allow keyword as named argument inside macros (#10377, thanks @asterite)
- 📜 Parser: add missing end location to
IsA
node (#11351, thanks @FnControlOption) - 🛠 Fix node locations for
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
- 👉 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
withassert_no_errors
in compiler specs whenever possible (#11288, thanks @HertzDevil) - 0️⃣ Make
inject_primitives = false
default for semantic specs (#11297, thanks @HertzDevil) - ➕ Add spec for #8428 (#10073, thanks @docelic)
- ✂ Remove and resolve spurious cast and its associated FIXME (#11455, thanks @rymiel)
- ➕ Add pending spec for recursive abstract struct (#11470, thanks @HertzDevil)
Language
- (breaking-change) Require elements in 1-to-n assignments to match targets exactly (#11145, thanks @HertzDevil)
- (breaking-change) Require right-hand side of one-to-many assignments to be
Indexable
(#11545, thanks @HertzDevil) - 👌 Support splats on left-hand sides of multiple assignment expressions (#10410, thanks @HertzDevil)
- 👉 Make all AST nodes immutable through container-returning methods (#11397, thanks @HertzDevil)
- ➕ Add auto upcast for integer and float values (#11431, #11529, thanks @asterite, @beta-ziliani)
Standard Library
- 🛠 Fix
Process::INITIAL_PWD
for non-existent path (#10525, thanks @straight-shoota) - Resolve some TODOs (#11369, thanks @straight-shoota)
- 🔨 Refactor some target flag uses (#11466, thanks @straight-shoota)
- 👉 Use
Slice(UInt8)#fill
in the standard library (#11468, thanks @HertzDevil) - Update
spec/win32_std_spec.cr
(#11432, #11637, thanks @HertzDevil) - 👉 Use strings instead of symbols in
#finalize
specs (#11619, thanks @HertzDevil) - 🛠 Fix
Enum.parse
to handle case-sensitive member names (#11659, thanks @straight-shoota) - 👌 Improve docs for
Object#not_nil!
(#11661, thanks @straight-shoota)
Collection
- (breaking-change) Always use
start
as parameter in subrange-accepting methods (#11350, thanks @HertzDevil) - (breaking-change) Refactor
Indexable::Mutable#fill
's overloads (#11368, thanks @HertzDevil) - ➕ Add sorting methods to
StaticArray
(#10889, thanks @HertzDevil) - ➕ Add spaceship operator to
StaticArray
(#11364, thanks @henrikac) - 🐎 (performance) Optimize
BitArray#reverse!
(#11363, thanks @HertzDevil) - 🐎 (performance) Grow large arrays more slowly (#11482, thanks @mgomes)
- 🛠 Fix docs for
Indexable::Mutable#map!
(#11349, thanks @HertzDevil) - Add
Slice#unsafe_slice_of
,#to_unsafe_bytes
(#11379, thanks @HertzDevil) - 🐎 (performance) Avoid reallocation in
Enumerable#each_cons
andIterator#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 inCrypto::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
argumentalignInBits
should beUInt64
(#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
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
- 👍 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
toHTTP::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)
returnFloat32
(#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 return0
as is, not asFloat64
(#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 inPath#expand
andFile.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
inUUID
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
andChar#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 returnHash(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)
- Refer to