Skip to content

TruffleRuby - GraalVM Community 23.0.0

Compare
Choose a tag to compare
@ezzarghili ezzarghili released this 13 Jun 15:03
· 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.
The Ruby language component can be added to GraalVM using the gu utility.
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).
  • Fix Dir.glob returning blank string entry with leading **/ in glob and base: argument (@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).
  • Fix Pathname#relative_path_from to convert string arguments to Pathname objects (@rwstauner).
  • Implement rb_io_descriptor() (@eregon).

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).