Skip to content

Releases: truffleruby/truffleruby

TruffleRuby 33.0.1

21 Jan 18:34

Choose a tag to compare

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 in the README.
TruffleRuby comes in two standalone modes, native and jvm, each built with both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

Bug fixes:

  • Fix Integer#ceil and Float#ceil with negative precision (#3911, @trinistr).

Compatibility:

  • Fix mkmf.rb to use host's RbConfig for $ruby when --target-rbconfig is used (#4097, @panozzaj).
  • Implement Fiber.[], Fiber.[]=, and Fiber#{storage,storage=} (#4007, @nirvdrum).
  • Fix Symbol#inspect to handle incompatible encodings (#4106, @eregon).
  • The dummy Encoding::UTF_16 and Encoding::UTF_32 encodings are now regular single-byte dummy encodings (#4083, @eregon).

TruffleRuby 33.0.0

10 Jan 13:11

Choose a tag to compare

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 in the README.
TruffleRuby comes in two standalone modes, native and jvm, each built with both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Blog Post

https://truffleruby.dev/blog/truffleruby-33-is-released

Changelog

New features:

  • Hash is now thread-safe on TruffleRuby, based on Benoit Daloze's PhD research (#3869, #3112, #2763, @eregon).
  • The TruffleRuby version changed from being based on the GraalVM version to being based on the CRuby version. TruffleRuby version AB.C.D aims to be compatible with CRuby A.B. See the README for more details (#4020, @eregon).
  • TruffleRuby now ships with its own libyaml and no longer needs a system libyaml (#3479, @eregon).
  • TruffleRuby now ships with its own libssl and no longer needs a system libssl. It still requires CA certificates from the system. (#3479, @eregon).

Bug fixes:

Compatibility:

  • Fix extra warnings for Kernel#sprintf (#3938, @eregon).
  • Support using tailwindcss-ruby's native platform gems (@nirvdrum).
  • Fix a TypeError when calling Kernel#warn with explicit uplevel: nil (@Earlopain).
  • Fix inspect output of symbols that contain non-ASCII letters (@Earlopain).
  • Implement rb_struct_initialize() for both Struct and Data (#3997, @eregon).
  • Fix Hash#{select,slice,transform_values} and Hash.[] methods and retain compare_by_identity flag (@andrykonchin).
  • Fix Hash#reject and do not retain default and default_proc values (@andrykonchin).
  • Fix Comparable#clamp when the given an infinite interval (#3945, @andrykonchin).
  • File.path now checks for \0 and encoding (#4047, @nobu).
  • Implement MatchData#bytebegin and MatchData#byteend for Ruby 3.4 (#3883, @Schwad).
  • Define Data#initialize to help deserializing Data instances (@eregon).
  • Fix Rational() and arguments type conversion (#3969, #3954 @andrykonchin).
  • Support Rational() with exception keyword argument (#3969, @andrykonchin).
  • Ignore bom| prefix if file is not opened for reading (#4079, @rwstauner).

Incompatible Changes:

  • Maven coordinates to embed TruffleRuby have changed from org.graalvm.polyglot:ruby/org.graalvm.ruby:ruby to dev.truffleruby:truffleruby (#4034, @eregon).
  • The --single-threaded option now defaults to false also when embedding TruffleRuby (#3958, @eregon).

Other contributions without Changelog entries

  • Add Dockerfiles and GitHub Actions to generate and publish docker images (#2405, @flavorjones).
  • Fix invalid inlining usage of BooleanCastNode (#4043, @chumer).

TruffleRuby 25.0.0

16 Sep 12:54

Choose a tag to compare

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 in the README.
TruffleRuby comes in two standalone modes, native and jvm, each built with both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

New features:

Bug fixes:

  • Fix Range#cover? on begin-less ranges and non-integer values (@nirvdrum, @rwstauner).
  • Fix Time.new with String argument and handle nanoseconds correctly (#3836, @andrykonchin).
  • Fix a possible case of infinite recursion when implementing frozen? in a native extension (@nirvdrum).
  • Fix parameters forwarding to a method call executed with Kernel#eval (@andrykonchin).
  • Fix segfaults in native extensions when the reference processing thread is interrupted and would longjmp() incorrectly (#3903, @eregon).

Compatibility:

  • Support Timezone argument to Time.{new,at} and Time#{getlocal,localtime} (#1717, @patricklinpl, @manefz, @rwstauner).
  • Updated to Ruby 3.3.7 (@andrykonchin).
  • Implement StringScanner#{peek_byte,scan_byte,scan_integer,named_captures} methods (#3788, @andrykonchin).
  • Support String patterns in StringScanner#{exist?,scan_until,skip_until,check_until,search_full} methods (@andrykonchin).
  • Implement ObjectSpace::WeakKeyMap (#3681, @andrykonchin).
  • Fix String#slice called with negative offset (@andrykonchin).
  • Fix explicitly inherited Struct subclasses and don't provide #members method (#3802, @andrykonchin).
  • Support Digest plugins (#1390, @nirvdrum).
  • Joni has been updated from 2.2.1 to 2.2.6 (@andrykonchin).
  • Fix numeric coercing when #coerce method is not public (#3848, @andrykonchin).
  • Fix Kernel#raise and don't override cause at exception re-raising (#3831, @andrykonchin).
  • Return a pointer with #type_size of 1 for Pointer#read_pointer (@eregon).
  • Fix rb_str_locktmp() and rb_str_unlocktmp() to raise FrozenError when string argument is frozen (#3752, @andrykonchin).
  • Fix Struct setters to raise FrozenError when a struct is frozen (#3850, @andrykonchin).
  • Fix Struct#initialize when mixed positional and keyword arguments (#3855, @andrykonchin).
  • Fix Integer.sqrt for large values (#3872, @tompng).
  • Fix Data#inspect when data contains a recursive attribute (#3847, @andrykonchin).
  • Fix StringIO#{gets,readline} when it is called with both separator and limit to truncate the separator if the limit is exceeded (#3856, @andrykonchin).
  • Implement rb_error_frozen_object for the google-protobuf gem (@nirvdrum).
  • Adjust a FrozenError's message and add a receiver when a frozen module or class is modified (e.g. by defining or undefining an instance method or by defining a nested module (@andrykonchin).
  • Fix Kernel#sprintf and %p format specification to produce "nil" for nil argument (#3846, @andrykonchin).
  • Reimplement Data#with to not call Data.new that can be removed or redefined (#3890, @andrykonchin).

Performance:

  • Use TRegex for binary Regexps with non-US-ASCII characters in the pattern like /[\x80-\xff]/n (#3858, @eregon).

TruffleRuby 24.2.2

15 Jul 11:56

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changes:

  • Update GraalVM base to 24.2.2

TruffleRuby 24.2.1

15 Apr 13:32

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

New features:

TruffleRuby 24.2.0

18 Mar 12:09

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

New features:

Bug fixes:

  • Fix Module#name called inside the Module#const_added callback when the module is defined in the top-level scope (#3683, @andrykonchin).
  • Fix duplicated calls of a Module#const_added callback when a module with nested modules is assigned to a constant (@andrykonchin).
  • Support OpenSSL 1.1-3.4 and prefer in order OpenSSL 3.0.x, 3.x and 1.1 (EOL). There was a compilation issue with OpenSSL 3.4 (#3724, @eregon).
  • Fix Time{.at,.new,.now,#getlocal,#localtime} methods and validation of seconds in utc offset in String format (@andrykonchin).
  • Fix ObjectSpace.undefine_finalizer and raise FrozenError when called for a frozen object (@andrykonchin).
  • Fix Integer#/ when called with a bignum argument (@andrykonchin).

Compatibility:

Performance:

  • Speedup some C extensions like sqlite3, trilogy and json by 2 to 3 times by using the Panama NFI backend for faster upcalls in JVM mode (@eregon).
  • Optimize encoding negotiation for ASCII-compatible encodings (@eregon, @andrykonchin).

Changes:

  • Inherit Polyglot::ForeignException from StandardError instead of Exception (#3620, @andrykonchin).

TruffleRuby 24.1.2

21 Jan 14:11

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

Bug fixes:

  • Fix Module#name called inside the Module#const_added callback when the module is defined in the top-level scope (#3683, @andrykonchin).
  • Fix duplicated calls of a Module#const_added callback when a module with nested modules is assigned to a constant (@andrykonchin).

TruffleRuby 24.1.1

15 Oct 13:03

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

  • Build based on GraalVM for JDK 23.0.1 (24.1.1)

TruffleRuby 24.1.0

17 Sep 12:50

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

New features:

Bug fixes:

  • Add missing thread-safe objects write barriers for TruffleRuby::ConcurrentMap (#3179, @eregon).
  • Fix repeated calling of methods Dir#{each,each_child,children} (#3464, @andrykonchin).
  • Fix IO#{wait,wait_readable,wait_writable} methods and switch the current thread into a sleep state (@andrykonchin).
  • Fix rb_global_variable() for Float and bignum values during the Init_ function (#3478, @eregon).
  • Fix rb_gc_register_mark_object() for Float and bignum values (#3502, @eregon, @andrykonchin).
  • Fix parsing literal floats when the locale does not use . for the decimal separator (e.g. LANG=fr_FR.UTF-8) (#3512, @eregon).
  • Fix IO#{read_nonblock,readpartial,sysread}, BasicSocket#{recv,recv_nonblock}, {Socket,UDPSocket}#recvfrom_nonblock, UnixSocket#recvfrom and preserve a provided buffer's encoding (#3506, @andrykonchin).
  • Repair IO#{wait_readable,wait_writable,wait} to be interruptible (#3504, @andrykonchin).
  • Fix Hash value omission for constant names (@andrykonchin).
  • Fix MatchData#[index, length] when index is larger than number of matched values (@andrykonchin).
  • Fix #each for a foreign iterator which is also iterable (#3630, @eregon).

Compatibility:

  • Move IO#wait_readable, IO#wait_writable, IO#wait_priority and IO#wait into core library (@andrykonchin).
  • Change assignment evaluation order for fully qualified constant and evaluate left-hand-side before right-hand-side (#3039, @andrykonchin).
  • Fix evaluation order for multi-assignment and evaluate left-hand-side before right-hand-side (@andrykonchin).
  • Add Regexp.linear_time? method (#3039, @andrykonchin).
  • Allow null encoding pointer in rb_enc_interned_str_cstr (@thomasmarshall).
  • Allow anonymous memberless Struct (@simonlevasseur).
  • Set $! when a Kernel#at_exit hook raises an exception (#3535, @andrykonchin).
  • Support :buffer keyword argument to Array#pack (#3559, @andrykonchin).
  • Set RbConfig::CONFIG['host_cpu'] to arm64 on darwin platform (#3571, @andrykonchin).
  • Fix RegexpError messages to match CRuby better (#3398, @andrykonchin).
  • Fix Enumerable#reduce to handle non-Symbol method name parameter (#2931, @andrykonchin).
  • Fix RangeError message to match CRuby for Integer#chr called with invalid codepoint argument (#2795, @andrykonchin).
  • Joni has been updated from 2.1.44 to 2.2.1 (@andrykonchin).
  • Fix Hash#to_h called with a block and pass key and value to the block as separate arguments (#3607, @andrykonchin).
  • Fix StringIO#initialize and preserve initial string's encoding when mode is w so the initial string is truncated (#3599, @andrykonchin).
  • Fix IO#{autoclose=,autoclose?} and raise IOError when io is closed (@andrykonchin).
  • Fix Thread#{thread_variable_get,thread_variable_set,thread_variable?,key?,[],[]=,fetch} and convert a non-String/Symbol thread-local variable name to String using #to_str (@andrykonchin).
  • Fix formatting in Exception#full_message when RuntimeError is not handled and highlight option is specified (@andrykonchin).
  • Fix String#encode and convert fallback values into String using #to_str (@andrykonchin).
  • Fix Kernel.warn and don't call Warning#warn if a specified category is disabled (@andrykonchin).
  • Fix $! global variable and make it fiber-local (@andrykonchin).
  • Fix rb_set_errinfo and rb_errinfo and store an error separately from $! (#2890, @andrykonchin).
  • Fix rb_mutex_synchronize to not wrap/unwrap result value (#3624, @andrykonchin).
  • Add StringIO#set_encoding_by_bom method (#3632, @andrykonchin).
  • Fix Kernel#eval to ignore shebang with non-Ruby interpreter (#3623, @andrykonchin).
  • Add SyntaxError#path (#3433, @wasabigeek).
  • Reuse the precompiled sass-embedded gem as-is on TruffleRuby (#3565, @ntkme).

Performance:

  • Fix inline caching for Regexp creation from Strings (#3492, @andrykonchin, @eregon).
  • Optimize Integer#pow method for small modulus values (#3544, @andrykonchin).
  • Avoid repeated copies from native to managed string when matching Regexps on a native string (#2193, @eregon).
  • Report polymorphism for Kernel#sprintf (#3537, @nirvdrum).
  • Review all inline caches to appropriately use splitting to make the best use of these inline caches (@andrykonchin, @eregon).

Memory Footprint:

  • Use inlined core method nodes even when modules are prepended to core classes (#3546, @eregon).
  • Reduce empty array allocations (#3517, @nirvdrum).

TruffleRuby 24.0.2

16 Jul 13:51

Choose a tag to compare

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/
TruffleRuby comes in two standalone modes, native and jvm, for both Oracle GraalVM and Community Edition.
See the documentation for which release asset corresponds to what.

Changelog

  • Build based on GraalVM for JDK 22.0.2 (24.0.2)