Releases
1.14.0
Features
lang
stdlib
Add support for Windows on aarch64 (#14911 , thanks @HertzDevil )
(collection) [breaking] Add support for negative start index in Slice#[start, count]
(#14778 , thanks @ysbaddaden )
(collection) Add Slice#same?
(#14728 , thanks @straight-shoota )
(concurrency) Add WaitGroup.wait
and WaitGroup#spawn
(#14837 , thanks @jgaskins )
(concurrency) Open non-blocking regular files as overlapped on Windows (#14921 , thanks @HertzDevil )
(concurrency) Support non-blocking File#read
and #write
on Windows (#14940 , thanks @HertzDevil )
(concurrency) Support non-blocking File#read_at
on Windows (#14958 , thanks @HertzDevil )
(concurrency) Support non-blocking Process.run
standard streams on Windows (#14941 , thanks @HertzDevil )
(concurrency) Support IO::FileDescriptor#flock_*
on non-blocking files on Windows (#14943 , thanks @HertzDevil )
(concurrency) Emulate non-blocking STDIN
console on Windows (#14947 , thanks @HertzDevil )
(concurrency) Async DNS resolution on Windows (#14979 , thanks @HertzDevil )
(crypto) Update LibCrypto
bindings for LibreSSL 3.5+ (#14872 , thanks @straight-shoota )
(llvm) Expose LLVM instruction builder for neg
and fneg
(#14774 , thanks @JarnaChao09 )
(llvm) [experimental] Add minimal LLVM OrcV2 bindings (#14887 , thanks @HertzDevil )
(llvm) Add LLVM::Builder#finalize
(#14892 , thanks @JarnaChao09 )
(llvm) Support LLVM 19.1 (#14842 , thanks @HertzDevil )
(macros) Add Crystal::Macros::TypeNode#has_inner_pointers?
(#14847 , thanks @HertzDevil )
(macros) Add HashLiteral#has_key?
and NamedTupleLiteral#has_key?
(#14890 , thanks @kamil-gwozdz )
(numeric) Implement floating-point manipulation functions for BigFloat
(#11007 , thanks @HertzDevil )
(runtime) Stop & start the world (undocumented API) (#14729 , thanks @ysbaddaden )
(runtime) Add Pointer::Appender#to_slice
(#14874 , thanks @straight-shoota )
(serialization) Add URI.from_json_object_key?
and URI#to_json_object_key
(#14834 , thanks @nobodywasishere )
(serialization) Add URI::Params::Serializable
(#14684 , thanks @Blacksmoke16 )
(system) Enable full backtrace for exception in process spawn (#14796 , thanks @straight-shoota )
(system) Implement System::User
on Windows (#14933 , thanks @HertzDevil )
(system) Implement System::Group
on Windows (#14945 , thanks @HertzDevil )
(system) Add methods to Crystal::EventLoop
(#14977 , thanks @ysbaddaden )
(text) Add underscore_to_space
option to String#titleize
(#14822 , thanks @Blacksmoke16 )
(text) Support Unicode 16.0.0 (#14997 , thanks @HertzDevil )
compiler
(cli) Adds initial support for external commands (#14953 , thanks @bcardiff )
(interpreter) Add Crystal::Repl::Value#runtime_type
(#14156 , thanks @bcardiff )
(interpreter) Implement Reference.pre_initialize
in the interpreter (#14968 , thanks @HertzDevil )
(interpreter) Enable the interpreter on Windows (#14964 , thanks @HertzDevil )
Bugfixes
lang
stdlib
(collection) Fix Range#size
return type to Int32
(#14588 , thanks @straight-shoota )
(concurrency) Update DeallocationStack
for Windows context switch (#15032 , thanks @HertzDevil )
(concurrency) Fix race condition in pthread_create
handle initialization (#15043 , thanks @HertzDevil )
(files) [regression] Fix File#truncate
and #lock
for Win32 append-mode files (#14706 , thanks @HertzDevil )
(files) [breaking] Avoid flush in finalizers for Socket
and IO::FileDescriptor
(#14882 , thanks @straight-shoota )
(files) Make IO::Buffered#buffer_size=
idempotent (#14855 , thanks @jgaskins )
(macros) Implement #sort_by
inside macros using Enumerable#sort_by
(#14895 , thanks @HertzDevil )
(macros) Fix internal error when calling #is_a?
on External
nodes (#14918 , thanks @HertzDevil )
(networking) Use correct timeout for Socket#connect
on Windows (#14961 , thanks @HertzDevil )
(numeric) Fix handle empty string in String#to_f(whitespace: false)
(#14902 , thanks @Blacksmoke16 )
(numeric) Fix exponent wrapping in Math.frexp(BigFloat)
for very large values (#14971 , thanks @HertzDevil )
(numeric) Fix exponent overflow in BigFloat#to_s
for very large values (#14982 , thanks @HertzDevil )
(numeric) Add missing @[Link(dll:)]
annotation to MPIR (#15003 , thanks @HertzDevil )
(runtime) Add missing return type of LibC.VirtualQuery
(#15036 , thanks @HertzDevil )
(runtime) Fix main stack top detection on musl-libc (#15047 , thanks @HertzDevil )
(serialization) [breaking] Remove XML::Error.errors
(#14936 , thanks @straight-shoota )
(specs) [regression] Fix Expectations::Be
for module type (#14926 , thanks @straight-shoota )
(system) Fix return type restriction for ENV.fetch
(#14919 , thanks @straight-shoota )
(system) #file_descriptor_close
should set @closed
(UNIX) (#14973 , thanks @ysbaddaden )
(system) reinit event loop first after fork (UNIX) (#14975 , thanks @ysbaddaden )
(text) Fix avoid linking libpcre
when unused (#14891 , thanks @kojix2 )
(text) Add type restriction to String#byte_index
offset
parameter (#14981 , thanks @straight-shoota )
compiler
(cli) Add error handling for linker flag sub commands (#14932 , thanks @straight-shoota )
(codegen) Allow returning Proc
s from top-level funs (#14917 , thanks @HertzDevil )
(codegen) Fix CRT static-dynamic linking conflict in specs with C sources (#14970 , thanks @HertzDevil )
(interpreter) Fix Linux getrandom
failure in interpreted code (#15035 , thanks @HertzDevil )
(interpreter) Fix undefined behavior in interpreter mixed union upcast (#15042 , thanks @HertzDevil )
(semantic) Fix TopLevelVisitor
adding existing ClassDef
type to current scope (#15067 , thanks @straight-shoota )
tools
Chores
stdlib
compiler
Performance
stdlib
(collection) Always use unstable sort for simple types (#14825 , thanks @HertzDevil )
(collection) Optimize Hash#transform_{keys,values}
(#14502 , thanks @jgaskins )
(numeric) Optimize arithmetic between BigFloat
and integers (#14944 , thanks @HertzDevil )
(runtime) [regression] Cache Exception::CallStack.empty
to avoid repeat Array
allocation (#15025 , thanks @straight-shoota )
compiler
Avoid unwinding the stack on hot path in method call lookups (#15002 , thanks @ggiraldez )
(codegen) Reduce calls to Crystal::Type#remove_indirection
in module dispatch (#14992 , thanks @HertzDevil )
(codegen) Compiler: enable parallel codegen with MT (#14748 , thanks @ysbaddaden )
Refactor
stdlib
(concurrency) Extract select
from src/channel.cr
(#14912 , thanks @straight-shoota )
(concurrency) Make Crystal::IOCP::OverlappedOperation
abstract (#14987 , thanks @HertzDevil )
(files) Move #evented_read
, #evented_write
into Crystal::LibEvent::EventLoop
(#14883 , thanks @straight-shoota )
(networking) Simplify Socket::Addrinfo.getaddrinfo(&)
(#14956 , thanks @HertzDevil )
(networking) Add Crystal::System::Addrinfo
(#14957 , thanks @HertzDevil )
(runtime) Add Exception::CallStack.empty
(#15017 , thanks @straight-shoota )
(system) Refactor cancellation of IOCP::OverlappedOperation
(#14754 , thanks @straight-shoota )
(system) Include Crystal::System::Group
instead of extending it (#14930 , thanks @HertzDevil )
(system) Include Crystal::System::User
instead of extending it (#14929 , thanks @HertzDevil )
(system) Fix: Crystal::SpinLock
doesn't need to be allocated on the HEAP (#14972 , thanks @ysbaddaden )
(system) Don't involve evloop after fork in System::Process.spawn
(UNIX) (#14974 , thanks @ysbaddaden )
(system) Refactor EventLoop
interface for sleeps & select timeouts (#14980 , thanks @ysbaddaden )
compiler
Documentation
stdlib
Specs
stdlib
compiler
(codegen) Support return types in codegen specs (#14888 , thanks @HertzDevil )
(codegen) Fix codegen spec for ProcPointer
of virtual type (#14903 , thanks @HertzDevil )
(codegen) Support LLVM OrcV2 codegen specs (#14886 , thanks @HertzDevil )
(codegen) Don't spawn subprocess if codegen spec uses flags but not the prelude (#14904 , thanks @HertzDevil )
Infrastructure
Changelog for 1.14.0 (#14969 , thanks @straight-shoota )
Update previous Crystal release 1.13.1 (#14810 , thanks @straight-shoota )
Refactor GitHub changelog generator print special infra (#14795 , thanks @straight-shoota )
Update distribution-scripts (#14877 , thanks @straight-shoota )
Update version in shard.yml
(#14909 , thanks @straight-shoota )
Merge release/1.13
@1.13.2 (#14924 , thanks @straight-shoota )
Update previous Crystal release 1.13.2 (#14925 , thanks @straight-shoota )
Merge release/1.13
@1.13.3 (#15012 , thanks @straight-shoota )
Update previous Crystal release 1.13.3 (#15016 , thanks @straight-shoota )
[regression] Fix SOURCE_DATE_EPOCH
in Makefile.win
(#14922 , thanks @HertzDevil )
(ci) Update actions/checkout action to v4 - autoclosed (#14896 , thanks @renovate )
(ci) Update LLVM 18 for wasm32-test
(#14821 , thanks @straight-shoota )
(ci) Pin package repos for OpenSSL packages (#14831 , thanks @straight-shoota )
(ci) Upgrade XCode 15.4.0 (#14794 , thanks @straight-shoota )
(ci) Update GH Actions (#14535 , thanks @renovate )
(ci) Add test for OpenSSL 3.3 (#14873 , thanks @straight-shoota )
(ci) Update GitHub runner to macos-14
(#14833 , thanks @straight-shoota )
(ci) Refactor SSL workflow with job matrix (#14899 , thanks @straight-shoota )
(ci) Drop the non-release Windows compiler artifact (#15000 , thanks @HertzDevil )
(ci) Fix compiler artifact name in WindowsCI (#15021 , thanks @straight-shoota )
(ci) Restrict CI runners from runs-on to 8GB (#15030 , thanks @straight-shoota )
(ci) Increase memory for stdlib CI runners from runs-on to 16GB (#15044 , thanks @straight-shoota )
(ci) Use Cygwin to build libiconv on Windows CI (#14999 , thanks @HertzDevil )
(ci) Use our own libffi
repository on Windows CI (#14998 , thanks @HertzDevil )
You can’t perform that action at this time.