Skip to content

TruffleRuby - GraalVM Community 23.0.0-preview1

Pre-release
Pre-release
Compare
Choose a tag to compare
@eregon eregon released this 28 Apr 12:51
· 2447 commits to master since this release

TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI.
More information is available on the website: http://www.graalvm.org/ruby/

Changelog

New features:

  • Updated to Ruby 3.1.3 (#2733, @andrykonchin, @eregon).
  • foreign_object.is_a?(foreign_meta_object) is now supported (@eregon).
  • Foreign big integers are now supported and work with all Numeric operators (@eregon).

Bug fixes:

  • Ensure every parse node has a source section and fix the source section for ensure (#2758, @eregon).
  • Fix spawn(..., fd => fd) on macOS, it did not work due to a macOS bug (@eregon).
  • Fix rb_gc_register_address()/rb_global_variable() to read the latest value (#2721, #2734, #2720, @eregon).
  • Synchronize concurrent writes to the same StringIO (@eregon).
  • Fix StringIO#write(str) when str is of an incompatible encoding and position < buffer size (#2770, @eregon).
  • Fix rb_thread_fd_select() to correctly initialize fdset copies and handle the timeout (@eregon).
  • Fix TracePoint#inspect when it's called outside of a callback (@andrykonchin).
  • Fix Signal.trap when signal argument is not supported (#2774, @andrykonchin).
  • Fix Dir.mkdir and convert permissions argument to Integer (#2781, @andrykonchin).
  • Fix String#dump and use \u{xxxx} notation (with curly brackets) for characters that don't fit in \uxxxx (#2794, @andrykonchin).
  • Fix Marshal.dump when big Integer (that cannot be expressed with 4 bytes) is serialized (#2790, @andrykonchin).
  • Fix Array#pack and accept Numeric values when Float is expected (#2815, @andrykonchin).
  • Fix \P{} matching in regular expressions (#2798, @andrykonchin).
  • Fix constants lookup when BasicObject#instance_eval method is called with a String (#2810, @andrykonchin).
  • Don't trigger the method_added event when changing a method's visibility or calling module_function (@paracycle, @nirvdrum).
  • Fix rb_time_timespec_new function to not call Time.at method directly (@andrykonchin).
  • Fix StringIO#write to transcode strings with encodings that don't match the StringIO's external_encoding. (#2839, @flavorjones)
  • Fix processing of proc rest arguments located at the beginning if there are no actual arguments (#2921, @andrykonchin).
  • Fix Monitor#exit to raise ThreadError when monitor not owned by the current thread (#2922, @andrykonchin).
  • Fix MatchData#[] to support negative length argument (#2929, @andrykonchin).
  • Fix IO line reading calls when using a multi-byte delimiter (IO#{each,gets,readline,readlines,etc.}) (#2961, @vinistock, @nirvdrum).
  • Fix the exception type raised when type coercion raises a NoMethodError (#2903, @paracycle, @nirvdrum).
  • Fix Method and Proc #parameters method to return _ parameter name without synthetic suffix when there are multiple _ parameters (@paracycle).
  • Fixed errors in IRB when attempting to navigate beyond bounds in singleline mode (@rwstauner).

Compatibility:

  • Fix MatchData#[] when passed unbounded Range (#2755, @andrykonchin).
  • Updated rb_define_class, rb_define_class_under, and rb_define_class_id_under to allow class names that aren't valid in Ruby (#2739, @nirvdrum).
  • Fixed rb_gv_get so that it no longer implicitly creates global variables (#2748, @nirvdrum).
  • Added implementations of rb_gvar_val_getter and rb_define_virtual_variable (#2750, @nirvdrum).
  • Implement rb_warning_category_enabled_p to support the syntax_tree gem (#2764, @andrykonchin).
  • Fix desctructuring of a single block argument that implements #to_ary dynamically (#2719, @andrykonchin).
  • Fix Kernel#Complex and raise exception when an argument is formatted incorrectly (#2765, @andrykonchin).
  • Add #public?, #private? and #protected? methods for Method and UnboundMethod classes (@andrykonchin).
  • Add optional argument to Thread::Queue.new (@andrykonchin).
  • Support a module as the second argument of Kernel#load (@andrykonchin).
  • Improve argument validation in Struct#valies_at - raise IndexError or RangeError when arguments are out of range (#2773, @andrykonchin).
  • Fix MatchData#values_at and handling indices that are out of range (#2783, @andrykonchin).
  • Add support for %-z (UTC for unknown local time offset, RFC 3339) to Time#strftime (@andrykonchin).
  • Add support for UTC and A-Z utc offset values, as well as +/-HH, +/-HHMM, +/-HHMMSS (without :) (@andrykonchin).
  • Treat time with UTC, Z and -00:00 utc offset as UTC time (@andrykonchin).
  • Raise FrozenError when Time#localtime, Time#utc and Time#gmtime is called on a frozen time object (@andrykonchin).
  • Validate a microseconds argument used to create a time object (@andrykonchin).
  • Support accessing dmark and dfree fields for RData (#2771, @eregon).
  • Implement rb_enc_nth() (#2771, @eregon).
  • Support offset keyword argument for String#unpack and String#unpack1 (@andrykonchin).
  • Fix Process.detach and cast pid argument to Integer (#2782, @andrykonchin).
  • rb_to_id() should create a static ID, used by RMagick (@eregon).
  • Resolve the current user home even when $HOME is not set (#2784, @eregon)
  • Fix IO#lineno= and convert argument to Integer more strictly (#2786, @andrykonchin).
  • Fix argument implicit convertion in IO#pos= and IO#seek methods (#2787, @andrykonchin).
  • Warn about unknown directive passed to Array#pack in verbose mode (#2791, @andrykonchin).
  • Added constants IO::SEEK_DATE and IO::SEEK_HOLE (#2792, @andrykonchin).
  • Fix StringIO.new to accept keyword arguments (#2793, @andrykonchin).
  • Process#spawn should call #to_io on non-IO file descriptor objects (#2809, @jcouball).
  • Add constants IO::SEEK_DATE and IO::SEEK_HOLE (#2792, @andrykonchin).
  • Add Class#subclasses method (#2733, @andrykonchin).
  • Implement Coverage.running? method (@andrykonchin).
  • Fix arguments implicit type conversion for Enumerable#zip and Array#zip (#2788, @andrykonchin).
  • Fix Array#unshift to not depend on Array#[]= and allow overriding #[]= in a subclass (#2772, @andrykonchin).
  • Fix syntactic check for void value expression (#2821, @eregon).
  • Fix Range#step with no block and non-Numeric values (#2824, @eregon).
  • Fix execution order of END blocks and at_exit callbacks (#2818, @andrykonchin).
  • Fix String#casecmp? for empty strings of different encodings (#2826, @eregon).
  • Implement Enumerable#compact and Enumerator::Lazy#compact (#2733, @andrykonchin).
  • Implement Array#intersect? (#2831, @nirvdrum).
  • Record the source location in the constant for the module/class keywords (#2833, @eregon).
  • Fix File.open and support flags option (#2820, @andrykonchin).
  • Support writing to RData.dfree for native extensions (#2830, #2732, #2165, @eregon).
  • Fix IO#write and support multiple arguments with different encodings (#2829, @andrykonchin).
  • Fix Array methods reject, reject!, inject, map, select, each_index and handle a case when array is modified by a passed block like CRuby does (#2822, andrykonchin, @eregon).
  • Fix EncodingError exception message when Symbol has invalid encoding (#2850, @andrykonchin).
  • Raise EncodingError at parse time when Hash literal contains a Symbol key with invalid encoding (#2848, @andrykonchin).
  • Fix Array methods reject, reject!, inject, map, select, each_index and handle a case when array is modified by a passed block like CRuby does (#2822, @andrykonchin, @eregon).
  • Fix Array methods select! and keep_if and handle a case when exception is raised in a passed block properly (@andrykonchin).
  • Fix Enumerable methods each_cons and each_slice to return receiver (#2733, @horakivo)
  • Module methods #private, #public, #protected, #module_function now returns their arguments like in CRuby 3.1 (#2733, @horakivo)
  • Kernel#exit!, killing Fibers and internal errors do not run code in ensure clauses anymore, the same as CRuby (@eregon).
  • Implement UnboundMethod#original_name (@paracycle, @nirvdrum).
  • Implement Thread#native_thread_id method (#2733, @horakivo).
  • Modify Struct#{inspect,to_s} to match MRI when the struct is nested inside of an anonymous class or module (@st0012, @nirvdrum).
  • Fiber.current and Fiber#transfer are available without require 'fiber' like in CRuby 3.1 (#2733, @eregon).
  • Add freeze keyword argument to Marshal.load (#2733, @andrykonchin).
  • Add Integer.try_convert (#2733, @moste00, @eregon).
  • Support optional :in keyword argument for Time.now and Time.new (#2733, @andrykonchin).
  • Add optional Hash argument to Enumerable#tally (#2733, @andrykonchin).
  • Update $LOAD_PATH.resolve_feature_path to return nil instead of raising LoadError when feature isn't found (#2733, @andrykonchin).
  • Add objspace/trace file (#2733, @andrykonchin).
  • Add Process._fork (#2733, @horakivo).
  • Update to JCodings 1.0.58 and Joni 2.1.44 (@eregon).
  • Add MatchData#match and MatchData#match_length (#2733, @horakivo).
  • Add StructClass#keyword_init? method (#2377, @moste00).
  • Support optional level argument for File.dirname method (#2733, @moste00).
  • Add Thread::Backtrace.limit method (#2733, @andrykonchin).
  • Deprecate rb_gc_force_recycle and make it a no-op function (#2733, @moste00).
  • Add Refinement#import_methods method and add deprecation warning for Refinement#include and Refinement#prepend (#2733, @horakivo).
  • Upgrading UNICODE version to 13.0.0 and EMOJI version to 13.1 (#2733, @horakivo).
  • Add rb_io_maybe_wait_readable, rb_io_maybe_wait_writable and rb_io_maybe_wait functions (#2733, @andrykonchin).
  • StringIO#set_encoding should coerce the argument to an Encoding (#2954, @eregon).
  • Implement changes of Ruby 3.0 to IO#wait (#2953, @larskanis).

Performance:

  • Marking of native structures wrapped in objects is now done on C call exit to reduce memory overhead (@aardvark179).
  • Splitting (copying) of call targets has been optimized by implementing cloneUninitialized() (@andrykonchin, @eregon).
  • Process.pid is now cached per process like $$ (#2882, @horakivo)
  • Use the system libyaml for psych to improve warmup when parsing YAML (#2089, @eregon).
  • Fixed repeated deoptimizations for methods building an Array which is growing over multiple calls at a given call site (@eregon).

Changes:

  • Remove Truffle::Interop.deproxy as it is unsafe and not useful (@eregon).
  • Removed Truffle::Interop.unbox_without_conversion (should not be needed by user code) (@eregon).