Language
- 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)
Standard Library
- 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)
Collection
- (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)
Concurrency
- 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)
Files
- (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)
LLVM
- (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)
Networking
- 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)
Numeric
- 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)
Runtime
- 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)
Serialization
- 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)
Specs
- 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)
System
- (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)
Text
- (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)
Compiler
- 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)
Debugger
- Always use 0 for offsets of lib / extern union members (#13305, thanks @HertzDevil)
Codegen
- (breaking-change) Support LLVM 15 (#13173, thanks @HertzDevil)
- Remove obsolete functions from
llvm_ext.cc
(#13177, thanks @HertzDevil)
Generics
- Fix type names for generic instances with empty splat type vars (#13189, thanks @HertzDevil)
Interpreter
- 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)
Parser
- 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)
Semantic
- 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)
Tools
- Fix Crystal tool cursor parsing for filenames containing
:
(#13129, thanks @HertzDevil)
Formatter
- 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)
Infrastructure
- 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)
Other
- Do not match expectations outside specs (#13079, thanks @HertzDevil)
- Enable or fix specs that already work on Windows (#13186, thanks @HertzDevil)