Releases: oracle/truffleruby
TruffleRuby - GraalVM Community Edition 21.0.0.2
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 support can be added to GraalVM using the gu utility.
More information is available on the GraalVM website: http://www.graalvm.org/ruby/
No changes in Ruby, see https://www.graalvm.org/release-notes/21_0/#21002
TruffleRuby - GraalVM Community Edition 21.0.0
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 support can be added to GraalVM using the gu utility.
More information is available on the GraalVM website: http://www.graalvm.org/ruby/
Changelog
21.0.0
Release notes:
- The new IRB is quite slow when copy/pasting code into it. This is due to an inefficient
io/console
implementation which will be addressed in the next release. A workaround is to useirb --readline
, which disables some IRB features but is much faster for copy/pasting code.
New features:
- Updated to Ruby 2.7.2 (#2004, @eregon, @chrisseaton).
Bug fixes:
- Fix error message when the method name is not a Symbol or String for
Kernel#respond_to?
(#2132, @ssnickolay) - Fixed setting of special variables in enumerators and enumerables (#1484, @aardvark179).
- Fixed return value of
Enumerable#count
andEnumerable#uniq
with multiple yielded arguments (#2145, @LillianZ). - Fixed
String#unpack
forw*
format (#2143, @bjfish). - Fixed issue with
Kernel#`
when invalid UTF-8 given (#2118). - Fixed issue with
Method#to_proc
and special variable storage (#2156). - Add missing
offset
parameter forFFI::Pointer#put_array_of_*
(#1525). - Fixed issue with different
Struct
s having the same hash values (#2214).
Compatibility:
- Implement
String#undump
(#2131, @kustosz) Errno
constants with the sameerrno
number are now the same class.- Implement
Enumerable#tally
andEnumerable#filter_map
(#2144 and #2152, @LillianZ). - Implement
Range#minmax
. - Pass more
Enumerator::Lazy#uniq
andEnumerator::Lazy#chunk
specs (#2146, @LillianZ). - Implement
Enumerator#produce
(#2160, @zverok) - Implement
Complex#<=>
(#2004, @ssnickolay). - Add warning for
proc
without block (#2004, @ssnickolay). - Implemented
FrozenError#receiver
. Proc#<<
andProc#>>
raises TypeError if passed not callable object (#2004, @ssnickolay).- Support time and date related messages for
Time
(#2166). - Updated
Dir.{glob,[]}
to raiseArgumentError
for nul-separated strings. Kernel#lambda
with no block in a method called with a block raises an exception (#2004, @ssnickolay).- Implemented
BigDecimal
as C extension to improve compatibility. - Comment lines can be placed between fluent dot now (#2004, @ssnickolay).
- Implemented
rb_make_exception
. **kwargs
now accept non-Symbol keys like Ruby 2.7.- Updated the Unicode Emoji version (#2173, @wildmaples).
- Added
Enumerator::Yielder#to_proc
. - Implemented
Enumerator::Lazy#eager
. - Updated
Method#inspect
to include paremeter information. - Update
Module#name
to return the same frozen string.
Performance:
- Refactor and implement more performant
MatchData#length
(#2147, @LillianZ). - Refactor and implement more performant
Array#sample
(#2148, @LillianZ). String#inspect
is now more efficient.
Changes:
- All
InteropLibrary
messages are now exposed consistently as methods onTruffle::Interop
(#2139). Some methods were renamed to match the scheme described in the documentation.
TruffleRuby - GraalVM Community Edition 20.3.0
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 support can be added to GraalVM using the gu utility.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/ruby/
Changelog
20.3.0
Bug fixes:
- Handle foreign null object as falsy value (#1902, @ssnickolay)
- Fixed return value of
Enumerable#first
with multiple yielded arguments (#2056, @LillianZ). - Improve reliability of the post install hook by disabling RubyGems (#2075, @eregon).
- Fixed top level exception handler to print exception cause (#2013, @bjfish).
- Fixed issue when extending FFI from File (#2094).
- Fixed issue with
Kernel#freeze
not freezing singleton class (#2093). - Fixed
String#encode
with options issue (#2091, #2095, @LillianZ) - Fixed issue with
spawn
when:close
redirect is used (#2097). - Fixed
coverage
issue when*eval
is used (#2078). - Use expanded load paths for feature matching (#1501).
- Fixed handling of post arguments for
super()
(#2111). - Fixed
SystemStackError
sometimes replaced by an internal JavaNoClassDefFoundError
on JVM (#1743). - Fixed constant/identifier detection in lexer for non-ASCII encodings (#2079, #2102, @ivoanjo).
- Fixed parsing of
--jvm
as an application argument (#2108). - Fix
rb_rescue2
to ignore the end marker(VALUE)0
(#2127, #2130). - Fix
String#{chomp, chomp!}
issue with invalid encoded strings (#2133). - Fix status and output when SystemExit is subclassed and raised (#2128)
Compatibility:
- Run
at_exit
handlers even if parsing the main script fails (#2047). - Load required libraries (
-r
) before parsing the main script (#2047). String#split
supports block (#2052, @ssnickolay)- Implemented
String#{grapheme_clusters, each_grapheme_cluster}
. - Fix the caller location for
#method_added
(#2059). - Fix issue with
Float#round
whenself
is-0.0
. - Fix
String#unpack
issue withm0
format (#2065). - Fix issue with
File.absolute_path
returning a path to current directory (#2062). - Update
Range#cover?
to handleRange
parameter. - Fix
String#{casecmp, casecmp?}
parameter conversion. - Fix
Regexp
issue which raised syntax error instead ofRegexpError
(#2066). - Handle
Object#autoload
when autoload itself (#1616, @ssnickolay) - Skip upgraded default gems while loading RubyGems (#2075).
- Verify that gem paths are correct before loading RubyGems (#2075).
- Implement
rb_ivar_count
. - Implemented
rb_yield_values2
. - Implemented
Digest::Base#{update, <<}
(#2100). - Pass the final
super
specs (#2104, @chrisseaton). - Fix arity for arguments with optional kwargs (#1669, @ssnickolay)
- Fix arity for
Proc
(#2098, @ssnickolay) - Check bounds for
FFI::Pointer
accesses when the size of the memory behind is known. - Implement negative line numbers for eval (#1482).
- Support refinements for
#to_s
called by string interpolation (#2110, @ssnickolay) - Module#using raises error in method scope (#2112, @ssnickolay)
File#path
now returns a new mutable String on every call like MRI (#2115).- Avoid infinite recursion when redefining
Warning#warn
and callingKernel#warn
(#2109). - Convert objects with
#to_path
in$LOAD_PATH
(#2119). - Handle the functions being native for
rb_thread_call_without_gvl()
(#2090). - Support refinements for Kernel#respond_to? (#2120, @ssnickolay)
- JCodings has been updated from 1.0.45 to 1.0.55.
- Joni has been updated from 2.1.30 to 2.1.40.
Performance:
- Calls with a literal block are no longer always split but instead the decision is made by the Truffle splitting heuristic.
Symbol#to_proc
is now AST-inlined in order to not rely on splitting and to avoid needing the caller frame to find refinements which apply.Symbol#to_proc
is now globally cached per Symbol and refinements, to avoid creating many redundantCallTargets
.- Setting and access to the special variables
$~
and$_
has been refactored to require less splitting (@aardvark179).
Changes:
- Migrated from JLine 2 to JLine 3 for the
readline
standard library.
TruffleRuby - GraalVM Community Edition 20.2.0
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI, version 2.6.6.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/ruby/
Changelog
20.2.0
New features:
- Updated to Ruby 2.6.6 (@eregon).
- Use
InteropLibrary#toDisplayString()
to better display objects from other languages. - Implement writing to the top scope for global variables (#2024).
foreign_object.to_s
now usesInteropLibrary#toDisplayString()
(and stillasString()
ifisString()
).foreign_object.inspect
has been improved to be more useful (include the language and meta object).foreign_object.class
now callsgetMetaObject()
(except for Java classes, same as before).- Add basic support for Linux ARM64.
foreign_object.name = value
will now callInteroplibrary#writeMember("name", value)
instead ofinvokeMember("name=", value)
(@aardvark179).- Always show the Ruby core library files in backtraces (#1414).
- The Java stacktrace is now shown when sending SIGQUIT to the process, also on TruffleRuby Native, see Debugging for details (#2041).
- Calls to foreign objects with a block argument will now pass the block as the last argument.
foreign.name
will now useinvokeMember
if invocable and if not usereadMember
, seedoc/contrib/interop_implicit_api.md
for details.foreign.to_f
andforeign.to_i
will now attempt to convert to RubyFloat
andInteger
(#2038).foreign.equal?(other)
now usesInteropLibrary#isIdentical(other)
andforeign.object_id/__id__
now usesInteropLibrary#identityHashCode()
.
Bug fixes:
- Fix
#class_exec
,#module_exec
,#instance_eval
, andinstance_exec
to use activated refinements (#1988, @ssnickolay). - Fixed missing method error for FFI calls with
blocking: true
when interrupted. - Use upgraded default gems when installed (#1956).
- Fixed
NameError
when requiring an autoload path that does not define the autoload constant (#1905). - Thread local IO buffers are now allocated using a stack to ensure safe operating if a signal handler uses one during an IO operation.
- Fixed
TracePoint
thread-safety by storing the state on the RubyThread
(like MRI) instead of inside theTracePoint
instance. - Make
require 'rubygems/package'
succeed and defineGem::Deprecate
correctly (#2014). - Fix
MBCLEN_CHARFOUND_P
error (@bjfish). - Fix
rb_enc_str_new
whenNULL
encoding is given with a constant string. - Fixed
rb_enc_precise_mbclen
to handle more inputs. - The output for
--engine.TraceCompilation
is now significantly easier to read, by having shorter method names and source names (oracle/graal#2052). - Fix indentation for squiggly heredoc with single quotes (#1564).
- Only print members which are readable for foreign
#inspect
(#2027). - Fixed the return value of the first call to
Kernel#srand
in a Thread (#2028). - Fix missing flushing when printing an exception at top-level with a custom backtrace, which caused no output being shown (#1750, #1895).
- Use the mode of the given
IO
forIO#reopen(IO)
which is important for the 3 standard IOs (#2034). - Fix potential deadlock when running finalizers (#2041).
- Let
require 'rubygems/specification'
work beforerequire 'rubygems'
.
Compatibility:
- Implement
UnboundMethod#bind_call
(@norswap). - Implemented
ObjectSpace::WeakMap
(#1385, #1958). - Implemented
strtod
andruby_strtod
(#2007, @chrisseaton). - Fix detection of
#find_type
in FFI to ignoreMakeMakefile#find_type
frommkmf
(#1896, #2010). - Implemented
rb_uv_to_utf8
(#1998, @skateman). - Implemented
rb_str_cat_cstr
. - Implemented
rb_fstring
. - Support
#refine
for Module (#2021, @ssnickolay). - Implemented
rb_ident_hash_new
. - Improved the compatibility of
Symbol.all_symbols
(#2022, @chrisseaton). - Implemented
rb_enc_str_buf_cat
. - Implemented
rb_int_positive_pow
. - Implemented
rb_usascii_str_new_lit
. - Define
#getch
and#getpass
onStringIO
whenio/console
is required. - Implemented
rb_uv_to_utf8
(#1998). - Single character IDs now behave more like those in MRI to improve C extension compatibility, so
rb_funcall(a, '+', b)
will now do the same thing as in MRI. - Removed extra public methods on
String
. - Implemented
rb_array_sort
andrb_array_sort_bang
. - Do not create a finalizers
Thread
if there are other public languages, which is helpful for polyglot cases (#2035). - Implemented
rb_enc_isalnum
andrb_enc_isspace
. RUBY_REVISION
is now the full commit hash used to build TruffleRuby, similar to MRI 2.7+.- Implemented
rb_enc_mbc_to_codepoint
. - Changed the lookup methods to achieve Refinements specification (#2033, @ssnickolay)
- Implemented
Digest::Instance#new
(#2040). - Implemented
ONIGENC_MBC_CASE_FOLD
. - Fixed
Thread#raise
to call the exception class' constructor with no arguments when given no message (#2045). - Fixed
refine + super
compatibility (#2039, #2048, @ssnickolay) - Make the top-level exception handler more compatible with MRI (#2047).
- Implemented
rb_enc_codelen
. - Implemented
Ripper
by using the C extension (#1585).
Changes:
- RubyGems gem commands updated to use the
--no-document
option by default.
Performance:
- Enable lazy translation from the parser AST to the Truffle AST for user code by default. This should improve application startup time (#1992).
instance variable ... not initialized
and similar warnings are now optimized to have no peak performance impact if they are not printed (depends on$VERBOSE
).- Implement integer modular exponentiation using
BigInteger#mod_pow
(#1999, @skateman) - Fixed a performance issue when computing many substrings of a given non-leaf
String
with non-US-ASCII characters. - Speedup native handle to Ruby object lookup for C extensions.
TruffleRuby - GraalVM Community Edition 20.1.0
TruffleRuby is a high-performance implementation of the Ruby programming language 2.6.5.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/languages/ruby/
Changelog
New features:
- Nightly builds of TruffleRuby are now available, see the README for details (#1483, @eregon).
||=
will not compile the right-hand-side if it's only executed once, to match the idiomatic lazy-initialisation use-case (blog post, #1887, @kipply).- Added
--metrics-profile-require
option to profile searching, parsing, translating and loading files. - Added support for captured variables for the Truffle instruments (e.g. Chrome debugger).
Bug fixes:
- Fixed
Exception#dup
to copy theException#backtrace
string array. - Fixed
rb_warn
andrb_warning
when used as statements (#1886, @chrisseaton). - Fixed
NameError.new
andNoMethodError.new
:receiver
argument. - Correctly handle large numbers of arguments to
rb_funcall
(#1882, @aardvark179). - Added arity check to
Module#{include, prepend}
. - Fix
OpenSSL::Digest.{digest,hexdigest,base64digest}
to handlealgorithm, data
arguments (#1889, @bdewater). - Fixed
SystemCallError.new
parameter conversion. - Fixed
File#{chmod, umask}
argument conversion check. - Added warning in
Hash.[]
for non-array elements. - Fixed
File.lchmod
to raiseNotImplementedError
when not available. RSTRING_PTR()
now always returns a native pointer, resolving two bugsmemcpy
ing to (#1822) and from (#1772) Ruby Strings.- Fixed issue with duping during splat (#1883, @bjfish).
- Fixed
Dir#children
implementation. - Fixed
SignalException.new
error when bad parameter given. - Added deprecation warning to
Kernel#=~
. - Fixed
puts
for a foreign objects, e.g.puts Polyglot.eval('js', '[]')
(#1881, @pitr-ch). - Fixed
Exception#full_message
implementation. - Updated
Kernel.Complex()
to handle theexception: false
parameter. - Fixed
Kernel#dup
to return self forComplex
andRational
objects. - Updated
Kernel.Float()
to handle theexception: false
parameter. - Fixed
String#unpack
M
format (#1901). - Fixed error when
SystemCallError
message contained non-ASCII characters. - Fixed
rb_rescue
to allow null rescue methods. (#1909, @kipply). - Fixed incorrect comparisons between bignums and doubles.
- Prevented some internal uses of
Kernel#caller_locations
to be overridden by user code (#1934, @norswap). - Fixed an issue caused by recursing inlining within
Regexp#quote
(#1927). - Updated
Kernel.Float()
to return given string in error message (#1945). - Parameters and arity of methods derived from
method_missing
should now match MRI (#1921). - Fixed compile error in
RB_FLOAT_TYPE_P
macro (#1928). - Fixed
Symbol#match
to call the block with theMatchData
(#1933). - Fixed
Digest::SHA2.hexdigest
error with long messages (#1922). - Fixed
Date.parse
to dup the coerced string to not modify original (#1946). - Update
Comparable
error messages for special constant values (#1941). - Fixed
File.ftype
parameter conversion (#1961). - Fixed
Digest::Instance#file
to not modify string literals (#1964). - Make sure that string interpolation returns a
String
, and not a subclass (#1950). alias_method
andinstance_methods
should now work correctly inside a refinement (#1942).- Fixed
Regexp.union
parameter conversion (#1963). IO#read(n)
no longer buffers more than needed, which could cause hanging if detecting readability via a native call such asselect(2)
(#1951).- Fixed
Random::DEFAULT.seed
to be different on boot (#1965, @kipply) rb_encoding->name
can now be read even if therb_encoding
is stored in native memory.- Detect and cut off recursion when inspecting a foreign object, substituting an ellipsis instead.
- Fixed feature lookup order to check every
$LOAD_PATH
path entry for.rb
, then every entry for native extension whenrequire
is called with no extension. - Define the
_DARWIN_C_SOURCE
macro in extension makefiles (#1592). - Change handling of var args in
rb_rescue2
to handle usage in C extensions (#1823). - Fixed incorrect
Encoding::CompatibilityError
raised for some interpolated Regexps (#1967). - Actually unset environment variables with a
nil
value forProcess.spawn
instead of setting them to an empty String. - Core library methods part of the Native Image heap are no longer added in the compilation queue on the first call, but after they reach the thresholds like other methods.
- Fix
RbConfig::CONFIG['LIBRUBY_SO']
file extension. - Fix
char
,short
,unsigned char
,unsigned int
, andunsigned short
types inFiddle
(#1971). - Fix
IO#select
to reallocate its buffer if it is interrupted by a signal. - Fix issue where interpolated string matched
#
within string as being a variable (#1495). - Fix
File.join
to raise error on strings with null bytes. - Fix initialization of Ruby Thread for foreign thread created in Java.
- Fix registration of default specs in RubyGems (#1987).
Compatibility:
- The C API type
VALUE
is now defined asunsigned long
as on MRI. This enablesswitch (VALUE)
and other expressions which rely onVALUE
being an integer type (#1409, #1541, #1675, #1917, #1954). - Implemented
Float#{floor, ceil}
withndigits
argument. - Implemented
Thread#fetch
. - Implemented
Float#truncate
withndigits
argument. - Made
String#{byteslice, slice, slice!}
andSymbol#slice
compatible with endless ranges. - Implemented "instance variable not initialized" warning.
- Make
Kernel#{caller, caller_locations}
andThread#backtrace_locations
compatible with endless ranges. - Implemented
Dir#each_child
. - Implemented
Kernel.{chomp, chop}
andKernel#{chomp, chop}
. - Implemented
-p
and-a
, and-l
CLI options. - Convert the argument to
File.realpath
with#to_path
(#1894). StringIO#binmode
now sets the external encoding to BINARY like MRI (#1898).StringIO#inspect
should not include the contents of theStringIO
(#1898).- Implemented
rb_fd_*
functions (#1623). - Fixed uninitialized variable warnings in core and lib (#1897).
- Make
Thread#backtrace
support omit, length and range arguments. - Implemented
Range#%
. - Fixed the type of the
flags
field ofrb_data_type_t
(#1911). - Implemented
rb_obj_is_proc
(#1908, @kipply, @XrXr). - Implemented C API macro
RARRAY_ASET()
. - Implemented
num2short
(#1910, @kipply). RSTRING_END()
now always returns a native pointer.- Removed
register
specifier forrb_mem_clear()
(#1924). - Implemented
Thread::Backtrace::Locations#base_label
(#1920). - Implemented
rb_mProcess
(#1936). - Implemented
rb_gc_latest_gc_info
(#1937). - Implemented
RBASIC_CLASS
(#1935). - Yield 2 arguments for
Hash#map
if the arity of the block is > 1 (#1944). - Add all
Errno
constants to match MRI, needed by recent RubyGems. - Silence
ruby_dep
warnings since that gem is unmaintained. - Clarify error message for not implemented
Process.daemon
(#1962). - Allow multiple assignments in conditionals (#1513).
- Update
NoMethodError#message
to match MRI (#1957). - Make
StringIO
work with--enable-frozen-string-literal
(#1969). - Support
NULL
for the status ofrb_protect()
. - Ensure
BigDecimal#inspect
does not callBigDecimal#to_s
to avoid behaviour change onto_s
override (#1960). - Define all C-API
rb_{c,m,e}*
constants as C global variables (#1541). - Raise
ArgumentError
forSocket.unpack_sockaddr_un
if the socket family is incorrect. - Implemented
RTYPEDDATA_*()
macros andrb_str_tmp_new()
(#1975). - Implemented
rb_set_end_proc
(#1959). - Implemented
rb_to_symbol
. - Implemented
rb_class_instance_methods
,rb_class_public_instance_methods
,rb_class_protected_instance_methods
, andrb_class_private_instance_methods
. - Implemented
rb_tracepoint_new
,rb_tracepoint_disable
,rb_tracepoint_enable
, andrb_tracepoint_enabled_p
(#1450). - Implemented
RbConfig::CONFIG['AR']
andRbConfig::CONFIG['STRIP']
(#1973). - Not yet implemented C API functions are now correctly detected as missing via
mkmf
'shave_func
(#1980). - Accept
RUBY_INTERNAL_EVENT_{NEWOBJ,FREEOBJ}
events but warn they are not triggered (#1978, #1983). IO.copy_stream(in, STDOUT)
now writes toSTDOUT
without buffering like MRI.- Implemented
RbConfig['vendordir']
. - Implemented
Enumerator::ArithmeticSequence
. - Support
(struct RBasic *)->flags
and->klass
fromruby.h
(#1891, #1884, #1978).
Changes:
TRUFFLERUBY_RESILIENT_GEM_HOME
has been removed. UnsetGEM_HOME
andGEM_PATH
instead if you need to.- The deprecated
Truffle::System.full_memory_barrier
,Truffle::Primitive.logical_processors
, andTruffle::AtomicReference
have been removed. - The implicit interface for allowing Ruby objects to behave as polyglot arrays with
#size
,#[]
methods has been removed and replaced with an explicit interface where each method starts withpolyglot_*
. - Hash keys are no longer reported as polyglot members.
- All remaining implicit polyglot behaviour for
#[]
method was replaced withpolyglot_*
methods. - Rename dynamic API to match InteropLibrary. All the methods keep the name as it is in InteropLibrary with the following changes: use snake_case, add
polyglot_
prefix, dropget
andis
prefix, append?
on all predicates. - Split
Truffle::Interop.write
into.write_array_element
and.write_member
methods. - Rename
Truffle::Interop.size
to.array_size
. - Rename
Truffle::Interop.is_boolean?
to.boolean?
. - Split
Truffle::Interop.read
into.read_member
and.read_array_element
. - Drop
is_
prefix inTruffle::Interop.is_array_element_*
predicates.
...
TruffleRuby - GraalVM Community Edition 20.0.0
TruffleRuby is a high-performance implementation of the Ruby programming language 2.6.5. More information is available on the GraalVM website. Changes in 20.0.0 (from the project changelog):
New features:
- Enable and document
--coverage
option (#1840, @chrisseaton). - Update the internal LLVM toolchain to LLVM 9 and reduce its download size.
- Updated to Ruby 2.6.5 (#1749, @eregon).
- Automatically set
PKG_CONFIG_PATH
as needed for compiling OpenSSL on macOS (#1830).
Bug fixes:
- Fix
Tempfile#{size,length}
when the IO is not flushed (#1765, @rafaelfranca). - Dump and load instance variables in subclasses of
Exception
(#1766, @rafaelfranca). - Fix
Date._iso8601
andDate._rfc3339
when the string is an invalid date (#1773, @rafaelfranca). - Fail earlier for bad handle unwrapping (#1777, @chrisseaton).
- Match out of range
ArgumentError
message with MRI (#1774, @rafaelfranca) - Raise
Encoding::CompatibilityError
with incompatible encodings onRegexp
(#1775, @rafaelfranca). - Fixed interactions between attributes and instance variables in
Struct
(#1776, @chrisseaton). - Coercion fixes for
TCPServer.new
(#1780, @XrXr) - Fix
Float#<=>
not callingcoerce
whenother
argument responds to it (#1783, @XrXr). - Do not warn / crash when requiring a file that sets and trigger autoload on itself (#1779, @XrXr).
- Strip trailing whitespaces when creating a
BigDecimal
with aString
(#1796, @XrXr). - Default
close_others
inProcess.exec
tofalse
like Ruby 2.6 (#1798, @XrXr). - Don't clone methods when setting method to the same visibility (#1794, @XrXr).
BigDecimal()
deal with large rationals precisely (#1797, @XrXr).- Make it possible to call
instance_exec
withrb_block_call
(#1802, @XrXr). - Check for duplicate members in
Struct.new
(#1803, @XrXr). Process::Status#to_i
return rawwaitpid(2)
status (#1800, @XrXr).Process#exec
: set close-on-exec to false for fd redirection (#1805, @XrXr, @rafaelfranca).- Building C extensions should now work with frozen string literals (#1786, @aardvark179).
- Keep the Truffle working directory in sync with the native working directory.
- Rename
to_native
topolyglot_to_native
to matchpolyglot_pointer?
andpolyglot_address
methods. - Fixed missing partial evaluation boundary in
Array#{sort,sort!}
(#1727). - Fixed the class of
self
and the wrappingModule
forKernel#load(path, wrap=true)
(#1739). - Fixed missing polyglot type declaration for
RSTRING_PTR
to help with native/managed interop. - Fixed
Module#to_s
andModule#inspect
to not return an extra#<Class:
for singleton classes. - Arrays backed by native storage now allocate the correct amount of memory (#1828).
- Fixed issue in
ConditionVariable#wait
that could lose aConditionVariable#signal
. - Do not expose TruffleRuby-specific method
Array#swap
(#1816, @pitr-ch) - Fixed
#inspect
on broken UTF-8 sequences (#1842, @chrisseaton). Truffle::Interop.keys
should report methods ofString
andSymbol
(#1817)Kernel#sprintf
encoding validity has been fixed (#1852, @XrXr).- Fixed
ArrayIndexOutOfBoundsException
inFile.fnmatch
(#1845, @bjfish). - Make
String#concat
work with no or multiple arguments (#1519, @norswap). - Make
Array#concat
work with no or multiple arguments (#1519, @norswap). - Coerce
BigDecimal(arg)
usingto_str
(#1826). - Fixed
NameError#dup
,NoMethodError#dup
, andSystemCallError#dup
to copy internal fields. - Make
Enumerable#chunk
work without a block (#1518). - Fixed issue with
SystemCallError.new
setting a backtrace too early. - Fixed
BigDecimal#to_s
formatting issue (#1711). - Run
END
keyword block only once at exit. - Implement
Numeric#clone
to returnself
. - Fixed
Symbol#to_proc
to create aProc
withnil
source_location
(#1663). - Make
GC.start
work with keyword arguments. - Fixed
Kernel#clone
fornil
,true
,false
,Integer
, andSymbol
. - Make top-level methods available in
Context#getBindings()
(#1838). - Made
Kernel#caller_locations
accept a range argument, and returnnil
when appropriate. - Made
rb_respond_to
work with primitives (#1869, @chrisseaton). - Fixed issue with missing backtrace for
rescue $ERROR_INFO
(#1660). - Fixed
Struct#hash
forkeyword_init: true
Struct
. - Fixed
String#{upcase!,downcase!,swapcase!}(:ascii)
for non-ASCII-compatible encodings like UTF-16. - Fixed
String#capitalize!
for strings that weren't full ASCII. - Fixed enumeration issue in
ENV.{select, filter}
. - Fixed
Complex
andRational
should be frozen after initializing. - Fixed
printf
should raise error when not enough arguments for positional argument. - Removed "shadowing outer local variable" warning.
- Fixed parameter conversion to
String
in ENV methods. - Fixed deprecation warning when
ENV.index
is called. - Fixed issue with
ENV.each_key
. - Fixed
ENV.replace
implementation. - Fixed
ENV.udpate
implementation. - Fixed argument handling in
Kernel.printf
. - Fixed character length after conversion to binary from a non-US-ASCII String.
- Fixed issue with installing latest bundler (#1880).
- Fixed type conversion for
Numeric#step
step
parameter. - Fixed
Kernel#Integer
conversion. - Fixed
IO.try_convert
parameter conversion. - Fixed linking of always-inline C API functions with
-std=gnu90
(#1837, #1879). - Avoid race conditions during
gem install
by using a single download thread. RSTRING_PTR()
now always returns a native pointer, resolving two bugsmemcpy
ing to (#1822) and from (#1772) Ruby Strings.- Do not use gems precompiled for MRI on TruffleRuby (#1837).
Compatibility:
- Implemented
String#start_with?(Regexp)
(#1771, @dimameshcharakou). - Various improvements to
SignalException
and signal handling (#1790, @XrXr). - Implemented
rb_utf8_str_new
,rb_utf8_str_new_cstr
,rb_utf8_str_new_static
(#1788, @chrisseaton). - Implemented the
unit
argument ofTime.at
(#1791, @XrXr). - Implemented
keyword_init: true
forStruct.new
(#1789, @XrXr). - Implemented
MatchData#dup
(#1792, @XrXr). - Implemented a native storage strategy for
Array
to allow better C extension compatibility. - Implemented
rb_check_symbol_cstr
(#1814). - Implemented
rb_hash_start
(#1841, @XrXr). - JCodings has been updated from 1.0.42 to 1.0.45.
- Joni has been updated from 2.1.25 to 2.1.30.
- Implemented
Method#<<
andMethod#>>
(#1821). - The
.bundle
file extension is now used for C extensions on macOS (#1819, #1837). - Implemented
Comparable#clamp
(#1517). - Implemented
rb_gc_register_mark_object
andrb_enc_str_asciionly_p
(#1856, @chrisseaton). - Implemented
rb_io_set_nonblock
(#1741). - Include the major kernel version in
RUBY_PLATFORM
on macOS like MRI (#1860, @eightbitraptor). - Implemented
Enumerator::Chain
,Enumerator#+
, andEnumerable#chain
(#1859, #1858). - Implemented
Thread#backtrace_locations
andException#backtrace_locations
(#1556). - Implemented
rb_module_new
,rb_define_class_id
,rb_define_module_id
, (#1876, @XrXr, @chrisseaton). - Implemented
-n
CLI option (#1532). - Cache the
Symbol
of method names in call nodes only when needed (#1872). - Implemented
rb_get_alloc_func
and related functions (#1874, @XrXr). - Implemented
rb_module_new
,rb_define_class_id
,rb_define_module_id
, (#1876, @chrisseaton). - Implemented
ENV.slice
. - Support for the Darkfish theme for RDoc generation has been added back.
- Implemented
Kernel#system
exception: true
option. - Implemented
Random.bytes
. - Implemented
Random.random_number
. - Added the ability to parse endless ranges.
- Made
Range#to_a
compatible with endless ranges. - Made
Array#[]
andArray#[]=
compatible with endless ranges.
Performance:
- Use a smaller limit for identity-based inline caches to improve warmup by avoiding too many deoptimizations.
long[]
array storage now correctly declare that they acceptint
values, reducing deoptimisations and promotions toObject[]
storage.- Enable inline caching of
Symbol
conversion forrb_iv_get
andrb_iv_set
. rb_type
information is now cached on classes as a hidden variable to improve performance.- Change to using thread local buffers for socket calls to reduce allocations.
- Refactor
IO.select
to reduce copying and optimisation boundaries. - Refactor various
String
andRope
nodes to avoid Truffle performance warnings. - Reading caller frames should now work in more cases without deoptimisation.
TruffleRuby - GraalVM Community Edition 19.3.4
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI, version 2.6.5.
The Ruby language component can be added to GraalVM using the gu
utility.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/languages/ruby/
TruffleRuby - GraalVM Community Edition 19.3.3
TruffleRuby is a high-performance implementation of the Ruby programming language.
TruffleRuby aims to be fully compatible with the standard implementation of Ruby, MRI, version 2.6.5.
The Ruby language component can be added to GraalVM using the gu
utility.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/languages/ruby/
TruffleRuby - GraalVM Community Edition 19.3.2
TruffleRuby is a high-performance implementation of the Ruby programming language 2.6.5.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/languages/ruby/
TruffleRuby - GraalVM Community Edition 19.3.1
TruffleRuby is a high-performance implementation of the Ruby programming language 2.6.5. More information is available on the GraalVM website. Changes in 19.3.1:
New features:
Compatibility:
- Implemented
rb_gc_register_mark_object
andrb_enc_str_asciionly_p
(#1856, @chrisseaton). - Support for the Darkfish theme for RDoc generation has been added back.