The Crystal Programming Language
Iterator::ChainIterator
(#13412, thanks @straight-shoota)Log::Metadata#dup
crash with 2+ entries (#13369, thanks @HertzDevil)JSON::Serializable
on certain recursively defined types (#13430, thanks @kostya)String#scan
with empty Regex
match at multibyte char (#13387, thanks @HertzDevil)String#gsub
, #scan
, #split
(#13406, thanks @HertzDevil)StaticArray
's @buffer
(#13319, thanks @HertzDevil)TupleLiteral
(#12927, thanks @straight-shoota)Path
s as type names for lib
(#12903, thanks @HertzDevil)SyntaxHighlighter::HTML
to escape identifier values (#13212, thanks @straight-shoota)Value#not_nil!
copying the receiver (#13264, thanks @HertzDevil)Pointer#copy_to
overflow on unsigned size and different target type (#13269, thanks @HertzDevil)compile_file
spec helper (#13228, thanks @straight-shoota)Process::Status
and OAuth::RequestToken
(#13014, thanks @HertzDevil)Enum#includes?
to require all bits set (#13229, thanks @straight-shoota)Enum.flags
(#12900, thanks @straight-shoota)Range#size
, #each
, #sample
(#13278, thanks @straight-shoota)Indexable
s to be stable (#13061, thanks @HertzDevil)Enum.[]
convenience constructor (#12900, thanks @straight-shoota)Iterator::Slice
type to not conflict with ::Slice
(#12983, thanks @Blacksmoke16)Array#replace
on shifted arrays (#13256, thanks @HertzDevil)Tuple#to_static_array
(#12930, thanks @straight-shoota)Enum#inspect
(#13004, thanks @straight-shoota)Slice#+(Slice)
and Slice.join
(#12081, thanks @HertzDevil)Enumerable#min(count)
and #max(count)
(#13057, thanks @nthiad)Array(T)#[]=(Int, Int, Array(T))
on shifted arrays (#13275, thanks @HertzDevil)Array
in Channel.select_impl
(#12827, #12962, thanks @straight-shoota)Array
allocation in Channel.select(Tuple)
(#12960, thanks @straight-shoota)Termios
(#12940, thanks @HertzDevil)File.delete
remove symlink directories, not Dir.delete
(#13224, thanks @HertzDevil)fileapi
for opening files on windows (#13178, thanks @Blacksmoke16)File.open
fails (#13235, thanks @HertzDevil)File.symlink
on Windows (#13141, thanks @HertzDevil)File.readlink
on Windows (#13195, thanks @HertzDevil)find-llvm-config
is unsuccessful (#13045, thanks @straight-shoota)LibLLVM.has_constant?(:AttributeRef)
checks (#13162, thanks @HertzDevil)LLVM::Attribute#each_kind
to use Enum#each
(#13234, thanks @straight-shoota)Socket::IPAddress#link_local?
(#13204, thanks @GeopJr)back\slash.txt
in HTTP::StaticFileHandler
specs (#12984, thanks @HertzDevil)MIME::Multipart.parse(HTTP::Client::Response, &)
(#12890, thanks @straight-shoota)LibC.ntohs
and htons
with native code (#13027, thanks @HertzDevil)OAuth2::Client#make_token_request
returning HTTP response (#12921, thanks @cyangle)HTTP::WebSocket#run
(#13097, thanks @j8r)HTTP::StaticFileHandler
's gzip check (#13138, thanks @HertzDevil)Range
requests in HTTP::StaticFileHandler
(#12886, thanks @jgaskins, @straight-shoota)hostname
command fails (#12987, thanks @Blacksmoke16)Socket#tty?
to false
on Windows (#13175, thanks @Blacksmoke16)HTTP::Server::Response#reset
for status_message
(#13282, thanks @straight-shoota)Math.pw2ceil
for all integer types (#13127, thanks @HertzDevil)Int128
-and-float methods on Windows with LLVM 14+ (#13218, thanks @HertzDevil)Int128
-and-float conversion overflow checks on Windows LLVM 14+ (#13222, thanks @HertzDevil)Char.to_i128
and .to_u128
(#12958, thanks @meatball133)Number
collection convenience constructors (#13020, thanks @straight-shoota)#byte_swap
with different int types (#13154, #13180, thanks @pan, @Blacksmoke16)BigRational.new(BigFloat)
exact (#13295, thanks @HertzDevil)Crystal::System.print_error
instead of LibC.printf
(#13161, thanks @HertzDevil)Fiber
s (#13220, thanks @HertzDevil)Crystal::ThreadLocalValue
(#13092, thanks @Sija)XPathContext
(#13038, thanks @straight-shoota)use_*_discriminator
for recursive Serializable::Strict
types (#13238, thanks @HertzDevil)YAML::Any#[]
and #[]?
(#11646, thanks @straight-shoota)from_json
for 128-bit integers (#13041, thanks @straight-shoota)--color
option to spec runner (#12932, thanks @straight-shoota)Spec::Item#all_tags
(#12915, thanks @compumike)Process.fork
(#12934, thanks @straight-shoota)Process
spec to wait on started processes (#12941, thanks @straight-shoota)from_winerror
overload for flock_*
(#13039, thanks @HertzDevil)Process.on_interrupt
(#13034, thanks @HertzDevil)Process::Status#to_s
and #inspect
(#13044, thanks @straight-shoota)graceful
parameter to Process#terminate
(#13070, thanks @HertzDevil)Process::ExitReason
and Process::Status#exit_reason
(#13052, thanks @HertzDevil)File.tempfile
in Crystal (#12111, thanks @straight-shoota)System::User#name
: Fall back to #username
if unavailable (#13137, thanks @HertzDevil)Process.ppid
on Windows (#13140, thanks @HertzDevil)Regex::Options
(#13223, thanks @straight-shoota)Regex::MatchOptions
(#13248, thanks @straight-shoota)Path#drive
with IPv6 UNC host names (#13190, thanks @HertzDevil)Regex::PCRE2#finalize
redefinition (#13309, thanks @HertzDevil)Regex
's summary (#13318, thanks @HertzDevil)crystal spec
with multiple files (#12929, thanks @HertzDevil)llvm_ext.cc
(#13177, thanks @HertzDevil)value_to_bool
for module, generic module and generic module metaclass (#12920, thanks @asterite)-L
directories before default ones (#13069, thanks @HertzDevil)value_to_bool
for NoReturn
(#13290, thanks @straight-shoota)x @y
and x @@y
in def parameters when y
is reserved (#12922, thanks @HertzDevil)LiteralExpander
select
(#12926, thanks @straight-shoota)SemanticVisitor
tighter rescue
scope in Require
visitor (#12887, thanks @straight-shoota):
(#13129, thanks @HertzDevil)else
inside lib struct (#13028, thanks @HertzDevil)(&)
to param-less yielding defs before comment line (#13126, thanks @HertzDevil)&
to yielding methods without a block parameter (#12951, thanks @HertzDevil)method_signature_yield
(#13215, thanks @straight-shoota)&
to yielding Def
s without a block parameter (#12952, thanks @HertzDevil)bin/crystal
print no error message when crystal
is missing (#12981, thanks @straight-shoota)CRYSTAL
variable pointing to itself (#13032, thanks @straight-shoota)__declspec(dllimport)
from Windows libiconv build (#13219, thanks @HertzDevil)verbose=1
in test_llvm
(#12931, thanks @straight-shoota)./scripts
to format
recipe (#13064, thanks @straight-shoota)scripts/update-distribution-scripts.cr
(#13071, thanks @straight-shoota)libpcre2
on wasm32 (#13109, thanks @lbguilherme)llvm-config
in find-llvm-config
(#13087, thanks @straight-shoota)no_output_timeout
on circleci (#13151, thanks @straight-shoota)release/1.7
@1.7.3 (#13168, thanks @straight-shoota)no_output_timeout
on circleci (cont.) (#13185, thanks @straight-shoota).gitignore
(#13241, thanks @straight-shoota)std_spec
execution (#13267, thanks @straight-shoota)test.cr
in root of repo conflicting with parser warning specs (#13259, thanks @Blacksmoke16)bin/crystal
in symlink working directory (#13281, thanks @straight-shoota)bin/crystal
when no global crystal
command is installed (#13286, thanks @straight-shoota)interpreter_spec
(#13251, thanks @straight-shoota)all
target as default before including Makfile.local
(#13276, thanks @straight-shoota)@[ThreadLocal]
for PCRE2's JIT stack (#13056, thanks @HertzDevil)libpcre2
bindings with arch-dependent types (SizeT
) (#13088, thanks @straight-shoota)libpcre2
bindings function pointers (#13090, thanks @straight-shoota)MatchData#[]
named capture with identical prefix (#13147, thanks @straight-shoota)Regex::Option
behaviour for unnamed members (#13155, thanks @straight-shoota)Nil
return type restrictions to load_debug_info
(#12992, thanks @straight-shoota)VERSION
to 1.7.2-dev
(#12993, thanks @straight-shoota)Benchmark
docs (#12782, thanks @r00ster91, @straight-shoota)Object#to_s
and #inspect
(#9974, thanks @straight-shoota)Pointer#move_to
(#12677, thanks @TheEEs)nil
from many predicate methods (#12702, thanks @HertzDevil)Hash#select!(keys : Enumerable)
(#12739, thanks @caspiano)Indexable
combinations methods (#10548, thanks @keidax)Range#sample(n)
for integers and floats (#12535, thanks @straight-shoota)Iterable#each_cons_pair
(#12726, thanks @caspiano)Iterator
methods in Iterable
(#12727, thanks @caspiano)Hash#select(Enumerable)
and #merge!(Hash, &)
(#12737, thanks @HertzDevil)Indexable#rindex!
method variant (#12759, thanks @Sija)Enum#to_s
for flag enum containing named and unnamed members (#12895, thanks @straight-shoota)Channel.select_impl
(#12814, thanks @straight-shoota)Digest
class in Digest::CRC32
and Digest::Adler32
(#11535, thanks @BlobCodes)OpenSSL::SSL::Context::Client#alpn_protocol=
(#12724, thanks @jaclarke)HTTP::Client
certificate validation error on FQDN (host with trailing dot) (#12778, thanks @compumike)arc4random(3)
on all supported BSDs and macOS/Darwin (#12608, thanks @dmgk)UInt
in zip directory header (#12822, thanks @pbrumm)File.executable?
for Windows (#9677, thanks @nof1000)TypeNode#nilable?
for root types (#12354, thanks @HertzDevil)#annotations
overload (#9326, thanks @Blacksmoke16)ArrayLiteral
and TupleLiteral
(#12639, thanks @caspiano)ArrayLiteral#-(other)
and TupleLiteral#-(other)
(#12646, #12916 thanks @caspiano, @straight-shoota)HTTP::Headers#serialize
(#12765, thanks @straight-shoota)HTTP::Client
closes response when breaking out of block (#12749, thanks @straight-shoota)HTTP::Server::Response#redirect
(#12526, thanks @straight-shoota)IPAddress#loopback?
should consider ::ffff:127.0.0.1/104
loopback too (#12783, thanks @carlhoerberg)Number#humanize
(#12761, thanks @HertzDevil)BigInt#%
for unsigned integers (#12773, thanks @straight-shoota)__powisf2
and __powidf2
compiler-rt functions (#12569, thanks @lbguilherme)Int#downto
(#12468, thanks @yb66)BigDecimal#to_s
(#10805, thanks @HertzDevil)#bit_reverse
and #byte_swap
for primitive integers (#12865, thanks @HertzDevil)Exception::CallStack
: avoid allocations in LibC.dl_iterate_phdr
(#12625, thanks @dmgk)GC::Stats
(#12779, thanks @straight-shoota)message
parameter to #not_nil!
(#12797, thanks @straight-shoota)Enum#to_s
using assert_prints
(#12882, thanks @straight-shoota)GC.malloc_atomic
for XML (#12692, thanks @HertzDevil)YAML::Any
(#12688, thanks @zw963){JSON,YAML}::Any#as_f
(#12835, thanks @compumike)File.real_path
to .realpath
(#12552, thanks @straight-shoota)flock_*
fiber-aware, without blocking the thread (#12861, #12728, thanks @straight-shoota)flock_*
for Win32 (#12766, thanks @straight-shoota)ENV#has_key?
(#12781, thanks @straight-shoota)Process
specs (#12889, thanks @straight-shoota)Process::Status
(#12881, thanks @straight-shoota)IndexError
on unmatched subpattern for MatchData#begin
and #end
(#12810, thanks @straight-shoota)String#split
array and block versions (#12808, thanks @hugopl)String#index/rindex!
methods (#12730, thanks @Sija)Regex
and Regex::MatchData
(#12788, #12789, thanks @straight-shoota)Regex#match
with option (#12804, thanks @straight-shoota)if !blank?
with unless blank?
(#12800, thanks @vlazar)Regex
engine on PCRE2 (#12856, #12866, #12847, thanks @straight-shoota, thanks @HertzDevil)String#byte_slice
(#12809, thanks @straight-shoota)Program#cache_dir
property (#12669, thanks @straight-shoota)Crystal::Error
(#12888, thanks @straight-shoota)->var.foo
semantics with assignments (#9419, thanks @makenowjust)File#flock_exclusive
on win32 in compiler (#12876, thanks @straight-shoota)Path
(#12784, thanks @HertzDevil)$10?
(#12701, thanks @FnControlOption)scan_ident
calls (#12691, thanks @FnControlOption)Def#yields
to Def#block_arity
(#12833, thanks @straight-shoota)sizeof
, instance_sizeof
, or offsetof
as a type arg (#12577, thanks @keidax)_
after any other Path
when comparing overloads (#12855, thanks @HertzDevil)@[Deprecated]
on annotation
(#12557, thanks @caspiano)system
macro method (#12885, thanks @straight-shoota)-
) (#12620, thanks @caspiano)shell.nix
for newer LLVM versions and aarch64-darwin (#12591, thanks @HertzDevil)NOTICE.md
(#12901, thanks @HertzDevil)Object#in?
instead of multiple comparisons (#12675, thanks @Sija)Object#in?
in place of multiple comparisons (#12700, thanks @caspiano)Enumerable#find!/#index!
variants (#12686, thanks @Sija)VirtualMetaclassType#implements?
to ignore base type (#12632, thanks @straight-shoota)obj
and to
(#12668, thanks @asterite)Socket::IPAddress
(#12583, thanks @Blacksmoke16)llvm-configXX
while building compiler (#12602, thanks @HertzDevil)@[Link]
annotation (#11935, thanks @lbguilherme)GC.malloc_atomic
with GC.realloc
, not Pointer#realloc
(#12391, thanks @HertzDevil)Symbol
variables in standard library specs (#12462, thanks @HertzDevil)@[::Primitive]
and @[::Flags]
where necessary (#11900, thanks @HertzDevil)NamedTuple
deserialization from JSON and YAML (#12008, thanks @HertzDevil)BitArray#tally(hash)
(#11909, thanks @HertzDevil)Slice#unsafe_slice_of
and #to_unsafe_bytes
in the standard library and compiler (#12280, thanks @HertzDevil)BitArray#index
and #rindex
(#12087, thanks @HertzDevil)Indexable#index!
overloads with offset
parameter (#12089, thanks @HertzDevil)Mutex
on Windows (#12213, thanks @HertzDevil)U/Int128
in Random
(#11977, thanks @BlobCodes)#system_echo
and #system_raw
on all systems (#12352, thanks @HertzDevil)Crystal::System::FileInfo
through File::Info
(#12385, thanks @HertzDevil)IO.pipe
spec on FreeBSD (#12324, thanks @dmgk)File.match?
**
globbing pattern. (#12343, thanks @zw963)Dir#info
(#11991, thanks @didactic-drunk)IO::FileDescriptor
's console methods on Windows (#12294, thanks @HertzDevil)LibC::DT_LINK
-> DT_LNK
(#11954, thanks @HertzDevil)IO::FileDescriptor#info
(#12384, thanks @HertzDevil)IO::DEFAULT_BUFFER_SIZE
(#12507, thanks @straight-shoota)IO::FileDescriptor
staying open on finalize (#12367, thanks @refi64)record
documentation (#12334, thanks @straight-shoota)Socket::IPAddress.valid?
(#12489, #10492, thanks @straight-shoota)HTTP::Client#exec
to abort retry when client was closed (#12465, thanks @straight-shoota)HTTP::Client
implicit compression with retry (#12536, thanks @straight-shoota)HTTP::StaticFileHandler
: Reduce max stat calls from 6 to 2 (#12310, thanks @didactic-drunk)HTTP::Client
(#12527, thanks @straight-shoota)sprintf
and String#%
(#10973, thanks @HertzDevil)Float#to_s
ignore NaN sign bit (#12399, thanks @HertzDevil)sprintf
and String#%
ignore NaN sign bit (#12400, thanks @HertzDevil)Complex#to_s
imaginary component sign for certain values (#12244, thanks @HertzDevil)Complex#sign
(#12242, thanks @HertzDevil)rand(Range(Int, Int))
when signed span is too large (#12545, thanks @HertzDevil)#rotate_left
and #rotate_right
for primitive integers (#12307, thanks @HertzDevil)BigDecimal#div
for inexact divisions (#10803, thanks @HertzDevil)Float#to_s
(#10913, thanks @HertzDevil)U/Int128
to isqrt
spec (#11976, thanks @BlobCodes)wasi-sdk 16
: don't rely on __original_main
(#12450, thanks @lbguilherme)ArrayConverter
and HashValueConverter
(#10638, thanks @HertzDevil)after_initialize
method for yaml
and json
serializers (#12530, thanks @analogsalad)LibC::Passwd
on FreeBSD (#12315, thanks @dmgk)Process.parse_arguments
(#12278, thanks @HertzDevil)Dir.current
respect $PWD
(#12471, thanks @straight-shoota)String
shift state specs on FreeBSD (#12339, thanks @dmgk)sprintf
parameters (#12402, thanks @HertzDevil)Colorize
doc example (#12492, thanks @zw963)String#downcase
and String#upcase
for single byte optimizable case (#12389, thanks @asterite)String#valid_encoding?
(#12145, thanks @HertzDevil)String#unicode_normalize
and String#unicode_normalized?
(#11226, thanks @HertzDevil)sprintf
(#12448, thanks @HertzDevil)LibC.malloc
instead of GC.malloc
for LibPCRE allocations (#12456, thanks @lbguilherme)#to_s
for empty parameters of lib funs (#12368, thanks @HertzDevil)Proc(*T, Void)
to Proc(*T, Nil)
(#12388, thanks @asterite)begin
Expression
s that are direct node children (#12362, thanks @HertzDevil)Path.new(string)
instead of Path.new([string])
(#12419, thanks @asterite)freeze_type
in select AST nodes (#12428, thanks @asterite)merge_if_vars
(#12432, #12433, thanks @asterite)type_from_dependencies
(#12437, thanks @asterite)Dir.current
to avoid thousands of allocations (#12455, thanks @yxhuvud)out
instead of an extra variable (#10952, thanks @asterite)String
, Array
, and Hash
(#12212, thanks @HertzDevil)next
inside captured block (#12237, thanks @asterite)crystal_type_id
for virtual metaclass type (#12246, thanks @asterite)Int128
/UInt128
intrinsics (#12258, thanks @asterite)MixedUnionType
to NilableProcType
(#12286, thanks @asterite)with ... yield
with extra arguments (#12301, thanks @asterite)NoReturn
(#12275, thanks @asterite)with ... yield
scope into account for args bytesize (#12317, thanks @asterite)as?
when there's no resulting type (#12328, thanks @asterite)non_nilable_type
in NilableCast (#12348, thanks @asterite)upcast_distinct
from A+
to B
(Crystal::VirtualType
to Crystal::NonGenericClassType
) (#12374, thanks @asterite)MainVisitor
each time we need to interpret code (#12512, thanks @asterite)GenericClassInstanceMetaclassType
to VirtualMetaclassType
(#12562, thanks @asterite)$CRYSTAL_INTERPRETER_LOADER_INFO
to show loaded libraries (#12221, thanks @straight-shoota)Prompt
type (#12288, thanks @asterite)i += 1
(#12381, thanks @asterite)Nil
to NoReturn
in FixMissingTypes
(#12230, thanks @asterite)HTTP::Server
specs in interpreted mode (#12420, thanks @asterite)Int64
's range (#12427, thanks @HertzDevil)arg*
to param*
(#12235, thanks @potomak)Union
restrictions to be ordered before all other restrictions (#12335, thanks @HertzDevil)Class
, Tuple
, NamedTuple
, Enum
, Pointer
, Proc
, StaticArray
and Union
. (#12160, thanks @I3oris)is_a?
from virtual metaclass to generic metaclass (#12306, thanks @asterite)is_a?
from generic class against generic class instance type (#12312, thanks @asterite)self
in restrictions when instantiating macro def in subtypes (#10954, thanks @HertzDevil)self
when inferring instance variable types (#12466, thanks @HertzDevil)Metaclass
and Path
(#12523, thanks @HertzDevil)bin/crystal
: Ensure sh
compatibility (#12486, thanks @HertzDevil)compopt
only when it's present (#12248, thanks @potomak)Makefile.win
and wrapper script on Windows CI (#12344, thanks @HertzDevil)EXPORT_CC
for make crystal
(#11760, thanks @straight-shoota)scripts/update-distribution-scripts.sh
(#12503, thanks @straight-shoota)spec/win32_std_spec.cr
and spec/generate_windows_spec.sh
(#12282, #12549, thanks @HertzDevil and @straight-shoota)