Back to Crystal

Changelog 1.8

doc/changelogs/v1.8.md

1.20.125.7 KB
Original Source

Changelog 1.8

1.8.2 - 2023-05-08

Standard Library

Collection

  • Fix codegen bug with Iterator::ChainIterator (#13412, thanks @straight-shoota)

Log

  • Fix Log::Metadata#dup crash with 2+ entries (#13369, thanks @HertzDevil)

Serialization

  • Fixup for JSON::Serializable on certain recursively defined types (#13430, thanks @kostya)

Text

  • Fix String#scan with empty Regex match at multibyte char (#13387, thanks @HertzDevil)
  • (performance) Check subject UTF-8 validity just once for String#gsub, #scan, #split (#13406, thanks @HertzDevil)

Compiler

Codegen

  • Always use 0 for offset of StaticArray's @buffer (#13319, thanks @HertzDevil)

Other

  • Backport bugfixes to release/1.8 for release 1.8.2 (#3435, thanks @straight-shoota)

1.8.1 - 2023-04-20

Standard Library

Serialization

  • Fix JSON::Serializable on certain recursively defined types (#13344, thanks @HertzDevil)

Text

  • 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

Language

  • The compiler uses PCRE2 to validate regex literals (#13084, thanks @straight-shoota)
  • Fill docs for TupleLiteral (#12927, thanks @straight-shoota)
  • Allow namespaced Paths as type names for lib (#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 and OAuth::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 Indexables 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) and Slice.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 in Channel.select_impl (#12827, #12962, thanks @straight-shoota)
  • Add memory barriers on lock/unlock of SpinLock (#13050, thanks @bcardiff)
  • (performance) Avoid Array allocation in Channel.select(Tuple) (#12960, thanks @straight-shoota)

Files

  • (breaking-change) Deprecate Termios (#12940, thanks @HertzDevil)
  • (breaking-change) Windows: make File.delete remove symlink directories, not Dir.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 use Enum#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 in HTTP::StaticFileHandler specs (#12984, thanks @HertzDevil)
  • Add MIME::Multipart.parse(HTTP::Client::Response, &) (#12890, thanks @straight-shoota)
  • Replace LibC.ntohs and htons 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 in HTTP::StaticFileHandler (#12886, thanks @jgaskins, @straight-shoota)
  • Skip hostname spec if hostname command fails (#12987, thanks @Blacksmoke16)
  • Fix Socket#tty? to false on Windows (#13175, thanks @Blacksmoke16)
  • Fix HTTP::Server::Response#reset for status_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 of LibC.printf (#13161, thanks @HertzDevil)
  • Windows: detect stack overflows on non-main Fibers (#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 recursive Serializable::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 for flock_* (#13039, thanks @HertzDevil)
  • Add Process.on_interrupt (#13034, thanks @HertzDevil)
  • Add Process::Status#to_s and #inspect (#13044, thanks @straight-shoota)
  • Add graceful parameter to Process#terminate (#13070, thanks @HertzDevil)
  • Add Process::ExitReason and Process::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 for NoReturn (#13290, thanks @straight-shoota)

Parser

  • Fix x @y and x @@y in def parameters when y 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 tighter rescue scope in Require 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 yielding Defs without a block parameter (#12952, thanks @HertzDevil)

Infrastructure

  • Fix bin/crystal print no error message when crystal 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 in test_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 to format 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 in find-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-compilation 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 global crystal command is installed (#13286, thanks @straight-shoota)
  • Makefile: Add interpreter_spec (#13251, thanks @straight-shoota)
  • Makefile: Add all target as default before including Makefile.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)