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 returnnil
(#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
andMacroId
(#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
toIndexable#cartesian_product
(#10013, thanks @HertzDevil) - Disallow
Slice(T).new(Int)
whereT
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
beSymbol
(#10942, thanks @caspiano) - Fix overflow in
BitArray#[](Int, Int)
for sizes between 33 and 64 (#10809, thanks @HertzDevil) - Fix
Range#step
for non-integerSteppable
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
andIndexable::Mutable
(#10163, #11029, #11254, thanks @makenowjust, thanks @straight-shoota) - Allow
Enumerable(T)#reduce
's return type to differ fromT
(#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](#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 acceptPath
type aspath
argument (#11075, thanks @fishnibble) - Add
FileUtils
method specs withString
andPath
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
andPath#extension
(#11001, thanks @BlobCodes)
Networking
- (breaking-change) Change nonsense return types to
Nil
in HTTP-related methods andLog
(#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
inHTTP::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
andexpires
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 deprecateURI.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 outside1e-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
toFloat32
andFloat64
(#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
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 unknownIO
s (#11011, thanks @HertzDevil) - Don't use
#write_byte
whenever writing ASCII characters to unknownIO
s (#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
andtagged_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)