1.10.1 (2023-10-13)
IO#gets
should have same result regardless of#peek
availability (#13882, thanks @compumike)- Support Android API levels 24 - 27 (#13884, thanks @HertzDevil)
- (ci) Fix
win.yml
(#13876, thanks @straight-shoota)
1.10.0 (2023-10-09)
- Add unlimited block unpacking (#11597, thanks @asterite)
- Add more
Colorize::Mode
flags (#13745, thanks @HertzDevil) - (collection) Add
Hash#put_if_absent
(#13590, thanks @HertzDevil) - (collection) Add
Set#rehash
(#13630, thanks @HertzDevil) - (collection) Add yield
key
inHash#transform_values
andvalue
in#transform_keys
(#13608, thanks @baseballlover723) - (crypto) Upgrade SSL defaults to Mozilla guidelines version 5.7 (#13685, thanks @straight-shoota)
- (crypto) [security] Allow OpenSSL clients to choose cipher (#13695, thanks @carlhoerberg)
- (files) Add
File#rename
(#13640, thanks @carlhoerberg) - (llvm) Support LLVM 17 (#13782, thanks @HertzDevil)
- (networking) Add overloads for
URI::Params.encode
withIO
parameter (#13798, thanks @jwoertink) - (numeric) Add
Complex#to_i128
,Complex#to_u128
(#13838, thanks @HertzDevil) - (runtime) Add additional fields to
GC:ProfStats
(#13734, thanks @carlhoerberg) - (serialization) Support YAML deserialization of 128-bit integers (#13834, thanks @HertzDevil)
- (serialization) Support 128-bit integers in
JSON::PullParser#read?
(#13837, thanks @HertzDevil) - (specs) [breaking] Change spec runner to exit with failure for
focus: true
(#13653, thanks @straight-shoota) - (text) Add
String#byte_index(Char)
(#13819, thanks @funny-falcon) - (time) Support Android's system timezone database (#13666, thanks @HertzDevil)
- Experimental: Add
Slice.literal
for numeric slice constants (#13716, thanks @HertzDevil)
- Add
tool unreachable
(#13783, thanks @straight-shoota) - (dependencies) Add
crystal tool dependencies
(#13631, thanks @straight-shoota) - (docs-generator) Add CSS for tables (#13822, thanks @nobodywasishere)
- (hierarchy) Support generic types in
crystal tool hierarchy
(#13715, thanks @HertzDevil) - (playground) Update octicons to v19.5.0 (#13738, thanks @GeopJr)
- (macros) Fix missing normalization of macro expressions (and others) (#13709, thanks @asterite)
- (macros) Fix block parameter unpacking inside macros (#13813, thanks @HertzDevil)
- (collection) [breaking] Mark the return type of methods such as
Slice#copy_to
asNil
(#13774, thanks @erdian718) - (files) Change
IO::Buffered#peek
's return type toBytes
(#13863, thanks @HertzDevil) - (llvm) Chop git suffix from
LibLLVM::VERSION
(#13699, thanks @HOMODELUNA) - (macros) Do not add trailing
+
inTypeNode#id
for virtual types (#13708, thanks @HertzDevil) - (numeric) Fix
BigDecimal#round
for large digit counts in base 10 (#13811, thanks @HertzDevil) - (serialization) Set encoding in
XML.parse_html
explicitly to UTF-8 (#13705, thanks @straight-shoota) - (serialization) Fix error message when parsing unknown JSON enum value (#13728, thanks @willhbr)
- (serialization) Fix YAML scalar type validation error message (#13771, thanks @MistressRemilia)
- (serialization) Fix incorrect overflow in
UInt64.from_yaml
(#13829, thanks @HertzDevil) - (system) Fix
Process.new
with nilable chdir parameter on Windows (#13768, thanks @straight-shoota) - (system) Fix typo in unistd.cr (#13850, thanks @kojix2)
- (text) Fix
Char::Reader#each
bounds check after block (#13817, thanks @straight-shoota) - (text) Minor fixup for
HTML.decode_codepoint
(#13843, thanks @straight-shoota)
- [breaking] Remove double
.cr.cr
extension inrequire
path lookup (#13749, thanks @straight-shoota) - (parser) Fix end location for
FunDef
(#13789, thanks @straight-shoota) - (semantic) Fix lookup scope for
@[Primitive]
def's return type (#13658, thanks @HertzDevil) - (semantic) Fix typo in call_error.cr (#13764, thanks @kojix2)
- (docs-generator) Fix octicon-link icon color on dark mode (#13670, thanks @GeopJr)
- (docs-generator) Allow word breaks between module names in docs (#13827, thanks @nobodywasishere)
- (docs-generator) Fix docs dark mode dropdown background on blink (#13840, thanks @GeopJr)
- (init) Fix shard crystal version in
crystal init
(#13730, thanks @xendk) - (hierarchy): Fix byte sizes for
Proc
s inside extern structs (#13711, thanks @HertzDevil)
- Optimize
IO::Delimited
(#11242, thanks @asterite) - (crypto) Use
IO::DEFAULT_BUFFER_SIZE
inDigest#update
(#13635, thanks @carlhoerberg) - (crypto) Fix memory leak in
OpenSSL::SSL::Socket#peer_certificate
(#13785, thanks @compumike) - (files) Optimize
IO#read_string(0)
(#13732, thanks @jgaskins) - (files) Avoid double file buffering (#13780, thanks @carlhoerberg)
- (llvm) Refactor
LLVM.default_target_triple
to avoid regex (#13659, thanks @straight-shoota) - (numeric) Pre-allocate Dragonbox cache array (#13649, thanks @HertzDevil)
- (runtime) Avoid realloc callstack array when unwinding (#13781, thanks @carlhoerberg)
- (time) Optimize the constructors of
Time::Span
(#13807, thanks @erdian718)
- Do not use nilable
Pointer
s (#13710, thanks @HertzDevil) - (collection) Use
Set(T)
instead ofHash(T, Bool)
(#13611, thanks @HertzDevil) - (concurrency) Use
Fiber.inactive
insideFiber#run
'sensure
block (#13701, thanks @HertzDevil) - (crypto) Use
JSON::Serializable
inscripts/generate_ssl_server_defaults.cr
(#13667, thanks @HertzDevil) - (crypto) Refactor narrow OpenSSL requires for digest implementations (#13818, thanks @straight-shoota)
- (networking) [deprecation] Add types to
HTTP::StaticFileHandler
(#13778, thanks @jkthorne)
- Restrict some boolean properties to
Bool
in the compiler (#13614, thanks @HertzDevil)
- (crypto) Fix docs for
Digest::SHA512
(#13796, thanks @jgaskins) - (files) Document
Dir#mkdir
,Dir#exists?
(#13795, thanks @jkthorne) - (networking) Add documentation for
HTTP::Headers#add
(#13762, thanks @jkthorne) - (text) Fix typo in regex.cr (#13751, thanks @beta-ziliani)
- (numeric) Update specs for
Int::Primitive.from_json
(#13835, thanks @HertzDevil) - (numeric) Remove overflowing
Float#to_u!
interpreter primitive specs (#13737, thanks @HertzDevil) - (time) Clear
Time::Location
cache before.load_android
specs (#13718, thanks @HertzDevil)
- Update previous Crystal release - 1.9.2 (#13650, thanks @straight-shoota)
- Update distribution-scripts (#13776, thanks @straight-shoota)
- make: Add
generate_data
target for running generator scripts (#13700, thanks @straight-shoota) - Add shell completions for
clear_cache
(#13636, thanks @straight-shoota) - New changelog format (#13662, thanks @straight-shoota)
- Detect developer mode in Windows installer (#13681, thanks @HertzDevil)
- Update PGP key link (#13754, thanks @syeopite)
- Fix log format in update-distribution-scripts.sh (#13777, thanks @straight-shoota)
- (ci) Trigger windows release jobs on tag (#13683, thanks @straight-shoota)
- (ci) Update GH Actions (#13748, thanks @renovate)
- (ci) Refactor
crystal_bootstrap_version
(#13845, thanks @straight-shoota)
1.9.2 - 2023-07-19
- (runtime) Revert "Add default interrupt handlers" (#13673, thanks @straight-shoota)
1.9.1 - 2023-07-17
- (serialization) Fix
Serializable
with converter parsingnull
value (#13656, thanks @straight-shoota)
- (codegen) Fix generated cc command for cross compile (#13661, thanks @fnordfish)
1.9.0 - 2023-07-11
- (numeric) Handle NaNs when comparing
Big*
numbers againstFloat
(#13293, #13294, #13350, #13554, thanks @HertzDevil) - (llvm) Remove most
LLVM::DIBuilder
functions fromllvm_ext.cc
(#13448, thanks @HertzDevil)
- (macros) Add
warning
macro (#13262, thanks @Blacksmoke16) - (macros) Add
print
macro (#13336, thanks @jkthorne)
- (collection) Add
Enumerable#in_slices_of
(#13108, thanks @pricelessrabbit) - (collection) Add support for dash separator to
Enum.parse
(#13508, thanks @straight-shoota) - (collection) Add
Enum#to_i128
and#to_u128
(#13576, thanks @meatball133) - (collection) Add
Enumerable#partition
overload with type filter (#13572, thanks @baseballlover723) - (concurrency) Support asynchronous
IO.pipe
on Windows (#13362, thanks @HertzDevil) - (files) [deprecation] Add
File::MatchOptions
to controlDir.glob
's behavior (#13550, thanks @HertzDevil) - (networking) Implement
Socket#reuse_port
on Windows (#13326, thanks @stakach) - (networking) Add multicast support to
UDPSocket
on Windows (#13325, thanks @stakach) - (networking) HTTP Server should allow custom concurrency models (#13428, thanks @stakach)
- (networking) Add
Socket::IPaddress.v4
,.v6
,.v4_mapped_v6
(#13422, thanks @HertzDevil) - (networking) Add
URI::Params#merge
,#merge!
andURI#update_query_params
(#13415, thanks @skinnyjames) - (networking) Support Unix sockets on Windows (#13493, thanks @HertzDevil)
- (networking) Add
HTTP::Request#form_params
(#13418, thanks @threez) - (numeric) Add
BigDecimal#%
(#13255, thanks @MattAlp) - (numeric) Improve conversions from
BigInt
toInt::Primitive
(#13562, thanks @HertzDevil) - (runtime) Print error if unable to delay-load DLL on Windows (#13475, thanks @HertzDevil)
- (runtime) Add default interrupt handlers (#13568, thanks @straight-shoota)
⚠️ This was reverted in 1.9.2 - (serialization) Add
ignore_serialize
forYAML::Serializable
(#13556, thanks @meatball133) - (specs) Add a testcase line number to the output of JUnitFormatter (#13468, thanks @nobodywasishere)
- (specs) Publish the
assert_prints
spec helper (#13599, thanks @HertzDevil) - (system) Implement
Process.exec
on Windows (#13374, thanks @HertzDevil) - (system) Add
File::BadExecutableError
(#13491, thanks @HertzDevil) - (text) Add inspection of Regex options support (#13354, thanks @straight-shoota)
- (text) Add
Regex.literal
(#13339, thanks @straight-shoota) - (text) Implement
#match!
for Regex (#13285, thanks @devnote-dev) - (text) Add parameters for
Regex::MatchOptions
to matching methods (#13353, thanks @straight-shoota) - (text) Add
Char#titlecase
for correct mixed-case transformations (#13539, thanks @HertzDevil) - (time) Add
start_day
parameter toTime#at_beginning_of_week
(#13446, thanks @DanielGilchrist) - (time) Map IANA time zone identifiers to Windows time zones (#13517, thanks @HertzDevil)
- (time) Add
Time.unix_ns
and#to_unix_ns
(#13359, thanks @garymardell)
- Add message about non-release mode to
crystal --version
(#13254, thanks @will) - Respect
%CC%
on Windows (#13376, thanks @HertzDevil) - Support DLL delay-loading on Windows (#13436, thanks @HertzDevil)
- Support
-static
and-dynamic
.lib
suffixes on Windows (#13473, #13645, thanks @HertzDevil) - Make compiler aware of output extension when building programs (#13370, thanks @HertzDevil)
- Support
CRYSTAL_LIBRARY_RPATH
for adding dynamic library lookup paths (#13499, thanks @HertzDevil) - Add compiler command
crystal clear_cache
(#13553, thanks @baseballlover723) - (codegen) Support LLVM 16 (#13181, thanks @HertzDevil)
- (semantic) Correctly ignore nested deprecation warnings (#13513, thanks @straight-shoota)
- (docs-generator) Add dark mode to docs (#13512, thanks @GeopJr)
- (docs-generator) Add mobile support to docs (#13515, thanks @GeopJr)
- (formatter) [security] Formatter: escape bi-directional control characters within strings (#13067, thanks @HertzDevil)
- (collection) Fix
Array#flatten
to discardIterator::Stop
(#13388, thanks @straight-shoota) - (collection) Fix return type of
Iterator#chunk
andEnumerable#chunks
withoutDrop
(#13506, thanks @straight-shoota) - (collection) Fix
Iterator#with_index(offset)
with non-Int32
offset
(#13612, thanks @HertzDevil) - (concurrency) Fix
preview_mt
infinite loop on Windows (#13419, thanks @HertzDevil) - (concurrency) Fix
Atomic#max
and#min
for signed enums (#13524, thanks @HertzDevil) - (concurrency) Fix timeout events getting lost on Windows (#13525, thanks @HertzDevil)
- (concurrency) Support
Atomic(T)#compare_and_set
whenT
is a reference union (#13565, thanks @HertzDevil) - (files) Fix
Dir#info
on Windows (#13395, thanks @HertzDevil) - (files) Windows: open standard streams in binary mode (#13397, thanks @HertzDevil)
- (files) Fix
File.info(File::NULL)
on Windows (#13421, thanks @HertzDevil) - (files) Allow
File.delete
to remove read-only files on Windows (#13462, thanks @HertzDevil) - (files) Make
fcntl
defined on all platforms (#13495, thanks @HertzDevil) - (files) Allow
Dir.delete
to remove read-only directories on Windows (#13626, thanks @HertzDevil) - (files) Use current directory's root for
Dir.glob("/...")
on Windows (#13628, thanks @HertzDevil) - (llvm) Fix
LLVM.default_target_triple
to normalize aarch64 darwin target (#13597, thanks @straight-shoota) - (log) Fix
Log::Builder
appendBroadcastBackend
to itself (#13405, thanks @straight-shoota) - (macros) Fix error message for calling
record
macro with kwargs (#13367, thanks @a-alhusaini) - (networking) Remove double URL escape in
HTTP::Server::Response.redirect
(#13321, thanks @threez) - (networking) Fix WebSocket capitalization in docs (#13331, thanks @joshrickard)
- (networking) Fix
TCPSocket#tcp_keepalive_idle
on Windows (#13364, thanks @HertzDevil) - (networking) Fix client-side
TCPSocket#remote_address
on Windows (#13363, thanks @HertzDevil) - (networking) Parse IP addresses in Crystal instead of using
LibC.inet_pton
(#13463, thanks @HertzDevil) - (networking) Windows: do not set
SO_EXCLUSIVEADDRUSE
ifSO_REUSEADDR
already present (#13477, thanks @HertzDevil) - (networking) Implement
Socket::IPAddress#to_s
with Crystal instead ofLibC.inet_ntop
(#13483, thanks @HertzDevil) - (networking) Ensure
Socket
checksWinError.wsa_value
on Windows, notErrno.value
(#13494, thanks @HertzDevil) - (numeric) Disallow creating
Big*
numbers from infinity or NaN (#13351, thanks @HertzDevil) - (numeric) Fix
LibM.hypotf
andldexpf
link errors on Windows (#13485, thanks @HertzDevil) - (numeric) Make comparisons between
BigRational
andBigFloat
exact (#13538, thanks @HertzDevil) - (runtime) Fix size of type_id in
Object.set_crystal_type_id
(#13338, thanks @straight-shoota) - (runtime) Allow
/SUBSYSTEM:WINDOWS
on Windows (#13332, thanks @HertzDevil) - (runtime) Use correct format strings for crash stack traces (#13408, thanks @HertzDevil)
- (serialization) Fix handling of quoted boolean values in
YAML::Any
(#13546, thanks @willhbr) - (serialization) Fix ambiguous call with untyped int literal in
{JSON,YAML}::Any.new
(#13618, thanks @straight-shoota) - (system) Fix for Process: ensure chdir is a string (#13503, thanks @devnote-dev)
- (system) Windows: drop internal environment variables from
ENV
(#13570, thanks @HertzDevil) - (text) Fix
String#underscore
with multi-character downcasing (#13540, thanks @HertzDevil) - (text) Do not attempt downcasing first when case-folding a
Char
(#13542, thanks @HertzDevil) - (text) Handle case folding in
String#compare
correctly (#13532, thanks @HertzDevil) - (time) Update list of Windows time zones (#13501, thanks @HertzDevil)
- (time) Fix local timezones without DST on Windows (#13516, thanks @HertzDevil)
- (time) Fix leap second handling for timezone information files (#13600, thanks @HertzDevil)
- More accurate macro errors (#13260, thanks @Blacksmoke16)
- Do not drop
/LIBPATH
from Windows linker command (#13530, thanks @HertzDevil) - Fix instantiated method signatures in error traces (#13580, thanks @HertzDevil)
- Place
--emit
files back in current directory when running source (#13604, thanks @HertzDevil) - (generics) Fix free variable matching of bound numeric values (#13606, thanks @HertzDevil)
- (parser) Don't skip the token immediately after
lib
name (#13407, thanks @FnControlOption) - (parser) Allow newline after hash rocket (#13460, thanks @FnControlOption)
- (parser) Add missing locations of various AST nodes (#13452, thanks @FnControlOption)
- (parser) Fix AST location of call name in operator assignment (#13456, thanks @FnControlOption)
- Display
Bool
's size as 1 byte incrystal tool hierarchy
, not 0 (#13588, thanks @HertzDevil)
- (collection) Optimize
Array#concat(Indexable)
(#13280, thanks @HertzDevil) - (collection) Optimize
Deque#concat(Indexable)
(#13283, thanks @HertzDevil) - (concurrency) Support synchronous socket operations on Windows (#13414, thanks @HertzDevil)
- (numeric) Optimize
BigInt.new(Int::Primitive)
(#13303, thanks @HertzDevil) - (numeric) Optimize
BigRational#<=>(Int)
(#13555, thanks @HertzDevil) - (text) Improve
HTML.escape(string, io)
performance (#13139, thanks @BlobCodes) - (text) Refactor
String.ends_with?
to useMatchOptions::ENDANCHORED
(#13551, thanks @straight-shoota)
- (docs-generator) Optimize
Doc::Method#compute_doc_info
to avoid duplicate regex (#13324, thanks @straight-shoota)
- Use sentence case for all standard library exceptions (#13400, thanks @HertzDevil)
- (collection) Refactor code for
Deque
buffer resizing (#13257, thanks @HertzDevil) - (concurrency) Clean up unused code for Windows event loop (#13424, thanks @HertzDevil)
- (files) Do not reopen current file in
File#utime
on Windows (#13625, thanks @HertzDevil) - (files) Do not reopen current file in
File#chmod
on Windows (#13627, thanks @HertzDevil) - (llvm) [deprecation] Deprecate
LLVM::Module#write_bitcode_with_summary_to_file
(#13488, thanks @HertzDevil) - (llvm) [deprecation] Deprecate LLVM's legacy pass manager (#13579, thanks @HertzDevil)
- (llvm) Remove two outdated LLVM fun bindings (#13438, thanks @HertzDevil)
- (llvm) Split
LLVM::Builder
overloads that don't take an operand bundle (#13564, thanks @HertzDevil) - (networking) Move more
Socket
methods toCrystal::System::Socket
(#13346, thanks @HertzDevil) - (numeric) Use
Int#bit_length
instead ofMath.log2
followed by#to_i
(#13440, thanks @HertzDevil) - (numeric) Use GMP's functions for
Float
-to-BigRational
conversion (#13352, thanks @HertzDevil) - (serialization) Simplify implementation of
Serializable#initialize
(#13433, thanks @straight-shoota) - (serialization) Use per-thread libxml2 global state on Windows (#13486, thanks @HertzDevil)
- (text) Refactor String header layout reflection (#13335, thanks @straight-shoota)
- (text) Refactor symbol quoting into
Symbol.quote_for_named_argument
(#13595, thanks @straight-shoota)
- (parser) Crystal lexer cleanup (#13270, thanks @FnControlOption)
- (parser) Don't use symbols in
Crystal::Lexer#check_macro_opening_keyword
(#13277, thanks @HertzDevil)
- (concurrency) Fix operators in
Atomic#add
,#sub
,#max
,#min
(#13523, thanks @HertzDevil) - (concurrency) Hide
Crystal::LibEvent
from public docs (#13624, thanks @HertzDevil) - (macros) Fix doc for return type of
Crystal::Macros::Case#else
(#13385, thanks @HertzDevil) - (system) Reference
Process.executable_path
atPROGRAM_NAME
(#13434, thanks @straight-shoota) - (text) Add note about graphemes in
String#reverse
(#13536, thanks @noraj)
- Add manual entry for
clear_cache
command (#13621, thanks @straight-shoota)
- Implemented ',' command in brainfuck sample program (#13559, thanks @ZeroPlayerRodent)
- (files) Fix
IO::FileDescriptor
'sSTDIN
mode spec (#13365, thanks @HertzDevil) - (files) Fix file permission specs on Windows (#13465, thanks @HertzDevil)
- (files) Add
slow
tag to stdlib specs that compile a program (#13498, thanks @straight-shoota) - (serialization) Refactor JSON, YAML specs for #13337 for simplicity (#13358, thanks @straight-shoota)
- (system) Disable
Process.pgid
spec on Windows (#13476, thanks @HertzDevil) - (text) Reorder and enhance specs for
String.new(&)
(#13333, thanks @straight-shoota) - (text) Remove incorrect
CRYSTAL
in comments (#13500, thanks @HertzDevil) - (time) Skip
Time::Location.load_local
spec if unable to change time zone (#13355, thanks @HertzDevil)
- (interpreter) Regenerate
spec/interpreter_std_spec.cr
(#13310, thanks @cyangle)
- Update changelog with previous Crystal releases (#13322, #13373, #13450, thanks @straight-shoota)
- Merge
release/1.8
(#13361, #13449, thanks @straight-shoota) - PR template: adding a line about force-pushes (#12794, thanks @beta-ziliani)
- Less verbose output in
Makefile.win
(#13383, thanks @HertzDevil) - Update distribution-scripts (#13457, thanks @Blacksmoke16)
- Add
.gitattributes
to repository (#13479, thanks @HertzDevil) - Update
shell.nix
to nixpkgs-23.05 (#13571, thanks @HertzDevil) - Document
target
variable in Makefiles (#13384, thanks @HertzDevil) - Fix
bin\crystal.ps1
writing to standard error stream (#13372, thanks @HertzDevil) - Avoid calling realpath of parent crystal in wrapper script (#13596, thanks @straight-shoota)
- (ci) Show PCRE/PCRE2 configuration on CI (#13307, thanks @HertzDevil)
- (ci) Update cachix/install-nix-action action (#13531, #13586, thanks @renovate)
- (ci) Restrict Windows CI jobs for installer packages to release branches (#13623, thanks @HertzDevil)
- (ci) Build samples on Windows CI (#13334, thanks @HertzDevil)
- (ci) Do not cancel in progress CI jobs for master branch (#13393, thanks @Blacksmoke16)
- (ci) Upgrade Windows CI to LLVM 16 (#13469, thanks @HertzDevil)
- (ci) Distribute DLLs and import libraries on Windows (#13543, thanks @HertzDevil)
- (ci) Build Windows portable and installer packages on CI (#13578, thanks @HertzDevil)
- (ci) Split Windows library build scripts from CI (#13478, thanks @HertzDevil)
1.8.2 - 2023-05-08
- Fix codegen bug with
Iterator::ChainIterator
(#13412, thanks @straight-shoota)
- Fix
Log::Metadata#dup
crash with 2+ entries (#13369, thanks @HertzDevil)
- Fixup for
JSON::Serializable
on certain recursively defined types (#13430, thanks @kostya)
- Fix
String#scan
with emptyRegex
match at multibyte char (#13387, thanks @HertzDevil) - (performance) Check subject UTF-8 validity just once for
String#gsub
,#scan
,#split
(#13406, thanks @HertzDevil)
- Always use 0 for offset of
StaticArray
's@buffer
(#13319, thanks @HertzDevil)
- Backport bugfixes to release/1.8 for release 1.8.2 (#3435, thanks @straight-shoota)
1.8.1 - 2023-04-20
- Fix
JSON::Serializable
on certain recursively defined types (#13344, thanks @HertzDevil)
- Fix
String#gsub
with empty match at multibyte char (#13342, thanks @straight-shoota) - Fix PCRE2
Regex
with more than 127 named capture groups (#13349, thanks @HertzDevil)
1.8.0 - 2023-04-14
- The compiler uses PCRE2 to validate regex literals (#13084, thanks @straight-shoota)
- Fill docs for
TupleLiteral
(#12927, thanks @straight-shoota) - Allow namespaced
Path
s as type names forlib
(#12903, thanks @HertzDevil)
- Fix
SyntaxHighlighter::HTML
to escape identifier values (#13212, thanks @straight-shoota) - Add workaround for
Value#not_nil!
copying the receiver (#13264, thanks @HertzDevil) - Fix
Pointer#copy_to
overflow on unsigned size and different target type (#13269, thanks @HertzDevil) - Docs: Added note about imports where necessary (#13026, #13066, thanks @Tamnac, @straight-shoota)
- Suppress compiler output in
compile_file
spec helper (#13228, thanks @straight-shoota) - Define equality for
Process::Status
andOAuth::RequestToken
(#13014, thanks @HertzDevil) - Fix some Linux glibc bindings (#13242, #13249, thanks @ysbaddaden, @HertzDevil)
- (breaking-change) Fix
Enum#includes?
to require all bits set (#13229, thanks @straight-shoota) - (breaking-change) Deprecate
Enum.flags
(#12900, thanks @straight-shoota) - (breaking-change) Remove compile-time error for
Range#size
,#each
,#sample
(#13278, thanks @straight-shoota) - (breaking-change) Docs: Require all
Indexable
s to be stable (#13061, thanks @HertzDevil) - Add
Enum.[]
convenience constructor (#12900, thanks @straight-shoota) - Rename internal
Iterator::Slice
type to not conflict with::Slice
(#12983, thanks @Blacksmoke16) - Fix
Array#replace
on shifted arrays (#13256, thanks @HertzDevil) - Add
Tuple#to_static_array
(#12930, thanks @straight-shoota) - Add
Enum#inspect
(#13004, thanks @straight-shoota) - Add
Slice#+(Slice)
andSlice.join
(#12081, thanks @HertzDevil) - Add
Enumerable#min(count)
and#max(count)
(#13057, thanks @nthiad) - Fix
Array(T)#[]=(Int, Int, Array(T))
on shifted arrays (#13275, thanks @HertzDevil)
- Fix: Make sure to dup
Array
inChannel.select_impl
(#12827, #12962, thanks @straight-shoota) - Add memory barriers on lock/unlock of SpinLock (#13050, thanks @bcardiff)
- (performance) Avoid
Array
allocation inChannel.select(Tuple)
(#12960, thanks @straight-shoota)
- (breaking-change) Deprecate
Termios
(#12940, thanks @HertzDevil) - (breaking-change) Windows: make
File.delete
remove symlink directories, notDir.delete
(#13224, thanks @HertzDevil) - Leverage
fileapi
for opening files on windows (#13178, thanks @Blacksmoke16) - Windows: fix error condition when
File.open
fails (#13235, thanks @HertzDevil) - Skip eacces spec for superuser (#13227, thanks @straight-shoota)
- Improve
File.symlink
on Windows (#13141, thanks @HertzDevil) - Implement
File.readlink
on Windows (#13195, thanks @HertzDevil)
- (breaking-change) Drop support for LLVM < 8 (#12906, thanks @straight-shoota)
- (breaking-change) Support LLVM 15 (#13173, thanks @HertzDevil)
- Error when
find-llvm-config
is unsuccessful (#13045, thanks @straight-shoota) - Remove
LibLLVM.has_constant?(:AttributeRef)
checks (#13162, thanks @HertzDevil) - Refactor
LLVM::Attribute#each_kind
to useEnum#each
(#13234, thanks @straight-shoota)
- Fix socket specs when network not available (#12961, thanks @straight-shoota)
- Fix wrong default address when binding sockets (#13006, thanks @etra0)
- Clarify WebSocket documentation (#13096, thanks @j8r)
- Add
Socket::IPAddress#link_local?
(#13204, thanks @GeopJr) - Clean up
back\slash.txt
inHTTP::StaticFileHandler
specs (#12984, thanks @HertzDevil) - Add
MIME::Multipart.parse(HTTP::Client::Response, &)
(#12890, thanks @straight-shoota) - Replace
LibC.ntohs
andhtons
with native code (#13027, thanks @HertzDevil) - Add
OAuth2::Client#make_token_request
returning HTTP response (#12921, thanks @cyangle) - Use exhaustive case in
HTTP::WebSocket#run
(#13097, thanks @j8r) - Increase time drift for
HTTP::StaticFileHandler
's gzip check (#13138, thanks @HertzDevil) - OpenSSL: use Windows' system root certificate store (#13187, thanks @HertzDevil)
- Handle
Range
requests inHTTP::StaticFileHandler
(#12886, thanks @jgaskins, @straight-shoota) - Skip hostname spec if
hostname
command fails (#12987, thanks @Blacksmoke16) - Fix
Socket#tty?
tofalse
on Windows (#13175, thanks @Blacksmoke16) - Fix
HTTP::Server::Response#reset
forstatus_message
(#13282, thanks @straight-shoota)
- Define
Math.pw2ceil
for all integer types (#13127, thanks @HertzDevil) - Workaround for more
Int128
-and-float methods on Windows with LLVM 14+ (#13218, thanks @HertzDevil) - Fix
Int128
-and-float conversion overflow checks on Windows LLVM 14+ (#13222, thanks @HertzDevil) - Add
Char.to_i128
and.to_u128
(#12958, thanks @meatball133) - Docs: Add references to
Number
collection convenience constructors (#13020, thanks @straight-shoota) - Docs: Fix examples for
#byte_swap
with different int types (#13154, #13180, thanks @pan, @Blacksmoke16) - Make
BigRational.new(BigFloat)
exact (#13295, thanks @HertzDevil)
- Increase timeout for slow specs (#13043, thanks @straight-shoota)
- Use
Crystal::System.print_error
instead ofLibC.printf
(#13161, thanks @HertzDevil) - Windows: detect stack overflows on non-main
Fiber
s (#13220, thanks @HertzDevil) - Add missing require for
Crystal::ThreadLocalValue
(#13092, thanks @Sija)
- Remove obsolete error handling in
XPathContext
(#13038, thanks @straight-shoota) - Fix JSON, YAML
use_*_discriminator
for recursiveSerializable::Strict
types (#13238, thanks @HertzDevil) - Add more specs for
YAML::Any#[]
and#[]?
(#11646, thanks @straight-shoota) - Add
from_json
for 128-bit integers (#13041, thanks @straight-shoota) - Reduce JSON, YAML serializable test types (#13042, thanks @straight-shoota)
- Format spec results with pretty inspect (#11635, thanks @JamesGood626)
- Spec: Add
--color
option to spec runner (#12932, thanks @straight-shoota) - Add
Spec::Item#all_tags
(#12915, thanks @compumike)
- (breaking-change) Add full stub for Windows signals (#13131, thanks @HertzDevil)
- (breaking-change) Deprecate and internalize
Process.fork
(#12934, thanks @straight-shoota) - Fix
Process
spec to wait on started processes (#12941, thanks @straight-shoota) - Drop privileges in chroot spec (#13226, thanks @straight-shoota)
- Drop deprecated
from_winerror
overload forflock_*
(#13039, thanks @HertzDevil) - Add
Process.on_interrupt
(#13034, thanks @HertzDevil) - Add
Process::Status#to_s
and#inspect
(#13044, thanks @straight-shoota) - Add
graceful
parameter toProcess#terminate
(#13070, thanks @HertzDevil) - Add
Process::ExitReason
andProcess::Status#exit_reason
(#13052, thanks @HertzDevil) - Implement
File.tempfile
in Crystal (#12111, thanks @straight-shoota) System::User#name
: Fall back to#username
if unavailable (#13137, thanks @HertzDevil)- Implement
Process.ppid
on Windows (#13140, thanks @HertzDevil) - AArch64 Android support (#13065, thanks @HertzDevil)
- Windows 7 support (#11505, thanks @konovod)
- (breaking-change) Fix PCRE crashing on invalid UTF-8 (#13240, #13311, #13313, thanks @straight-shoota)
- (breaking-change) Switch default regex engine to PCRE2 (#12978, thanks @straight-shoota)
- (breaking-change) Add more members to
Regex::Options
(#13223, thanks @straight-shoota) - (breaking-change) Add
Regex::MatchOptions
(#13248, thanks @straight-shoota) - Fix PCRE2 implementation and tests (#13105, thanks @straight-shoota)
- Remove pending spec for
Path#drive
with IPv6 UNC host names (#13190, thanks @HertzDevil) - Remove
Regex::PCRE2#finalize
redefinition (#13309, thanks @HertzDevil) - Clarify behavior of strings with invalid UTF-8 byte sequences (#13314, thanks @HertzDevil)
- Refer to PCRE2 in
Regex
's summary (#13318, thanks @HertzDevil)
- Escape filenames when running
crystal spec
with multiple files (#12929, thanks @HertzDevil) - Handle ARM64 MSVC paths when cross-compiling on Windows (#13073, thanks @HertzDevil)
- Use relative paths to vendored shards" (#13315, thanks @straight-shoota)
- Always use 0 for offsets of lib / extern union members (#13305, thanks @HertzDevil)
- (breaking-change) Support LLVM 15 (#13173, thanks @HertzDevil)
- Remove obsolete functions from
llvm_ext.cc
(#13177, thanks @HertzDevil)
- Fix type names for generic instances with empty splat type vars (#13189, thanks @HertzDevil)
- Fix: Interpreter
value_to_bool
for module, generic module and generic module metaclass (#12920, thanks @asterite) - Fix redundant cast in interpreter (#12996, thanks @asterite)
- Dynamic library loader: search in
-L
directories before default ones (#13069, thanks @HertzDevil) - Simplify expectation of loader spec error messages (#12858, thanks @straight-shoota)
- Add support for 128-bit literals in the interpreter (#12859, thanks @straight-shoota)
- Fix interpreter
value_to_bool
forNoReturn
(#13290, thanks @straight-shoota)
- Fix
x @y
andx @@y
in def parameters wheny
is reserved (#12922, thanks @HertzDevil) - Disallow empty exponents in number literals (#12910, thanks @HertzDevil)
- Stricter checks for multiple assignment syntax (#12919, thanks @HertzDevil)
- Compiler: type declaration with initial value gets the value's type (#13025, thanks @asterite)
- Stricter checks for enum definitions (#12945, thanks @HertzDevil)
- Fix error handling in macro system method when execution fails (#12893, thanks @straight-shoota)
- Add comment for
LiteralExpander
select
(#12926, thanks @straight-shoota) - Improve locations of some AST nodes (#12933, thanks @straight-shoota)
- Refactor
SemanticVisitor
tighterrescue
scope inRequire
visitor (#12887, thanks @straight-shoota) - Add specs for regex literal expansion (#13253, thanks @straight-shoota)
- Fix Crystal tool cursor parsing for filenames containing
:
(#13129, thanks @HertzDevil)
- Formatter: fix end indent after comment inside begin (#12994, thanks @asterite)
- Parser: remove obsolete handling of
else
inside lib struct (#13028, thanks @HertzDevil) - Fix formatter empty array literal with comment on extra line (#12907, thanks @straight-shoota)
- Fix formatter comment on extra line at end of method args (#12908, thanks @straight-shoota)
- Fix formatter not merge consecutive but separated comment lines (#12909, thanks @straight-shoota)
- Formatter: add
(&)
to param-less yielding defs before comment line (#13126, thanks @HertzDevil) - Formatter: add
&
to yielding methods without a block parameter (#12951, thanks @HertzDevil) - Formatter: Add feature flag for
method_signature_yield
(#13215, thanks @straight-shoota) - Macro interpolation: add
&
to yieldingDef
s without a block parameter (#12952, thanks @HertzDevil)
- Fix
bin/crystal
print no error message whencrystal
is missing (#12981, thanks @straight-shoota) - Prevent infinitely recursive wrapper script (#11712, thanks @ThunderKey)
- Changelog helper: Report error from HTTP request (#13011, thanks @straight-shoota)
- Fix wrapper script to handle
CRYSTAL
variable pointing to itself (#13032, thanks @straight-shoota) - Propagate exit code correctly in Windows wrapper batch script (#13048, thanks @HertzDevil)
- Remove
__declspec(dllimport)
from Windows libiconv build (#13219, thanks @HertzDevil) - Update previous Crystal release - 1.7.0 (#12925, thanks @straight-shoota)
- [CI] Remove
verbose=1
intest_llvm
(#12931, thanks @straight-shoota) - Missing quotes in Wrapper Script (#12955, thanks @stellarpower)
- Makefile: refactor test recipe (#12979, thanks @straight-shoota)
- Merge release branch for 1.7 into master (#12998, thanks @straight-shoota)
- Update previous Crystal release - 1.7.2 (#13001, thanks @straight-shoota)
- Update distribution-scripts (#13051, #13068, #13188, #13213, #13298, thanks @straight-shoota)
- [CI] Use Ubuntu 22.04 base image for LLVM tests (#13035, thanks @straight-shoota)
- Add instructions for other repos to pre-commit hook (#10535, thanks @straight-shoota)
- Makefile: Add
./scripts
toformat
recipe (#13064, thanks @straight-shoota) - Crystal wrapper script enhancements (#12959, thanks @j8r)
- Fix sed command in
scripts/update-distribution-scripts.cr
(#13071, thanks @straight-shoota) - Update GH Actions (#13075, #13132, thanks @renovate)
- CI: Enable testing with
libpcre2
on wasm32 (#13109, thanks @lbguilherme) - Build the compiler with PCRE2 (#13084, #13133, thanks @straight-shoota)
- Prefer matching
llvm-config
infind-llvm-config
(#13087, thanks @straight-shoota) - (performance) Run compiler specs in release mode (#13122, thanks @straight-shoota)
- [CI] Increase
no_output_timeout
on circleci (#13151, thanks @straight-shoota) - Update NOTICE.md (#13159, thanks @HertzDevil)
- Merge
release/1.7
@1.7.3 (#13168, thanks @straight-shoota) - [CI] Cancel in-progress jobs when another commit is pushed (#13179, thanks @Blacksmoke16)
- Mute shell comments in Makefile (#13201, thanks @straight-shoota)
- Update previous Crystal release - 1.7.3 (#13167, thanks @straight-shoota)
- [CI] Remove cross-compiliation on Windows (#13207, thanks @straight-shoota)
- [CI] Increase
no_output_timeout
on circleci (cont.) (#13185, thanks @straight-shoota) - [CI] Update Windows job to LLVM 15 (#13208, thanks @straight-shoota)
- Clean up
.gitignore
(#13241, thanks @straight-shoota) - [CI] Extract LLVM tests in separate workflow (#13246, thanks @straight-shoota)
- [CI] Extract interpreter workflow and split
std_spec
execution (#13267, thanks @straight-shoota) - Avoid
test.cr
in root of repo conflicting with parser warning specs (#13259, thanks @Blacksmoke16) - Fix
bin/crystal
in symlink working directory (#13281, thanks @straight-shoota) - Fix
bin/crystal
when no globalcrystal
command is installed (#13286, thanks @straight-shoota) - Makefile: Add
interpreter_spec
(#13251, thanks @straight-shoota) - Makefile: Add
all
target as default before includingMakfile.local
(#13276, thanks @straight-shoota) - Update shards 0.17.3 (#13296, thanks @straight-shoota)
- Do not match expectations outside specs (#13079, thanks @HertzDevil)
- Enable or fix specs that already work on Windows (#13186, thanks @HertzDevil)
1.7.3 - 2023-03-07
- Do not use
@[ThreadLocal]
for PCRE2's JIT stack (#13056, thanks @HertzDevil) - Fix
libpcre2
bindings with arch-dependent types (SizeT
) (#13088, thanks @straight-shoota) - Fix
libpcre2
bindings function pointers (#13090, thanks @straight-shoota) - Fix PCRE2 do not allocate JIT stack if unavailable (#13100, thanks @straight-shoota)
- Backport PCRE2 fixes to 1.7 (#13136, thanks @straight-shoota)
- Fix
MatchData#[]
named capture with identical prefix (#13147, thanks @straight-shoota) - Fix
Regex::Option
behaviour for unnamed members (#13155, thanks @straight-shoota) - (performance) Improve PCRE2 match performance for JIT and interpreted (#13146, thanks @straight-shoota)
- Explicitly treat unbound type vars in generic class methods as free variables (#13125, thanks @HertzDevil)
- [CI] Fix add PCRE2 to GHA cache for win job (#13089, thanks @straight-shoota)
- [CI] Pin
use_pcre
in build environments where PCRE2 is not yet available (#13102, thanks @straight-shoota)
1.7.2 - 2023-01-23
- Fix: Add
Nil
return type restrictions toload_debug_info
(#12992, thanks @straight-shoota)
- Add error handling to compiler when linker is unavailable (#12899, thanks @straight-shoota)
- Revert "Parser: Fix restrict grammar for name and supertype in type def (#12622)" (#12977, thanks @straight-shoota)
- Update
VERSION
to1.7.2-dev
(#12993, thanks @straight-shoota)
1.7.1 - 2023-01-17
- Fix baked-in path in playground to resolve at runtime (#12948, thanks @straight-shoota)
- Update
VERSION
to 1.7.1-dev (#12950, thanks @straight-shoota)
1.7.0 - 2023-01-09
- Add lib functions earlier so that they are visible in top-level macros (#12848, thanks @asterite)
- Improve
Benchmark
docs (#12782, thanks @r00ster91, @straight-shoota) - Improve documentation for
Object#to_s
and#inspect
(#9974, thanks @straight-shoota) - Add methods to manipulate semantic versions (#12834, thanks @gabriel-ss)
- Add types to methods with defaults (#12837, thanks @caspiano)
- examples: fix (2022-10) (#12665, thanks @maiha)
- Fix documentation for
Pointer#move_to
(#12677, thanks @TheEEs) - (performance) Eliminate
nil
from many predicate methods (#12702, thanks @HertzDevil) - examples: fix (2022-12) (#12870, thanks @maiha)
- Fix missed elements in
Hash#select!(keys : Enumerable)
(#12739, thanks @caspiano) - Add missing docs for
Indexable
combinations methods (#10548, thanks @keidax) - (performance) Optimize
Range#sample(n)
for integers and floats (#12535, thanks @straight-shoota) - Add
Iterable#each_cons_pair
(#12726, thanks @caspiano) - Add links to equivalent
Iterator
methods inIterable
(#12727, thanks @caspiano) - (performance) Optimize
Hash#select(Enumerable)
and#merge!(Hash, &)
(#12737, thanks @HertzDevil) - Add
Indexable#rindex!
method variant (#12759, thanks @Sija) - (performance) Use mutating collection methods (#12644, thanks @caspiano)
- Fix
Enum#to_s
for flag enum containing named and unnamed members (#12895, thanks @straight-shoota)
- Allow the EventLoop implementation to be detected at runtime (#12656, thanks @lbguilherme)
- (performance) Optimize uniqueness filter in
Channel.select_impl
(#12814, thanks @straight-shoota) - Implement multithreading primitives on Windows (#11647, thanks @HertzDevil)
- (breaking-change) Implement
Digest
class inDigest::CRC32
andDigest::Adler32
(#11535, thanks @BlobCodes) - Fix
OpenSSL::SSL::Context::Client#alpn_protocol=
(#12724, thanks @jaclarke) - Fix
HTTP::Client
certificate validation error on FQDN (host with trailing dot) (#12778, thanks @compumike) - Enable
arc4random(3)
on all supported BSDs and macOS/Darwin (#12608, thanks @dmgk)
- Fix: Read
UInt
in zip directory header (#12822, thanks @pbrumm) - Add
File.executable?
for Windows (#9677, thanks @nof1000)
- Fix
TypeNode#nilable?
for root types (#12354, thanks @HertzDevil) - Add argless
#annotations
overload (#9326, thanks @Blacksmoke16) - Add specs for addition between
ArrayLiteral
andTupleLiteral
(#12639, thanks @caspiano) - Add
ArrayLiteral#-(other)
andTupleLiteral#-(other)
(#12646, #12916 thanks @caspiano, @straight-shoota)
- (breaking-change) Add
HTTP::Headers#serialize
(#12765, thanks @straight-shoota) - Ensure
HTTP::Client
closes response when breaking out of block (#12749, thanks @straight-shoota) - Add
HTTP::Server::Response#redirect
(#12526, thanks @straight-shoota) - (performance) Websocket: write masked data to temporary buffer before sending it (#12613, thanks @asterite)
- Validate cookie name prefixes (#10648, thanks @Blacksmoke16)
IPAddress#loopback?
should consider::ffff:127.0.0.1/104
loopback too (#12783, thanks @carlhoerberg)
- Support new SI prefixes in
Number#humanize
(#12761, thanks @HertzDevil) - Fix
BigInt#%
for unsigned integers (#12773, thanks @straight-shoota) - [WASM] Add missing
__powisf2
and__powidf2
compiler-rt functions (#12569, thanks @lbguilherme) - Add docs for
Int#downto
(#12468, thanks @yb66) - Upgrade the Dragonbox algorithm (#12767, thanks @HertzDevil)
- Support scientific notation in
BigDecimal#to_s
(#10805, thanks @HertzDevil) - Add
#bit_reverse
and#byte_swap
for primitive integers (#12865, thanks @HertzDevil) - Fix Number comparison operator docs (#12880, thanks @fdocr)
Exception::CallStack
: avoid allocations inLibC.dl_iterate_phdr
(#12625, thanks @dmgk)- Fix explicit type conversion to u64 for
GC::Stats
(#12779, thanks @straight-shoota) - Add custom
message
parameter to#not_nil!
(#12797, thanks @straight-shoota) - Refactor specs for
Enum#to_s
usingassert_prints
(#12882, thanks @straight-shoota)
- (performance) Leverage
GC.malloc_atomic
for XML (#12692, thanks @HertzDevil) - Refactor libXML error handling to remove global state (#12663, #12795, thanks @straight-shoota)
- Use qualified type reference
YAML::Any
(#12688, thanks @zw963) - Automatically cast Int to Float for
{JSON,YAML}::Any#as_f
(#12835, thanks @compumike)
- Print seed info at start and end of spec output (#12755, thanks @straight-shoota)
- (breaking) Rename
File.real_path
to.realpath
(#12552, thanks @straight-shoota) - (breaking-change) Drop FreeBSD 11 compatibility code (#12612, thanks @dmgk)
- Trap when trying to raise wasm32 exceptions (#12572, thanks @lbguilherme)
- Use single helper method to pass UTF-16 strings to Windows (#12695, #12747, thanks @HertzDevil, @straight-shoota)
- Implement
flock_*
fiber-aware, without blocking the thread (#12861, #12728, thanks @straight-shoota) - Implement
flock_*
for Win32 (#12766, thanks @straight-shoota) - Add docs to
ENV#has_key?
(#12781, thanks @straight-shoota) - Improve specs by removing absolute path references (#12776, thanks @straight-shoota)
- Update FreeBSD LibC types (#12651, thanks @dmgk)
- Organize
Process
specs (#12889, thanks @straight-shoota) - Add tests for
Process::Status
(#12881, thanks @straight-shoota)
- Raise
IndexError
on unmatched subpattern forMatchData#begin
and#end
(#12810, thanks @straight-shoota) - Swap documentation for
String#split
array and block versions (#12808, thanks @hugopl) - Add
String#index/rindex!
methods (#12730, thanks @Sija) - Re-organize and enhance specs for
Regex
andRegex::MatchData
(#12788, #12789, thanks @straight-shoota) - Add missing positive spec for
Regex#match
with option (#12804, thanks @straight-shoota) - Replace
if !blank?
withunless blank?
(#12800, thanks @vlazar) - Add references between String equality, comparison methods (#10531, thanks @straight-shoota)
- Extract internal Regex API for PCRE backend (#12802, thanks @straight-shoota)
- Implement
Regex
engine on PCRE2 (#12856, #12866, #12847, thanks @straight-shoota, thanks @HertzDevil) - Add missing overloads for
String#byte_slice
(#12809, thanks @straight-shoota)
- Improve error message when there are extra types (#12734, thanks @asterite)
- Handle triples without libc (#12594, thanks @GeopJr)
- Remove unused
Program#cache_dir
property (#12669, thanks @straight-shoota) - Fix: Unwrap nested errors in error handler for
Crystal::Error
(#12888, thanks @straight-shoota)
- Add missing specs for
->var.foo
semantics with assignments (#9419, thanks @makenowjust) - Use
File#flock_exclusive
on win32 in compiler (#12876, thanks @straight-shoota)
- Redefine defs when constant and number in generic arguments are equal (#12785, thanks @HertzDevil)
- Fix restriction of numeral generic argument against non-free variable
Path
(#12784, thanks @HertzDevil)
- Interpreter: fix class var initializer that needs an upcast (#12635, thanks @asterite)
- Reverting #12405 Compiler: don't always use Array for node dependencies and observers (#12849, thanks @beta-ziliani)
- Match Nix loader errors in compiler spec (#12852, thanks @bcardiff)
- Interpreter reply (#12738, thanks @I3oris)
- (breaking-change) Parser: Fix restrict grammar for name and supertype in type def (#12622, thanks @caspiano)
- Lexer: fix global capture vars ending with zero, e.g.
$10?
(#12701, thanks @FnControlOption) - Lexer: allow regex after CRLF (#12713, thanks @FnControlOption)
- Assignment to global regex match data is not allowed (#12714, thanks @caspiano)
- Error when declaring a constant within another constant declaration (#12566, thanks @caspiano)
- Fix calls with do-end blocks within index operators (#12824, thanks @caspiano)
- Remove oct/bin floating point literals (#12687, thanks @BlobCodes)
- Parser: fix wrong/missing locations of various AST nodes (#11798, thanks @FnControlOption)
- Refactor: use helper method instead of duplicate code in lexer (#12590, thanks @straight-shoota)
- Simplify sequential character checks in Crystal lexer (#12699, thanks @caspiano)
- Lexer: delete redundant
scan_ident
calls (#12691, thanks @FnControlOption) - Rename
Def#yields
toDef#block_arity
(#12833, thanks @straight-shoota) - Fix warning on space before colon with anonymous block arg (#12869, thanks @straight-shoota)
- Warn on missing space before colon in type declaration/restriction (#12740, thanks @straight-shoota)
- Fix: Do not merge union types in truthy filter (#12752, thanks @straight-shoota)
- Fix crash when using
sizeof
,instance_sizeof
, oroffsetof
as a type arg (#12577, thanks @keidax) - Resolve type of free variable on block return type mismatch (#12754, thanks @caspiano)
- Order
_
after any otherPath
when comparing overloads (#12855, thanks @HertzDevil) - [Experimental] Compiler: try to solve string interpolation exps at compile time (#12524, thanks @asterite)
- Support
@[Deprecated]
onannotation
(#12557, thanks @caspiano) - Add more specific error message for uninstantiated proc type (#11219, thanks @straight-shoota)
- Add specs for
system
macro method (#12885, thanks @straight-shoota)
- Fix range literals causing method lookups in docs generator (#12680, thanks @caspiano)
- Fix method lookup for single char class names (#12683, thanks @caspiano)
- Formatter: document stdin filename argument (
-
) (#12620, thanks @caspiano)
- [CI] Drop Alpine libreSSL 3.1 test (#12641, thanks @straight-shoota)
- Bump version to 1.7.0-dev (#12640, thanks @straight-shoota)
- [CI] Update GHA actions (#12501, thanks @straight-shoota)
- Opt in to new overload ordering behavior in Makefile (#12703, thanks @HertzDevil)
- Merge release 1.6.2 into master (#12719, thanks @beta-ziliani)
- Configure Renovate (#12678, thanks @renovate)
- [CI] Add version pin for ilammy/msvc-dev-cmd in windows CI (#12746, thanks @straight-shoota)
- [CI] Update dependencies for windows CI (#12745, thanks @straight-shoota)
- Update GH Actions (#12742, thanks @renovate)
- [CI] Run specs in random order by default (#12541, thanks @straight-shoota)
- Update
shell.nix
for newer LLVM versions and aarch64-darwin (#12591, thanks @HertzDevil) - Update previous Crystal release - 1.6.2 (#12750, thanks @straight-shoota)
- [CI] Update PCRE 8.45 for Windows CI (#12762, thanks @HertzDevil)
- Add WebAssembly specs (#12571, thanks @lbguilherme)
- Update actions/checkout action to v3 (#12805, thanks @renovate)
- Enable multithreading specs on Windows CI (#12843, thanks @HertzDevil)
- [CI] Update mwilliamson/setup-wasmtime-action action to v2 (#12864, thanks @renovate)
- [CI] Update distribution-scripts (#12891, thanks @straight-shoota)
- [CI] Update shards 0.17.2 (#12875, thanks @straight-shoota)
- Rotate breached credentials in CircleCI (#12902, thanks @matiasgarciaisaia)
- Update
NOTICE.md
(#12901, thanks @HertzDevil) - Split pre-1.0 changelog (#12898, thanks @straight-shoota)
- Style: Remove redundant begin blocks (#12638, thanks @caspiano)
- Lint: Fix variable name casing (#12674, thanks @Sija)
- Lint: Remove comparisons with boolean literals (#12673, thanks @Sija)
- Lint: Use
Object#in?
instead of multiple comparisons (#12675, thanks @Sija) - Lint: Remove useless assignments (#12648, thanks @Sija)
- Use
Object#in?
in place of multiple comparisons (#12700, thanks @caspiano) - Style: Remove explicit returns from the codebase (#12637, thanks @caspiano)
- Lint: Use
Enumerable#find!/#index!
variants (#12686, thanks @Sija) - Style: Use short block notation for simple one-liners (#12676, thanks @Sija)
- Couple of ameba lint issues fixed (#12685, thanks @Sija)
- Use context-specific heredoc deliminators (#12816, thanks @straight-shoota)
1.6.2 - 2022-11-03
- Fix
VirtualMetaclassType#implements?
to ignore base type (#12632, thanks @straight-shoota)
- Compiler: handle yield expressions without a type (#12679, thanks @asterite)
- Partial revert "Compiler: refactor and slightly optimize merging two types (#12436)" (#12709, thanks @caspiano)
- Compiler: ignore type filters when accepting cast for
obj
andto
(#12668, thanks @asterite)
- (security) CI: Update to OpenSSL 3.0.7 for bundled lib on Windows (#12712, thanks @beta-ziliani)
1.6.1 - 2022-10-21
- 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)
- Treat single splats with same restriction as equivalent (#12584, thanks @HertzDevil)
- Formatter: escape backslashes in macro literals when subformatting (#12582, thanks @asterite)
- Fix origin validation in playground server for localhost (#12599, thanks @straight-shoota)
- 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)
1.6.0 - 2022-10-06
- Add 'wasm_import_module' option to the
@[Link]
annotation (#11935, thanks @lbguilherme)
- 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)
- 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)
- Fix fiber clean loop on Windows (#12300, thanks @HertzDevil)
- Enable
Mutex
on Windows (#12213, thanks @HertzDevil)
- Add support for Bcrypt algorithm version 2y (#12447, thanks @docelic)
- Allow using
U/Int128
inRandom
(#11977, thanks @BlobCodes)
- (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)
- Enhance
record
documentation (#12334, thanks @straight-shoota)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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: 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)
- Basic GDB formatter support (#12209, thanks @HertzDevil)
- Add Visual Studio formatters for
String
,Array
, andHash
(#12212, thanks @HertzDevil)
- 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)
- 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)
- (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)
- Fix docs generator search constants id (#12262, thanks @GeopJr)
- Formatter: format comment after select (#12506, thanks @asterite)
- Formatter: try to format macros that don't interpolate content (#12378, thanks @asterite)
- 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)
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)
1.5.1 - 2022-09-07
- Fix
Class#nilable?
for recursive unions and root types (#12353, thanks @HertzDevil)
- Fix
Float#abs
andNumber#format
for-0.0
(#12424, thanks @straight-shoota)
- Fix null dereference when passing empty slice to
Base64.encode
(#12377, thanks @dscottboggs)
- Do not check abstract def parameter names on abstract types and modules (#12434, thanks @HertzDevil)
- Compiler/codegen: reset
@needs_value
(#12444, thanks @asterite) - Fix
homogeneous_aggregate?
check for aarch64 types (#12445, thanks @mattrberry)
- Compiler: don't eagerly check cast type (#12272, thanks @asterite)
- Fix type restriction augmenter for
Union(*T)
and similar (#12438, thanks @asterite)
- Formatter: Fix assign followed by comment (#12319, thanks @straight-shoota)
- Handle formatting annotated method parameters (#12446, thanks @Blacksmoke16)
- Update distribution-scripts (#12359, thanks @straight-shoota)
- Update distribution-scripts (#12333, thanks @straight-shoota)
- [CI] Bumping xcode to 13.4.1 (#12264, thanks @beta-ziliani)
1.5.0 - 2022-07-06
- (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)
- 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)
- 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)
- 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)
- (performance) Add faster
Digest#hexfinal
(#9292, thanks @didactic-drunk) - Handle OpenSSL 3.0 KTLS ctrl calls (#12034, thanks @1player)
- 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)
- Change
Log
emitters to not emit event when block output isnil
(#12000, thanks @robacarp)
- 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)
- 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)
- Align
Spec::Be
,BeClose
failure message to other messages (#11946, thanks @jgaskins)
- (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)
- Mention
#value
explicitly inPointer
overview. (#12184, thanks @elebow)
- 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)
- Fix: Better error message for
Time.parse!
when end of input is reached (#12124, thanks @asterite)
- 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)
- Document
Crystal::Macros::Self
andUnderscore
(#12085, thanks @HertzDevil)
- Allow the empty instantiation
NamedTuple()
(#12009, thanks @HertzDevil)
- 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)
- (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)
- 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)
- Improve the LLDB spec driver script (#12119, thanks @HertzDevil)
- [Docs] Adjust method sort order to sort all operators first (#12104, thanks @straight-shoota)
- 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: fix
modalContenDom
typo (#12188, thanks @HertzDevil) - Fix: Unset executable bit from js/css files in playground (#12053, thanks @carlhoerberg)
- [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)
1.4.1 - 2022-04-22
- Avoid compile-time error on empty
NamedTuple
s. (#12007, thanks @I3oris)
- Add missing fun def for
__xstat
(#11985, thanks @straight-shoota)
- Add
pthread
link annotations in lib bindings (#12013, thanks @straight-shoota) - Fix GC typedefs on Windows (#11963, thanks @HertzDevil)
- Compiler: remove duplicate instance vars once we know them all (#11995, thanks @asterite)
1.4.0 - 2022-04-06
- 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)
- 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)
- 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)
- Add support for Bcrypt algorithm version
2b
(#11595, thanks @docelic)
- 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)
- Add
#parse_type
(#11126, thanks @Blacksmoke16)
- (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)
- (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)
- 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)
- 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)
- Add
file
andline
arguments toit_iterates
(#11628, thanks @straight-shoota) - Remove duplicate word in documentation (#11797, thanks @samueleaton)
- (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)
- 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)
- Add examples to
Time::Format
methods (#11713, thanks @ThunderKey) - Support day of year (
%j
) inTime
parsers (#11791, thanks @HertzDevil)
- 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)
- (performance) Codegen: Do not always request value for
Proc#call
(#11675, thanks @HertzDevil)
- Fix debug location of inlined
Proc#call
body (#11676, thanks @HertzDevil)
- Resolve non-type free variables in return type restrictions (#11861, thanks @HertzDevil)
- Fix recursive
pointerof
detection with generic splat type variables (#11811, thanks @HertzDevil)
- 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)
- 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)
- (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)
- Do not inherit from
Hash
in the compiler (#11707, thanks @HertzDevil) - Use
OptionParser
incrystal env
(#11720, thanks @HertzDevil)
- Replace PNG icon with optimized SVG for playground (#7616, thanks @straight-shoota)
- 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)
1.3.2 - 2022-01-18
- Fix buffer overflow in
String#index
(#11747, thanks @asterite, @straight-shoota)
1.3.1 - 2022-01-13
- Remove useless variable declarations in trailing position (#11704, thanks @HertzDevil)
- Fix for missing
BIO_*
functions in OpenSSL < 1.1.0 (#11736, thanks @daliborfilus)
- Remove string allocation from
GC_set_warn_proc
(#11729, thanks @straight-shoota)
- Doc generator: Fix escape HTML in code span (#11686, thanks @straight-shoota)
- Fix formatter error for
ProcLiteral
s withUnion
return type (#11709, thanks @HertzDevil)
- Fix typos (#11725, thanks @kianmeng)
1.3.0 - 2022-01-06
- 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) - 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)
- 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)
- Attach debug locations to auto-generated
initialize
methods (#11313, thanks @HertzDevil) - Fix debug location for
~check_proc_is_not_closure
(#11311, thanks @HertzDevil)
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
intrinsic 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: 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)
- 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) - 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)
- (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)
- 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)
- (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)
- 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)
- 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)
- Fix
LLVMExtDIBuilderCreateArrayType
argumentalignInBits
should beUInt64
(#11644, thanks @lbguilherme)
- Add
Log.with_context
with kwargs (#11517, thanks @caspiano) - Refactor
Log::BroadcastBackend#single_backend?
(#11530, thanks @straight-shoota)
- 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)
- 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 ephemeral port (#11407, thanks @rdp)- Fix
HTTP::Server::Response#close
when replaced output syncs close (#11631, thanks @straight-shoota)
- (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)
- 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)
- Parses JSON
UInt64
numbers. (#11395, thanks @hugopl) - Fix
YAML::Any
deserialize with alias (#11532, thanks @straight-shoota)
- Use enums instead of symbols for
Spec
-related types (#11585, thanks @HertzDevil)
- 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)
- 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)
- [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)
- 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)
1.2.2 - 2021-11-10
- x86_64 ABI: pass structs indirectly if there are no more available registers (#11344, thanks @ggiraldez)
- Add parentheses around type name for metaclasses of unions (#11315, thanks @HertzDevil)
- (regression) Restrict virtual metaclasses to themselves against
Class
(#11377, thanks @HertzDevil) - (regression) Add fallback for union debug type if current debug file is not set (#11390, thanks @maxfierke)
- (regression) Add missing debug locations to constant / class variable read calls (#11417, thanks @HertzDevil)
- Fix
BitArray#toggle
when toggling empty subrange (#11381, thanks @HertzDevil)
- Update for OpenSSL 3.0.0 (#11360, thanks @straight-shoota)
- Restore libressl support and add CI for that (#11400, thanks @straight-shoota)
- Replace lib version comparisons by functional feature checks (#11374, thanks @straight-shoota)
- Add support for DWARF 5 (#11399, thanks @straight-shoota)
- Retrieve filename of shared libs, use in stacktraces (#11408, thanks @rdp)
- [CI] Fix enable nix-command as experimental feature (#11398, thanks @straight-shoota)
- [CI] Fix OpenSSL 3 apk package name (#11418, thanks @straight-shoota)
- Update distribution-scripts (#11404, thanks @straight-shoota)
- [CI] Fix pcre download URL (#11422, thanks @straight-shoota)
1.2.1 - 2021-10-21
- Adding location to the Path returned by the literal expander for regex (#11334, thanks @beta-ziliani)
- Add support for LLVM 13 (#11302, thanks @maxfierke)
- Move the
:nodoc:
flags to the right place to hide the__mul*
functions. (#11326, thanks @wyhaines)
- Update markd subtree to v0.4.2 (#11338, thanks @straight-shoota)
1.2.0 - 2021-10-13
- 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)
- 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)
- (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)
- (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](crystal-lang#11267, #11308, thanks @caspiano, thanks @straight-shoota, thanks @HertzDevil, thanks @beta-ziliani, thanks @caspiano)
- (performance) Optimize
#rotate!
(#11198, thanks @HertzDevil)
- 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)
- (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)
- (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)
- (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)
- Extract
libunwind
from callstack (#11205, thanks @straight-shoota)
- (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)
- 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)
- SystemError: Fix inconsistent signature. (#11002, thanks @yxhuvud)
- (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)
- 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)
- 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)
1.1.1 - 2021-07-26
- Revert name of top-level module to
main
(#10993, thanks @beta-ziliani)
- Fix missing required args for
Socket::Addrinfo::Error.new
(#10960, thanks @straight-shoota) - Fix disable unnecessary spec on win32 (#10971, thanks @straight-shoota)
- Remove incorrect type restrictions on index methods with offset (#10972, thanks @straight-shoota)
- Fix: documentation of
#step
inNumber
andChar
(#10966, #11006, thanks @beta-ziliani and @straight-shoota)
- Fix parsing macro body with escaped backslash in literal (#10995, thanks @straight-shoota)
- Updating aarch64 actions to use 1.0.0 images (#10976, thanks @beta-ziliani)
1.1.0 - 2021-07-14
- Support splat expansions inside tuple and array literals. (#10429, thanks @HertzDevil)
- Support breaks with values inside
while
expressions. (#10566, thanks @HertzDevil)
- Add
@top_level
to access the top-level scope in macros. (#10682, thanks @beta-ziliani) - Fix: preserve integer sizes in
NumberLiteral#int_bin_op
. (#10713, thanks @collidedscope) - Add
NumberLiteral#to_number
. (#10802, thanks @straight-shoota) - (breaking-change) Add
Crystal::Macros::Path#global?
deprecating the oldCrystal::Macros::Path#global
. (#10812, thanks @HertzDevil) - Minor fixes to docs of
UnaryExpression
macro nodes. (#10816, thanks @HertzDevil) - Add macro method
ASTNode#nil?
. (#10850, #10616, thanks @straight-shoota)
- Port
Socket::Address
to win32 . (#10610, thanks @straight-shoota) - Port
Socket::Addrinfo
to win32. (#10650, thanks @straight-shoota) - Extract system-specifics from Socket. (#10706, thanks @straight-shoota)
- Make
WinError
portable and add it to prelude. (#10725, thanks @straight-shoota) - Improve portability of
SystemError
. (#10726, thanks @straight-shoota) - Refactor
Socket::Addrinfo::Error
based onos_error
. (#10761, thanks @straight-shoota) - Add
WinError.wsa_value
and specs forWinError
. (#10762, thanks @straight-shoota) - Add specs for
Errno
. (#10763, thanks @straight-shoota) - Refactor: Move win32 libc bindings from
winbase.cr
to appropriate files. (#10771, thanks @straight-shoota) - Refactor: Change protocol socket fd to
Socket::Handle
. (#10772, thanks @straight-shoota) - Fix
Socket::Connect
error in addrinfo inheritos_error
. (#10782, thanks @straight-shoota) - Reorganize some win32 libc bindings (#10776, thanks @straight-shoota)
- Add type restriction to private
Process
constructor. (#7040, thanks @z64) - Add various return type restrictions (thanks @oprypin, @straight-shoota, and @caspiano): #10578, #10579, #10580, #10581, #10582, #10583, #10584, #10585, #10586, #10587, #10588, #10849, #10856, #10857, #10858, #10905
- Add type restrictions for splat-less overloads of some methods. (#10594, thanks @HertzDevil)
- Add
Number.new
overload forString
. (#10422, thanks @Blacksmoke16) - Fix
Math.pw2ceil
for zero and 64-bit integers. (#10555, thanks @straight-shoota) - Add
#positive?
&#negative?
toNumber
andTime::Span
. (#10601, thanks @Blacksmoke16) - Fix imprecise
Number#significant
algorithm. (#10615, thanks @straight-shoota) - Add
BigFloat
's rounding modes. (#10618, thanks @HertzDevil) - Fix handling of arithmetic overflow in
BigDecimal#div
. (#10628, thanks @kellydanma) - Clarify behaviour of unsafe
Float
-to-number conversions. (#10631, thanks @HertzDevil) - Fix return type restriction for
Number#humanize
overload. (#10633, thanks @HertzDevil) - Fix
printf
float with many digits. (#10719, thanks @straight-shoota) - Add
BigDecimal
's missing rounding modes. (#10798, thanks @HertzDevil) - Add support for using big rational
#**
with unsigned ints. (#10887, thanks @stakach) - Add overflow detection to
BigFloat#to_i64
and#to_u64
. (#10630, thanks @HertzDevil)
- (performance) Optimize
Levenshtein.distance
. (#8324, thanks @r00ster91) - Refactor: add private
Slice#hexdump(io : IO)
overload. (#10496, thanks @HertzDevil) - Restrict
MatchData#begin
and#end
toInt32
. (#10656, thanks @straight-shoota) - Refactor: remove
#check_needs_resize
fromIO::Memory
,String::Builder
. (#10732, thanks @straight-shoota) - Fix
Base64#encode
, exclude last 3 bytes from bswap. (#10752, thanks @kostya) - Refactor: avoid union type in
Char::Reader#decode_char_at
. (#10758, thanks @asterite)
- Add sub/superset checking methods to
Hash
. (#7500, thanks @Sija) - Improve documentation of
Array#[](Range)
. (#10243, thanks @straight-shoota) - Add
Steppable
module as generalizedNumber#step
. (#10279, thanks @straight-shoota) - Add docs for
#map_with_index
. (#10512, thanks @wontruefree) - Add
Array#truncate
. (#10712, thanks @HertzDevil) - Fix: Always copy
Hash
's default block on#dup
and#clone
. (#10744, thanks @HertzDevil) - Apply
Array#push
's resizing heuristic to#unshift
. (#10750, thanks @HertzDevil) - Refactor index / count normalization in range-like methods. (#10753, thanks @HertzDevil)
- Add methods for cumulative folding and prefix sums. (#10789, thanks @HertzDevil)
- Fix: Pass read-only flag to peeked slice in
IO::Memory
. (#10891, thanks @z64)
- Add methods for getting peer certificates and signatures in
OpenSSL
. (#8005, thanks @will) - Add docs for
OpenSSL::Cipher
. (#9934, thanks @sol-vin) - Fix format of
src/openssl/cipher.cr
. (#10705, thanks @straight-shoota) - Refine documentation for
Random#urlsafe_base64
. (#10724, thanks @straight-shoota) - Fix ssl context required for
add_x509_verify_flags
. (#10756, thanks @stakach)
- Improve error handling for
load_localtime
on unix. (#10654, thanks @straight-shoota) - Fix broken call to
Time#to_s
. (#10778, thanks @straight-shoota) - Fix
Time#shift
cover date boundaries with zone offset. (#10871, thanks @straight-shoota)
- Fix and unify documentation for
puts
. (#10614, thanks @straight-shoota) - Fix
Path#sibling
return type. (#10655, thanks @Sija) - Add
Path
inFileUtils
's methods to match the interfaces it's wrapping. (#10747, thanks @yb66) - Fix
FileDescriptor#pos
returnInt64
on armv6 (#10845, thanks @straight-shoota)
- Clarify documentation on
Path#join
and#==
. (#10455, thanks @straight-shoota)
- Add an example middleware for
remote_address
. (#10408, thanks @oprypin) - Add
OAuth2::Client#http_client
. (#10452, thanks @straight-shoota) - Fix undefined constant error for
http/params
. (#10537, thanks @stakach) - Fix looping forever at 100% CPU if socket is closed. (#10658, thanks @didactic-drunk)
- Fix documentation of
HTTP::Cookies#[]=
empty path. (#10669, thanks @straight-shoota) - Fix handling of
EAI_SYSTEM
forgetaddrinfo
. (#10757, thanks @straight-shoota) - (performance) Cache
socket.local_address
andsocket.remote_address
. (#10765, thanks @lbguilherme) - Fix:
IO::ARGF#read
should always returni32
. (#10828, thanks @stakach) - Fix
HTTP::Cookie
parse quoted cookie value. (#10853, thanks @straight-shoota) - Add
Socket::Addrinfo#inspect
(#10775, thanks @straight-shoota)
- Fix sentence structure in
process.cr
. (#9259, thanks @matthewmcgarvey)
- Implement segfault handler in Crystal. (#10463, thanks @maxfierke)
- Improve documentation for
Pointer.malloc
andGC
methods. (#10644, thanks @straight-shoota) - Add links to literal types in the language reference. (#10827, thanks @straight-shoota)
- Add docs for some json methods. (#10257, thanks @rdp)
- Add
UUID.from_json_object_key?
. (#10517, thanks @kalinon) - Fix
JSON::Lexer
's UTF-16 escape sequence parsing. (#10450, thanks @HertzDevil) - Fix
YAML::Serializable.use_yaml_discriminator
with typed enum. (#10460, thanks @straight-shoota) - Fix YAML to not parse empty string as
nil
. (#10608, thanks @straight-shoota) - Add
UUID
to yaml parsing. (#10715, thanks @kalinon) - Fix double flushing json/yaml builders. (#10716, thanks @matthewmcgarvey)
- Add spec helper
it_iterates
for iteration methods. (#10158, #10797, thanks @straight-shoota) - Add usage instructions for spec runner to compiler. (#10046, thanks @straight-shoota)
- Fix: Handle invalid option errors on
crystal spec
. (#10787, thanks @hugopl) - Include
spec/**
in docs_main. (#10863, thanks @straight-shoota)
- Add support for type var splats inside
Tuple
during generic parameter substitution. (#10232, thanks @HertzDevil) - Fix: consider free vars in parameters of abstract def implementations before existing types, in particular fixing the creation of empty types. (#10503, thanks @HertzDevil)
- Replace
Crystal::Type#covariant?
with#implements?
(#10507, thanks @HertzDevil) - Fix error message when default parameter value doesn't match non-type restriction. (#10515, thanks @HertzDevil)
- Fix type restriction logic for generic module instances. (#10519, thanks @HertzDevil)
- Fix logic for subclass restricted against uninstantiated nested generic superclass. (#10522, #10560, thanks @HertzDevil)
- Fix: eliminate extraneous types in certain non-commutative unions. (#10527, thanks @HertzDevil)
- Fix: exclude variables' final types inside
while true
if re-assigned before first break. (#10538, thanks @HertzDevil) - Make
Pointer(T)#value=
even stricter for generic arguments. (#10553, thanks @HertzDevil) - Fix body locations for def nodes that have default args . (#10619, thanks @oprypin)
- Fix call nodes' location after transforming its splats. (#10620, thanks @oprypin)
- Fix
check_type_allowed_as_proc_argument
to show the type name. (#10688, thanks @straight-shoota) - Add free variables to "no overload matches" errors. (#10692, thanks @HertzDevil)
- Fix: make virtual unbound types also unbound. (#10704, thanks @HertzDevil)
- Fix: run instance variable initializers on instantiated generic superclasses only. (#10729, thanks @HertzDevil)
- Fix: allow
previous_def
to init superclass's non-nilable ivars. (#10733, thanks @HertzDevil) - Fix: Use only last sub-expression of
Expressions
nodes for conditional type filters. (#10738, thanks @HertzDevil) - Fix: Don't compute type filters inside
typeof
's argument. (#10739, thanks @HertzDevil) - Fix: Devirtualize types in
TypeNode#==(other : TypeNode)
and#!=
. (#10742, thanks @HertzDevil) - Fix exit types of variables assigned inside
while
conditions. (#10759, thanks @HertzDevil) - Fix logic for
responds_to?
of generic module instances. (#10760, thanks @HertzDevil) - Add support for accessing a common value of a union type. (#10770, thanks @asterite)
- Fix subtype relation when generic type variable is a virtual abstract struct. (#10779, thanks @HertzDevil)
- Fix array literals consisting entirely of splat expansions. (#10792, thanks @HertzDevil)
- Fix parsing macro literal containing char literal. (#10799, thanks @straight-shoota)
- Refactor: Use type instead of
is_a?
in filters. (#10815, thanks @caspiano) - Expand named macro expression arguments before outer macro call expansion. (#10819, thanks @HertzDevil)
- Be more strict about printing operator calls as short forms. (#10825, thanks @HertzDevil)
- Fix union logic between metaclasses of uninstantiated generic classes in same hierarchy. (#10832, thanks @HertzDevil)
- Fix uninstantiated generic classes casting to themselves. (#10883, thanks @HertzDevil)
- Allow underscore in block return type even if the type can't be computed (#10933, thanks @asterite)
- Fix parser identifies call with named args as var (#10842, thanks @straight-shoota)
- Fix: allow trailing space in parenthesized unions. (#10595, thanks @HertzDevil)
- Fix: don't consume newline after endless range literals. (#10596, thanks @HertzDevil)
- Fix indentation of heredocs relative to delimiter. (#10806, thanks @HertzDevil)
- Fix heredoc indent with outer indent. (#10867, thanks @straight-shoota)
- Fix escaping of argument lists in doc generator, expose JSON. (#10109, #10821, thanks @oprypin and @Sija)
- Print named generic type arguments of type restrictions in docs. (#10424, thanks @HertzDevil)
- Fix: respect overload order between methods. (#10609, thanks @HertzDevil)
- Fix
PropagateDocVisitor
visit macro def. (#10634, thanks @straight-shoota) - Fix: remove superclass from
ASTNode
in API docs. (#10664, thanks @beta-ziliani) - (breaking-change) Remove deprecated
ditto
doc directive. (#10755, thanks @caspiano) (Note that it was scheduled for removal since 0.34) - Fix: Restrict macro types' ancestors to
ASTNode
. (#10722, thanks @HertzDevil) - Fix docs generator search use
html_id
. (#10875, thanks @straight-shoota) - Fix
--sitemap-priority
,--sitemap-changefreq
. (#10906, thanks @HertzDevil)
- CI: Update to use 1.0.0. (#10533, thanks @bcardiff)
- Bump distribution-scripts. (#10639, #10673, #10754, thanks @straight-shoota and @bcardiff)
- Fix contribution instructions. (#10558, thanks @straight-shoota)
- Remove
.dockerignore
. (#10642, thanks @miry) - Add section about pull requests to the contributing guide. (#10683, thanks @straight-shoota)
- Publish nightly builds to OBS. (#10684, thanks @straight-shoota)
- Remove broken travis.yml config from
crystal init
. (#10800, thanks @straight-shoota) - Disable broken
test_darwin
job on circleci. (#10823, thanks @straight-shoota) - Update distribution-scripts for shards 0.15.0. (#10862, thanks @straight-shoota)
- Add smoke tests for platforms where we don't run full tests (#10848, thanks @straight-shoota)
1.0.0 - 2021-03-22
- Support
Tuple#[](Range)
with compile-time range literals. (#10379, thanks @HertzDevil)
- Don't use named argument key names as parameters for
method_missing
calls. (#10388, thanks @HertzDevil)
- (breaking-change) Drop deprecated definitions. (#10386, thanks @bcardiff)
- Fix example codes in multiple places. (#10505, thanks @maiha)
- (breaking-change) Always add explicit return types in getter/property macros. (#10405, thanks @Sija)
- (breaking-change) Change default rounding mode to
TIES_EVEN
. (#10508, thanks @straight-shoota) - Fix downcasting float infinity. (#10420, thanks @straight-shoota)
- Fix
String#to_f
out of range behaviour. (#10425, thanks @straight-shoota) - Implement rounding mode for
Number#round
. (#10413, #10360, #10479, thanks @straight-shoota)
- Add missing unicode whitespace support to
String
methods. (#10367, thanks @straight-shoota)
- Fix
Range#==
to ignore generic type arguments. (#10309, thanks @straight-shoota) - Make
Enumerable#flat_map
,Iterator#flat_map
work with mixed element types. (#10329, thanks @HertzDevil) - Remove duplicated
sort
related specs. (#10208, thanks @MakeNowJust) - Fix docs regarding
Set#each
return type. (#10477, thanks @kachick) - Fix docs examples regarding
Set#*set_of?
. (#10285, thanks @oddp) - Fix expectation on set specs. (#10482, thanks @kachick)
- (breaking-change) Serialize
Enum
to underscoredString
by default. (#10431, thanks @straight-shoota, @caspiano) - (breaking-change) Use class instead of struct for types in XML module. (#10436, thanks @hugopl)
- Add
YAML::Nodes::Node#kind
. (#10432, thanks @straight-shoota)
- Let
IO::Memory
not be writable with read-onlySlice
. (#10391, thanks @straight-shoota) - Allow
Int64
values withinIO#read_at
. (#10356, thanks @Blacksmoke16) - Add
IO::Sized#remaining=(value)
to reuse an existing instance. (#10520, thanks @jgaskins)
- (security) Remove Cookie Name Decoding. (#10442, thanks @security-curious)
- (breaking-change) Remove implicit en-/decoding for cookie values. (#10485, thanks @straight-shoota)
- (breaking-change) Split
HTTP::Cookies.from_headers
into separate methods for server/client. (#10486, thanks @straight-shoota) - (performance) Minor performance improvements to
HTTP::Cookies
. (#10488, thanks @straight-shoota) - Respect subclasses when constructing
HTTP::Client
from class methods. (#10375, thanks @oprypin) - Make the
content-length
header more RFC compliant. (#10353, thanks @Blacksmoke16) - Fix
#respond_with_status
when headers written or closed. (#10415, thanks @straight-shoota) - Fix
Cookie#==
to take all ivars into account. (#10487, thanks @straight-shoota) - Remove implicit
path=/
fromHTTP::Cookie
. (#10491, thanks @straight-shoota) - Add
HTTP::Request#local_address
. (#10385, thanks @carlhoerberg)
- Close
AsyncDispatcher
on#finalize
. (#10390, thanks @straight-shoota)
- Fix
Process.parse_argument
behavior against a quote in a word. (#10337, thanks @MakeNowJust) - Add aarch64 support for macOS/darwin targets. (#10348, thanks @maxfierke, @RomainFranceschini)
- Add
LibC::MAP_ANONYMOUS
to x86_64-darwin to match other platforms. (#10398, thanks @sourgrasses)
- Improve error message for ELF reader on uninitialized runtime. (#10282, thanks @straight-shoota)
- (breaking-change) Disallow surrogate halves in escape sequences of string and character literals, use
\x
for arbitrary binary values. (#10443, thanks @HertzDevil) - Fix ICE when exhaustive in-clause calls pseudo-method. (#10382, thanks @HertzDevil)
- Fix ICE when parsing
foo.%
calls. (#10351, thanks @MakeNowJust) - Fix edge cases for symbol quoting rules. (#10389, thanks @HertzDevil)
- Support closured vars inside
Const
initializer. (#10478, thanks @RX14) - Documentation grammar fix. (#10369, thanks @szTheory)
- Don't fail on untyped
is_a?
. (#10320, thanks @asterite) - Fix named arguments in
super
andprevious_def
calls. (#10400, thanks @HertzDevil) - Fix assignments in array literals. (#10009, thanks @straight-shoota)
- Consider type var splats in generic type restrictions. (#10168, thanks @HertzDevil)
- Align
Proc.new(&block)
's behaviour with other captured blocks. (#10263, thanks @HertzDevil) - Don't merge
NamedTuple
metaclasses through instance types. (#10501, thanks @HertzDevil) - Access instantiations of
NamedTuple
and other generics uniformly. (#10401, thanks @HertzDevil) - Improve error message for auto-cast error at Var assign. (#10327, thanks @straight-shoota)
- Exclude abstract defs from "no overload matches" errors. (#10483, thanks @HertzDevil)
- Support splats inside tuple literals in type names. (#10430, thanks @HertzDevil)
- Accept pointer instance types on falsey conditional branches. (#10464, thanks @HertzDevil)
- Match named arguments by external parameter names when checking overload cover. (#10530, thanks @HertzDevil)
- Detect source locations in more situations. (#10439, thanks @oprypin)
- CI improvements and housekeeping. (#10299, #10340, #10476, #10480, thanks @bcardiff, @Sija, @straight-shoota)
- Update distribution-scripts to use Shards v0.14.1. (#10494, thanks @bcardiff)
- Add GitHub issue templates. (#8934, thanks @j8r)
- Add LLVM 11.1 to the list of supported versions. (#10523, thanks @Sija)
- Fix SDL examples crashes. (#10470, thanks @megatux)
Older entries in CHANGELOG.0.md