Skip to content

Releases: truffleruby/truffleruby

TruffleRuby 34.0.1

26 Apr 21:24

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

Compatibility

  • Support --vm.XstartOnFirstThread on macOS, which is required for some UI libraries like SDL (#4228, @timfel).

TruffleRuby 34.0.0

12 Apr 11:58

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-34-is-released

Changelog

New features:

Bug fixes:

  • Fix Integer#ceil and Float#ceil with negative precision (#3911, @trinistr).
  • Update search_nonascii() to not rely on undefined behavior (#4110, @eregon).
  • Update to GraalVM & Truffle 25.0.2 (#4116, @eregon).
  • Fix TypeError from Kernel#respond_to? to show the class of the name argument and not self (@eregon).
  • Fix super with methods not accepting keywords like def foo(**nil) (#4168, @eregon).
  • Fix potential race conditions when multiple methods of the same file are lazily translated concurrently (#4182, @eregon).
  • Fix IndexOutOfBoundsException happening on stack overflow (#4193, #4199, @eregon).

Compatibility:

  • Ripper is now using Prism::Translation::Ripper instead of the native extension. This is faster and more reliable because it does not depend on lots of CRuby internals (#3481, @eregon).
  • Update to Prism 1.9.0 for improved Ripper compatibility (#3481, @eregon).
  • Implement String#append_as_bytes for Ruby 3.4 (#4087, @Earlopain).
  • Update error message of Array#fetch with key out of range (#4085, @herwinw).
  • Implement Array#fetch_values for Ruby 3.4 (#4085, @herwinw).
  • Remove deprecated Refinement#refined_class method for Ruby 3.4 (#4088, @herwinw).
  • Update Hash#inspect for Ruby 3.4 (#4090, @Earlopain).
  • 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).
  • Update Range#size semantics for Ruby 3.4 (#4099, @Earlopain).
  • Keyword splatting nil is now treated as **{} for Ruby 3.4 (#4100, @Earlopain).
  • Fix Symbol#inspect to handle incompatible encodings (#4106, @eregon).
  • Rational#** no longer returns a Float, it will raise an ArgumentError if the result is too big (#4105, @herwinw).
  • The dummy Encoding::UTF_16 and Encoding::UTF_32 encodings are now regular single-byte dummy encodings (#4083, @eregon).
  • Implement rb_interned_str() and rb_interned_str_cstr() (#4018, @herwinw).
  • Define C API var-args and struct-by-value functions as non-inline to support taking their address (#3396, @eregon).
  • Implement GC.config (#3883, @eregon).
  • Use the timeout gem now that it is efficient and uses a single Thread (#3883, @eregon).
  • Implement ruby_vm_at_exit(), used by rbs (@eregon).
  • Fix splatting a BasicObject block parameter which respond_to?(:to_ary) (#4129, @eregon).
  • Integer#** no longer returns infinity for large results but either computes the result as an Integer or raises an ArgumentError (#4133, @eregon).
  • Hash#to_proc returns a lambda with an arity of 1 (#4138, @herwinw).
  • Hash.[] now raises the correct error message for nil, true and false as argument (#4140, #4146, @herwinw).
  • Support an Array of Thread::Backtrace::Location in Exception#set_backtrace and {Kernel,Thread,Fiber}#raise (#3883, @eregon).
  • Try #to_ary coercion in Array#assoc and Array#rassoc (#4137, @herwinw).
  • Improve compatibility of rb_scan_args() with Ruby 3+ changes (@eregon).
  • Implement Time#{xmlschema,iso8601} in core like Ruby 3.4 (#3883, @eregon).
  • Implement Hash#initialize(capacity:) like Ruby 3.4 (#3883, @eregon).
  • Use Hash default for #sprintf (#4155, @eregon).
  • Implement rb_cloexec_dup(), rb_cloexec_fcntl_dupfd(), rb_enc_check(), rb_str_subpos(), rb_str_offset() and rb_str_sublen() necessary for the readline-ext gem (#3018, @eregon).
  • Make rb_*str_new_static() functions use the passed pointer as the String storage like CRuby (#3018, @eregon).
  • Add support for creating Float values from strings with the decimal part omitted (#3883, @nirvdrum).
  • Implement Method#original_name (#4165, @eregon).
  • Add Socket::ResolutionError like Ruby 3.4 (#3883, @eregon).
  • Support the resolv_timeout and fast_fallback keyword arguments for TCPSocket.new (#3883, @eregon).
  • require 'readline' now uses either Reline or the readline-ext gem, same as CRuby (#3018, @eregon).
  • Update Kernel#singleton_method to implement Ruby 3.4 singleton ancestor lookup semantics (#3883, @nirvdrum).
  • Rewrite Range#step to handle many more cases, including non-Numeric step values using the +-based iteration semantics introduced in Ruby 3.4 (#3883, @nirvdrum).
  • Process.spawn now raises Errno::EACCES instead of Errno::ENOENT when the file exists but is not executable (#4176, @alessandro54).
  • Support building native extensions on systems that don't follow the Filesystem Hierarchy Standard (FHS), such as NixOS (@nirvdrum).
  • Fallback to /bin/sh like CRuby when the command given to Kernel#spawn is not executable (@van-sprundel, #4220).

Performance:

  • Speedup parsing by up to 35% by lazily parsing method definitions (#4182, @eregon).
  • Use the local variable depth from Prism to speedup translation from Prism AST to TruffleRuby AST (#4188, @eregon).

Incompatible Changes:

  • Remove support for darwin-amd64 (aka x86_64-darwin, macOS Intel) since both Apple and GraalVM no longer support it (#4011, @eregon).

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)