Language changes
- (breaking-change) Reject annotations on ivars defined in base class. (#9502, thanks @waj)
- (breaking-change) Make
**
be right associative. (#9684, thanks @asterite)
Macros
- (breaking-change) Deprecate
TypeNode#has_attribute?
in favor of#annotation
. (#9950, thanks @HertzDevil) - Support heredoc literal in macro. (#9467, thanks @makenowjust)
- Support
%Q
,%i
,%w
, and%x
literals in macros. (#9811, thanks @toddsundsted) - Allow executing multi-assignments in macros. (#9440, thanks @makenowjust)
Standard library
- (breaking-change) Drop deprecated
CRC32
,Adler32
top-level. (#9530, thanks @bcardiff) - (breaking-change) Drop deprecated
Flate
,Gzip
,Zip
,Zlib
top-level. (#9529, thanks @bcardiff) - (breaking-change) Drop deprecated
with_color
top-level method. (#9531, thanks @bcardiff) - (breaking-change) Make
SemanticVersion
parsing more strict. (#9868, thanks @hugopl) - Respect explicitly provided type vars for
Tuple.new
andNamedTuple.new
. (#10047, thanks @HertzDevil) - Fix
OptionParser
to handle sub-commands with hyphen. (#9465, thanks @erdnaxeli) - Fix
OptionParser
to not call handler if value is given to none value handler. (#9603, thanks @makenowjust) - Make
def_equals
compare first by reference. (#9650, thanks @waj) - Remove unnecessary
def ==(other)
fallbacks. (#9571, thanks @makenowjust) - Fix
OptionParser
indentation of option descriptions. (#10183, thanks @wonderix) - Add
#hash
toLog::Metadata
,Path
,SemanticVersion
,Socket::Address
,URI::Params
, andUUID
. (#10119, thanks @straight-shoota) - Refactor several
case
statements with exhaustivecase
/in
. (#9656, thanks @Sija) - Remove
Kernel
mentions in docs. (#9549, thanks @toddsundsted) - Improve docs for
Object#dup
. (#10053, thanks @straight-shoota) - Fix example codes in multiple places. (#9818, thanks @maiha)
- Fix typos, misspelling and styling. (#9636, #9638, #9561, #9786, #9840, #9844, #9854, #9869, #10068, #10123, #10102, #10116, #10229, #10252, thanks @kubo, @m-o-e, @mgomes, @philipp-classen, @dukeraphaelng, @camreeves, @docelic, @ilmanzo, @Sija, @pxeger, @oprypin)
Macros
- Fix documentation for
#[]=
macro methods. (#10025, thanks @HertzDevil)
Numeric
- (breaking-change) Move
Complex#exp
,Complex#log
, etc. toMath.exp
,Math.log
overloads. (#9739, thanks @cristian-lsdb) - (performance) Use unchecked arithmetics in
Int#times
. (#9511, thanks @waj) - Check for overflow when extending signed integers to unsigned integers. (#10000, thanks @HertzDevil)
- Fix
sprintf
for zero left padding a negative number. (#9725, thanks @asterite) - Fix
BigInt#to_64
andBigInt#hash
. (#10121, thanks @oprypin) - Fix
BigDecimal#to_s
for numbers between-1
and0
. (#9897, thanks @dukeraphaelng) - Fix
Number#step
. (#10130, #10295, thanks @straight-shoota, @bcardiff) - Make
Complex
unary plus returnsself
. (#9719, thanks @asterite) - Improve
Int#lcm
andInt#gcd
. (#9999, thanks @HertzDevil) - Add
Math::TAU
. (#10179, thanks @j8r) - Add wrapped unary negation to unsigned integer types to allow
&- x
expressions. (#9947, thanks @HertzDevil) - Improve documentation of mathematical functions. (#9994, thanks @HertzDevil)
Text
- (breaking-change) Fix
String#index
not working well for broken UTF-8 sequences. (#9713, thanks @asterite) - (performance)
String
: Don't materializeRegex
match[0]
if not needed. (#9615, thanks @asterite) - Fix
String#rindex
default offset for matching empty regex correctly. (#9690, thanks @makenowjust) - Add various
String#delete_at
methods. (#9398, thanks @asterite) - Raise if passing
null
Pointer toString
. (#9653, thanks @jgaskins) - Add
Regex#capture_count
. (#9746, thanks @Sija) - Add
Regex::MatchData#[]
overloading toRange
. (#10076, thanks @makenowjust) - Fix duplicates in
String
documentation. (#9987, thanks @Nicolab) - Add docs for substitution to
Kernel.sprintf
. (#10227, thanks @straight-shoota)
Collections
- (breaking-change) Make
Hash#reject!
,Hash#select!
, andHash#compact!
consistent withArray
and returnself
. (#9904, thanks @caspiano) - (breaking-change) Deprecate
Hash#delete_if
in favor ofHash#reject!
, addDequeue#reject!
andDequeue#select!
. (#9878, thanks @caspiano) - (breaking-change) Change
Set#delete
to return Bool. (#9590, thanks @j8r) - (breaking-change) Drop deprecated
Enumerable#grep
. (#9711, thanks @j8r) - (breaking-change) Remove
Hash#key_index
. (#10016, thanks @asterite) - (breaking-change) Deprecate
StaticArray#[]=(value)
in favor ofStaticArray#fill
. (#10027, thanks @HertzDevil) - (breaking-change) Rename
Set#{sub,super}set?
to{sub,super}set_of?
. (#10187, thanks @straight-shoota) - (performance) Optimize
Array#shift
andArray#unshift
. (#10081, thanks @asterite) - (performance)
Array#rotate
optimization for small arrays. (#8516, thanks @wontruefree) - Fix
Hash#dup
andHash#clone
to return correct type for subclasses. (#9871, thanks @vlazar) - Fix
Iterator#cons_pair
return type. (#9788, thanks @asterite) - Fix key type restriction of
Hash#merge
block. (#9495, thanks @makenowjust) - Fix
Range#step
. (#10203, thanks @straight-shoota) - Let
Range#step
delegate tobegin.step
and allow float based ranges to be stepped. (#10209, thanks @straight-shoota) - Fix
Indexable#join
withIO
. (#10152, thanks @straight-shoota) - Fix
Flatten
for value-type iterators. (#10096, thanks @f-fr) - Fix
Indexable.range_to_index_and_count
to not raiseIndexError
. (#10191, thanks @straight-shoota) - Handle recursive structures in
def_clone
,Hash
,Array
,Dequeue
. (#9800, thanks @asterite) - Add
BitArray#dup
. (#9550, thanks @andremedeiros) - Allow
Iterator#zip
to take multipleIterator
arguments. (#9944, thanks @HertzDevil) - Add
Iterator#with_object(obj, &)
. (#9956, thanks @HertzDevil) - Always clear unused bits of
BitArray
s. (#10008, thanks @HertzDevil) - Update
Enumerable#sum(initial, &)
docs. (#9860, thanks @jage) - Add
Array#unsafe_build
. (#10092, thanks @straight-shoota) - Add identity methods for
#sum
and#product
. (#10151, thanks @straight-shoota) - Move
combinations
,permutations
, etc., fromArray
toIndexable
. (#10235, thanks @wonderix) - Move sampling methods to
Enumerable
. (#10129, thanks @HertzDevil) - Use
Set#add
inSet#add
documentation. (#9441, thanks @hugopl) - Improve
Hash#values_at
docs. (#9955, thanks @j8r)
Serialization
- (breaking-change) Drop deprecated
JSON.mapping
. (#9527, thanks @bcardiff) - (breaking-change) Drop deprecated
YAML.mapping
. (#9526, thanks @bcardiff) - Fix flag enum deserialization from
Int64
. (#10145, thanks @straight-shoota) - Add support for selective JSON and YAML serialization. (#9567, thanks @stakach)
- YAML: correctly serialize
infinity
andNaN
. (#9780, thanks @asterite) - YAML: allow using discriminator in contained types. (#9851, thanks @asterite)
- Support more literal types in
JSON::Serializable.use_json_discriminator
macro. (#9222, thanks @voximity) - Support more literal types in
YAML::Serializable.use_yaml_discriminator
macro. (#10149, thanks @straight-shoota) - Add
JSON
serialization to big number types. (#9898, #10054, thanks @dukeraphaelng, @Sija) - Handle namespaced defaults in
JSON::Serializable
andYAML::Serializable
. (#9733, thanks @jgaskins) - Standardize YAML error location. (#9273, thanks @straight-shoota)
- Update
YAML::Field(converter)
argument docs. (#9557, thanks @dscottboggs) - Use
content
instead ofvalue
when inspectXML::Attribute
. (#9592, thanks @asterite) - Let
JSON::PullParser#on_key
yield self and return value. (#10028, thanks @straight-shoota) - Cleanup
YAML
/JSON
Any#dig
methods. (#9415, thanks @j8r) - Document
JSON::PullParser
. (#9983, thanks @erdnaxeli) - Clarify Serialization Converter requirements and examples. (#10202, thanks @Daniel-Worrall)
Time
- (breaking-change) Drop deprecated
Time::Span.new
variants. (#10051, thanks @Sija) - (breaking-change) Deprecate
Time::Span#duration
, useTime::Span#abs
. (#10144, thanks @straight-shoota) - Add
%Z
time format directive. (#10141, thanks @straight-shoota) - Improve handling edge cases for
Time::Location#load
. (#10140, thanks @straight-shoota) - Enable pending specs. (#10093, thanks @straight-shoota)
- Improve
Time::Span
arithmetic specs. (#10143, thanks @straight-shoota)
Files
- (breaking-change) Make
File.size
andFileInfo#size
beInt64
instead ofUInt64
. (#10015, thanks @asterite) - (breaking-change) Fix
FileUtils.cp_r
when destination is a directory. (#10180, thanks @wonderix) - Enable large-file support on i386-linux-gnu. (#9478, thanks @kubo)
- Fix glob not following symdir directories. (#9910, thanks @straight-shoota)
- Windows: allow creating symlinks without admin rights. (#9767, thanks @oprypin)
- Windows: allow touching directories. (#10284, thanks @straight-shoota)
- Fix
Dir.glob
whenreaddir
doesn't report file type. (#9877, thanks @straight-shoota) - Add
Path#stem
. (#10037, thanks @straight-shoota) - Move
File#fsync
,File#flock_exclusive
,File#flock_shared
, andFile#flock_unlock
methods toIO::FileDescriptor
. (#9794, thanks @naqvis) - Call
IO#flush
on builder finish methods. (#9321, thanks @straight-shoota) - Support using
Path
inMIME
andFile::Error
APIs. (#10034, thanks @Blacksmoke16) - Windows: enable
FileUtils
specs. (#9902, thanks @oprypin)
Networking
- (breaking-change) Rename
HTTP::Params
toURI::Params
. (#10098, thanks @straight-shoota) - (breaking-change) Rename
URI#full_path
toURI#request_target
. (#10099, thanks @straight-shoota) - (breaking-change)
URI::Params#[]=
replaces all values. (#9605, thanks @asterite) - Fix type of
HTTP::Server::Response#closed?
toBool
. (#9489, thanks @straight-shoota) - Fix
Socket#accept
to obeyread_timeout
. (#9538, thanks @waj) - Fix
Socket
to allow datagram over unix sockets. (#9838, thanks @bcardiff) - Fix
HTTP::Headers#==
andHTTP::Headers#hash
. (#10186, thanks @straight-shoota) - Make
HTTP::StaticFileHandler
serve pre-gzipped content. (#9626, thanks @waj) - Delete
Content-Encoding
andContent-Length
headers after decompression inHTTP::Client::Response
. (#5212, thanks @maiha) - Delay setup of
HTTP::CompressHandler
until content is written. (#9625, thanks @waj) - Allow
HTTP::Client
to work with any IO. (#9543, thanks @waj) - Make
HTTP::Server
don't overridecontent-length
if already set. (#9726, thanks @asterite) - Do not share underlying hash between
URI::Param
s. (#9641, thanks @jgaskins) - Add
HTTP::Cookie::SameSite::None
. (#9262, thanks @j8r) - Add
HTTP::Client
logging and basic instrumentation. (#9756, thanks @bcardiff) - Add
HTTP::Request#hostname
+ utils. (#10029, thanks @straight-shoota) - Add
URI#authority
. (#10100, thanks @straight-shoota) - Add
Socket::IPAddress#private?
. (#9517, thanks @jgillich) - Make
Socket::IpAddress
a bit more type-friendly. (#9528, thanks @asterite) - Make specs pass in non-IPv6 environments. (#9438, thanks @jhass)
- Make specs pending instead of failing in no multi-cast environments. (#9566, thanks @jhass)
- Remove invalid optimization on
Encoding
. (#9724, thanks @asterite) - Drop
RemoteAddressType
private alias. (#9777, thanks @bcardiff) - Add documentation for
HTTP::WebSocket
. (#9761, #9778, thanks @ibraheemdev, @bcardiff) - Fix
HTTP
docs. (#9612, #9627, #9717, thanks @RX14, @asterite, @3n-k1) - Fix reference to TCP protocol in docs. (#9457, thanks @dprobinson)
Logging
- (breaking-change) Drop deprecated
Logger
. (#9525, thanks @bcardiff) - (performance) Add logging dispatcher to defer entry dispatch from current fiber. (#9432, thanks @waj)
- Take timestamp as an argument in
Log::Entry
initializer. (#9570, thanks @Sija) - Improve docs regarding
Log.setup
. (#9497, #9559, thanks @caspiano, @jjlorenzo)
Crypto
- (security) Fix
"force-peer"
verify_mode
setup. (#9668, thanks @PhilAtWysdom) - (security) Force secure renegotiation on server to prevent Secure Client-Initiated Renegotiation vulnerability attack. (#9815, thanks @bcardiff)
- (breaking-change) Refactor
Digest
and introduceDigest::MD5
,Digest::SHA1
,Digest::SHA256
,Digest::SHA512
backed by openssl. (#9864, thanks @bcardiff) - Fix overflows in MD5 and SHA1. (#9781, thanks @bcardiff)
- Add
OpenSSL::SSL::Context#set_modern_ciphers
and related methods to set ciphers and cipher suites in a more portable fashion. (#9814, #10298, thanks @bcardiff) - Add
OpenSSL::SSL::Context#security_level
. (#9831, thanks @bcardiff) OpenSSL::digest
add require forOpenSSL::Error
. (#10173, thanks @wonderix)
Concurrency
- (breaking-change) Hide Channel internal implementation methods. (#9564, thanks @j8r)
Channel#close
returnstrue
unless the channel was already closed. (#9443, thanks @waj)- Support splat expressions inside
spawn
macro. (#10234, thanks @HertzDevil) - Remove incorrect note about negative timeout not triggering. (#10131, thanks @straight-shoota)
System
- Fix
Process.find_executable
to check the found path is executable and add Windows support. (#9365, thanks @oprypin) - Add
Process.parse_arguments
and fixCRYSTAL_OPTS
parsing. (#9518, thanks @makenowjust) - Port to NetBSD. (#9360, thanks @Niacat)
- Add note about raising
IO::Error
toProcess
methods. (#9894, thanks @straight-shoota) - Handle errors in
User
/Group
from_name?
/from_id?
as not found. (#10182, thanks @wonderix) - define the
SC_PAGESIZE
constant on more platforms. (#9821, thanks @carlhoerberg)
Runtime
- Fix bug with passing many args then a struct in Win64 C lib ABI. (#9520, thanks @oprypin)
- Fix C ABI for AArch64. (#9430, thanks @jhass)
- Disable LLVM Global Isel. (#9401, #9562, thanks @jhass, @bcardiff)
- Print original exception after failing to raise it. (#9220, thanks @jhass)
- Use Dwarf information on
Exception::CallStack.print_frame
and crash stacktraces. (#9792, #9852, thanks @bcardiff) MachO
: Handle missingLC_UUID
. (#9706, thanks @bcardiff)- Allow
WeakRef
to compile with-Dgc_none
. (#9806, thanks @bcardiff) - Fix example in
Crystal.main
docs. (#9736, thanks @hugopl) - Add a C ABI spec for accepting a large struct - failing on Win32, AArch64. (#9534, thanks @oprypin)
- Don't relativize paths outside of current directory in backtrace. (#10177, thanks @Sija)
- Avoid loading DWARF if env var
CRYSTAL_LOAD_DWARF=0
. (#10261, thanks @bcardiff) - Fix DWARF loading in FreeBSD. (#10259, thanks @bcardiff)
- Print unhandled exceptions from main routine with
#inspect_with_backtrace
. (#10086, thanks @straight-shoota)
Spec
- (breaking-change) Add support for custom failure messages in expectations. (#10127, #10289, thanks @Fryguy, @straight-shoota)
- Allow absolute file paths in
crystal spec
CLI. (#9951, thanks @kevinsjoberg) - Allow
--link-flags
to be used. (#6243, thanks @bcardiff) - Improve duration display in
spec --profile
. (#10044, thanks @straight-shoota) - Add exception handler in spec
at_exit
. (#10106, thanks @straight-shoota)
Compiler
- (performance) Don't use init check for constants that are declared before read. (#9801, thanks @asterite)
- (performance) Don't use init check for class vars initialized before read. (#9995, thanks @asterite)
- (performance) Don't use init flag for string constants. (#9808, thanks @asterite)
- Run side effects for class var with constant initializer. (#10010, thanks @asterite)
- Fix
VaList
and disableva_arg
for AArch64. (#9422, thanks @jhass) - Fix cache corrupted when compilation is cancelled. (#9558, thanks @waj)
- Consider
select
as an openning keyword in macros. (#9624, thanks @asterite) - Use function attribute
frame-pointer
. (#9361, thanks @kubo39) - Make missing
__crystal_raise_overflow
error more clear. (#9686, thanks @3n-k1) - Forbid calls with both block arg and block. (#10026, thanks @HertzDevil)
- Add method name to frozen type error. (#10057, thanks @straight-shoota)
- Use file lock to avoid clashes between compilations. (#10050, thanks @asterite)
- Add a couple of missing end locations to some nodes. (#10012, thanks @asterite)
- Don't visit enum member expanded by macro twice. (#10105, thanks @asterite)
- Fix crash when matching arguments against splat restriction after positional parameters. (#10172, thanks @HertzDevil)
- Fix parsing of
do end
blocks inside parenthesis. (#10189, #10207, thanks @straight-shoota, @Sija) - Fix regex parsing after then in
case/when
. (#10274, thanks @asterite) - Fix error message for non-exhaustive case statements of 3 or more
Bool
/Enum
values. (#10194, thanks @HertzDevil) - Forbid reopening generic types with different type var splats. (#10167, thanks @HertzDevil)
- Apply stricter checks to macro names. (#10069, thanks @HertzDevil)
- Reword error message when including/inheriting generic type without type vars. (#10206, thanks @HertzDevil)
- Print a message pointing to the online playground if compiled without it. (#9622, thanks @deiv)
- Handle typedef type restriction against alias type correctly. (#9490, thanks @makenowjust)
- Initial support LLVM 11.0 with known issue regarding optimizations #10220. (#9829, #10293, thanks @bcardiff)
- Add support for
--mcpu native
. (#10264, #10276, thanks @BlobCodes, @bcardiff) - Fix
Process.run
uses in compiler to handle exec failure. (#9893, #9911, #9913, thanks @straight-shoota, @bcardiff, @oprypin) - Fix
Command#report_warnings
to gracefully handle missingCompiler#program
. (#9866, thanks @straight-shoota) - Add
Program#host_compiler
. (#9920, thanks @straight-shoota) - Add
Crystal::Path#name_size
implementation. (#9380, thanks @straight-shoota) - Refactor helper methods in
call_error.cr
. (#9376, thanks @straight-shoota) - Delegate def error location to implementing type. (#10159, thanks @straight-shoota)
- Refactor
Crystal::Exception
toCrystal::CodeError
. (#10197, thanks @straight-shoota) - Refactor
check_single_def_error_message
. (#10196, thanks @straight-shoota) - Code clean-ups. (#9468, thanks @makenowjust)
- Refactors for compiler specs. (#9379, thanks @straight-shoota)
- Windows CI: Fix and enable compiler specs. (#9348, #9560, thanks @oprypin)
Language semantics
- (breaking-change) Handle union restrictions with free vars properly. (#10267, thanks @HertzDevil)
- (breaking-change) Disallow keywords as block argument name. (#9704, thanks @asterite)
- (breaking-change) Fix
a-b -c
incorrectly parsed asa - (b - c)
. (#9652, #9884, thanks @asterite, @bcardiff) - (breaking-change) Check abstract def implementations with splats, default values and keyword arguments. (#9585, thanks @waj)
- (breaking-change) Make abstract def return type warning an error. (#9810, thanks @bcardiff)
- (breaking-change) Error when abstract def implementation adds a type restriction. (#9634, thanks @waj)
- (breaking-change) Don't interpret Proc typedefs as aliases. (#10254, thanks @HertzDevil)
- (breaking-change) Remove the special logic of union of pointer and
nil
. (#9872, thanks @asterite) - Check abstract def implementations with double splats. (#9633, thanks @waj)
- Make inherited hook work through generic instances. (#9701, thanks @asterite)
- Attach doc comment to annotation in macro expansion. (#9630, thanks @makenowjust)
- Marks else branch of exhaustive case as unreachable, improving resulting type. (#9659, thanks @Sija)
- Make
Pointer(T)#value=
stricter for generic arguments. (#10224, thanks @asterite) - Extend type filtering of conditional clauses to arbitrary logical connectives. (#10147, thanks @HertzDevil)
- Support NamedTuple instance restrictions in redefinition checks. (#10245, thanks @HertzDevil)
- Respect block arg restriction when given block has a splat parameter. (#10242, thanks @HertzDevil)
- Make overloads without double splat more specialized than overloads with one. (#10185, thanks @HertzDevil)
- Support type splats inside explicit Unions in type restrictions. (#10174, thanks @HertzDevil)
- Fix splats on generic arguments. (#9859, thanks @asterite)
- Correctly compute line number after macro escape. (#9858, thanks @asterite)
- Fix bug for C structs assigned to a type. (#9743, thanks @matthewmcgarvey)
- Promote C variadic args as needed. (#9747, thanks @asterite)
- Fix parsing of
def self./
anddef self.%
. (#9721, thanks @asterite) - Fix
ASTNode#to_s
for parenthesized expression in block. (#9629, thanks @makenowjust) - Don't form a closure on
typeof(@ivar)
. (#9723, thanks @asterite) - Add a few missing
expanded.transform self
. (#9506, thanks @asterite) - Treat
super
as special only if it doesn't have a receiver (i.e.: allowsuper
user defined methods). (#10011, thanks @asterite) - Implement auto-casting in a better way. (#9501, thanks @asterite)
- Try literal type first when autocasting to unions types. (#9610, thanks @asterite)
- Correctly pass named arguments for
previous_def
andsuper
. (#9834, thanks @asterite) - Turn proc pointer into proc literal in some cases to closure needed variables. (#9824, thanks @asterite)
- Fix proc of self causing multi-dispatch. (#9972, thanks @asterite)
- Fixes and improvements to closured variables. (#9986, thanks @asterite)
- Don't merge proc types but allow assigning them if they are compatible. (#9971, thanks @asterite)
- Reset nilable vars inside block method. (#10091, thanks @asterite)
- Reset free vars before attempting each overload match. (#10271, thanks @HertzDevil)
- Let
offsetof
supportTuples
. (#10218, thanks @hugopl)
Tools
- Fetch git config correctly. (#9640, thanks @dorianmariefr)
Formatter
- Avoid adding a newline after comment before end. (#9722, thanks @asterite)
- Apply string pieces combination even if heredoc has no indent. (#9475, thanks @makenowjust)
- Correctly format named arguments like
foo:bar
. (#9740, thanks @asterite) - Handle comment before do in a separate line. (#9762, thanks @asterite)
- Fix indent for the first comment of
select when
/else
. (#10002, thanks @makenowjust) - Reduce redundant newlines at end of
begin ... end
. (#9741, thanks @makenowjust) - Let formatter normalize crystal language tag for code blocks in doc comments. (#10156, thanks @straight-shoota)
- Fix indentation of trailing comma in call with a block. (#10223, thanks @makenowjust)
Doc generator
- Linkification: refactor, fix edge cases and add specs. (#9817, thanks @oprypin)
- Exclude types from docs who are in nodoc namespaces. (#9819, thanks @Blacksmoke16)
- Fix link generation for lib type reference. (#9931, thanks @straight-shoota)
- Correctly render underscores in code blocks. (#9822, thanks @Blacksmoke16)
- Fix some HTML in docs generator. (#9918, thanks @straight-shoota)
- Correctly handle broken source code on syntax highlighting. (#9416, thanks @makenowjust)
- Re-introduce canonical URL for docs generator. (#9917, thanks @straight-shoota)
- Expose
"location"
and"args_html"
in doc JSON. (#10122, #10200, thanks @oprypin) - Expose
"aliased_html"
in doc JSON, make"aliased"
field nullable. (#10117, thanks @oprypin) - Support linking to section headings in same tab. (#9826, thanks @Blacksmoke16)
- Do not highlight
undef
as a keyword, it's not. (#10216, thanks @rhysd)
Others
- CI improvements and housekeeping. (#9507, #9513, #9512, #9515, #9514, #9609, #9642, #9758, #9763, #9850, #9906, #9907, #9912, #10078, #10217, #10255, thanks @jhass, @bcardiff, @waj, @oprypin, @j8r, @Sija)
- Add timeout to individual specs on multi-threading. (#9865, thanks @bcardiff)
- Initial AArch64 CI. (#9508, #9582, thanks @jhass, @waj)
- Update distribution-scripts and use LLVM 10 on Linux packages. (#9710, thanks @bcardiff)
- Update distribution-scripts and publish nightly packages to bintray. (#9663, thanks @bcardiff)
- Update distribution-scripts to use Shards v0.13.0. (#10280, thanks @bcardiff)
- Initial Nix development environment. Use Nix for OSX CI instead of homebrew. (#9727, #9776, thanks @bcardiff)
- Prevent recursive call in
bin/crystal
wrapper. (#9505, thanks @jhass) - Allow overriding
CRYSTAL_PATH
inbin/crystal
wrapper . (#9632, thanks @bcardiff) - Makefile: support changing the current crystal via env var and argument. (#9471, thanks @bcardiff)
- Makefile: improve supported LLVM versions message. (#10221, #10269, thanks @rdp, @straight-shoota)
- Update CONTRIBUTING.md. (#9448, #10249, #10250, thanks @wontruefree, @sanks64, @straight-shoota)
- Refactor
RedBlackTree
sample to use an enum instead of symbols. (#10233, thanks @Sija) - Add security policy. (#9984, thanks @straight-shoota)
- Use
name: nightly
in docs-versions.sh for HEAD. (#9915, thanks @straight-shoota) - Use canonical base url for generating docs. (#10007, thanks @straight-shoota)
- Remove Vagrantfile. (#10033, thanks @straight-shoota)
- Update NOTICE's copyright year to 2021. (#10166, thanks @matiasgarciaisaia)