Releases: oracle/truffleruby
TruffleRuby - GraalVM Community Edition 19.1.0
Ruby is an experimental language in the GraalVM 19.1.0 release.
More information is available on the GraalVM website: http://www.graalvm.org/docs/reference-manual/languages/ruby/
Changes in 19.1.0:
Bug fixes:
- Sharing for thread-safety of objects is now triggered later as intended, e.g., when a second
Thread
is started. - Fixed
Array#to_h
so it doesn't set a default value (#1698). - Removed extra
public
methods onIO
(#1702). - Fixed
Process.kill(signal, Process.pid)
when the signal is trapped as:IGNORE
(#1702). - Fixed
Addrinfo.new(String)
to reliably find the address family (#1702). - Fixed argument checks in
BasicSocket#setsockopt
(#1460). - Fixed
ObjectSpace.trace_object_allocations
(#1456). - Fixed
BigDecimal#{clone,dup}
so it now just returns the receiver, per Ruby 2.5+ semantics (#1680). - Fixed creating
BigDecimal
instances from non-finiteFloat
values (#1685). - Fixed
BigDecimal#inspect
output for non-finite values (e.g, NaN or -Infinity) (#1683). - Fixed
BigDecimal#hash
to return the same value for twoBigDecimal
objects that are equal (#1656). - Added missing
BigDecimal
constant definitions (#1684). - Implemented
rb_eval_string_protect
. - Fixed
rb_get_kwargs
to correctly handle optional and rest arguments. - Calling
Kernel#raise
with a raised exception will no longer set the cause of the exception to itself (#1682). - Return a
FFI::Function
correctly for functions returning a callback. - Convert to intuitive Ruby exceptions when INVOKE fails (#1690).
- Implemented
FFI::Pointer#clear
(#1687). - Procs will now yield to the block in their declaration context even when called with a block argument (#1657).
- Fixed problems with calling POSIX methods if
Symbol#[]
is redefined (#1665). - Fixed sharing of
Array
andHash
elements for thread-safety of objects (#1601). - Fixed concurrent modifications of
Gem::Specification::LOAD_CACHE
(#1601). - Fix
TCPServer#accept
to set#do_not_reverse_lookup
correctly on the createdTCPSocket
.
Compatibility:
- Exceptions from
coerce
are no longer rescued, like MRI. - Implemented
Integer#{allbits?,anybits?,nobits?}
. Integer#{ceil,floor,truncate}
now accept a precision andInteger#round
accepts a rounding mode.- Added missing
Enumerable#filter
andEnumerator::Lazy#filter
aliases to the respectiveselect
method (#1610). - Implemented more
Ripper
methods as no-ops (#1694). - Implemented
rb_enc_sprintf
(#1702). - Implemented
ENV#{filter,filter!}
aliases forselect
andselect!
. - Non-blocking
StringIO
andSocket
APIs now supportexception: false
like MRI (#1702). - Increased compatibility of
BigDecimal
. String#-@
now performs string deduplication (#1608).Hash#merge
now preserves the key order from the original hash for merged values (#1650).- Coerce values given to
FFI::Pointer
methods. FrozenError
is now defined and is used forcan't modify frozen
object exceptions.StringIO
is now available by default like in MRI, because it is required by RubyGems.
Changes:
- Interactive sources (like the GraalVM polyglot shell) now all share the same binding (#1695).
- Hash code calculation has been improved to reduce hash collisions for
Hash
and other cases.
Performance:
eval(code, binding)
for a fixedcode
containing blocks is now much faster. This improves the performance of renderingERB
templates containing loops.rb_str_cat
has been changed to improve performance. THe C string is now concatentated without first being converted to a Ruby string or having its encoding checked. As a side effect the behaviour ofrb_str_cat
should now more closely match that of MRI.
TruffleRuby - GraalVM Community Edition 19.0.2
Ruby is an experimental language in the GraalVM 19.0.2 release. More information is available on the GraalVM website. Changes in 19.0.2:
- Updated to use GraalVM 19.0.2 release.
TruffleRuby - GraalVM Community Edition 19.0.0
Ruby is an experimental language in the GraalVM 19.0.0 release
Bug fixes:
- The debugger now sees global variables as the global scope.
- Temporary variables are no longer visible in the debugger.
- Setting breakpoints on some lines has been fixed.
- The OpenSSL C extension is now always recompiled, fixing various bugs when using the extension (e.g., when using Bundler in TravisCI) (#1676, #1627, #1632).
- Initialize
$0
when not run from the 'ruby' launcher, which is needed torequire
gems (#1653).
Compatibility:
do...end
blocks can now haverescue/else/ensure
clauses like MRI (#1618).
Changes:
TruffleRuby.sulong?
has been replaced byTruffleRuby.cexts?
, andTruffleRuby.graal?
has been replaced byTruffleRuby.jit?
. The old methods will continue to work for now, but will produce warnings, and will be removed at a future release.
TruffleRuby - GraalVM Community Edition 1.0 RC16
Bug fixes:
- Fixed
Hash#merge
with no arguments to return a new copy of the receiver (#1645). - Fixed yield with a splat and keyword arguments (#1613).
- Fixed
rb_scan_args
to correctly handle kwargs in combination with optional args. - Many fixes for
FFI::Pointer
to be more compatible with theffi
gem.
New features:
- Rounding modes have been implemented or improved for
Float
,Rational
,BigDecimal
(#1509). - Support Homebrew installed in other prefixes than
/usr/local
(#1583). - Added a pure-Ruby implementation of FFI which passes almost all Ruby FFI specs (#1529, #1524).
Changes:
- Support for the Darkfish theme for RDoc generation has been removed.
Compatibility:
- The
KeyError
raised fromENV#fetch
andHash#fetch
now matches MRI's message formatting (#1633). - Add the missing
key
andreceiver
values toKeyError
raised fromENV#fetch
. String#unicode_normalize
has been moved to the core library like in MRI.StringScanner
will now match a regexp beginning with^
even when not scanning from the start of the string.Module#define_method
is now public like in MRI.Kernel#warn
now supports theuplevel:
keyword argument.
TruffleRuby - GraalVM Community Edition 1.0 RC15
Bug fixes:
- Improved compatibility with MRI's
Float#to_s
formatting (#1626). - Fixed
String#inspect
when the string uses a non-UTF-8 ASCII-compatible encoding and has non-ASCII characters. - Fixed
puts
for strings with non-ASCII-compatible encodings. rb_protect
now returnsQnil
when an error occurs.- Fixed a race condition when using the interpolate-once (
/o
) modifier in regular expressions. - Calling
StringIO#close
multiple times no longer raises an exception (#1640). - Fixed a bug in include file resolution when compiling C extensions.
New features:
Process.clock_getres
has been implemented.
Changes:
debug
,profile
,profiler
, which were already marked as unsupported, have been removed.- Our experimental JRuby-compatible Java interop has been removed - use
Polyglot
andJava
instead. - The Trufle handle patches applied to
psych
C extension have now been removed. - The
rb_tr_handle_*
functions have been removed as they are no longer used in any C extension patches.
Bug fixes:
autoload :C, "path"; require "path"
now correctly triggers the autoload.- Fixed
UDPSocket#bind
to specify family and socktype when resolving address. - The
shell
standard library can now berequire
-d. - Fixed a bug where
for
could result in aNullPointerException
when trying to assign the iteration variable. - Existing global variables can now become aliases of other global variables (#1590).
Compatibility:
TruffleRuby - GraalVM Community Edition 1.0 RC14
Updated to Ruby 2.6.2.
Bug fixes:
- Implement
rb_io_wait_writable
(#1586). - Fixed error when using arrows keys first within
irb
orpry
(#1478, #1486). - Coerce the right hand side for all
BigDecimal
operations (#1598). - Combining multiple
**
arguments containing duplicate keys produced an incorrect hash. This has now been fixed (#1469). IO#read_nonblock
now returns the passed buffer object, if one is supplied.- Worked out autoloading issue (#1614).
New features:
- Implemented
String#delete_prefix
,#delete_suffix
, and related methods. - Implemented
Dir.children
andDir#children
. - Implemented
Integer#sqrt
.
Changes:
-Xoptions
has been removed - use--help:languages
instead.-Xlog=
has been removed - use--log.level=
instead.-J
has been removed - use--vm.
instead.-J-cp lib.jar
and so on have removed - use--vm.cp=lib.jar
or--vm.classpath=lib.jar
instead.--jvm.
and--native.
have been deprecated, use--vm.
instead to pass VM options.-Xoption=value
has been removed - use--option=value
instead.- The
-X
option now works as in MRI. --help:debug
is now--help:internal
.ripper
is still not implemented, but the module now exists and has some methods that are implemented as no-ops.
TruffleRuby - GraalVM Community Edition 1.0 RC13
Note that as TruffleRuby RC 13 is built on Ruby 2.4.4 it is still vulnerable to CVE-2018-16395.
This will be fixed in the next release.
New features:
- Host interop with Java now works on SubstrateVM too.
Bug fixes:
- Fixed Enumerator::Lazy which wrongly rescued StandardError (#1557).
- Fixed several problems with
Numeric#step
related to default arguments, infinite sequences, and bad argument types (#1520). - Fixed incorrect raising of
ArgumentError
withRange#step
when at least one component of theRange
isFloat::INFINITY
(#1503). - Fixed the wrong encoding being associated with certain forms of heredoc strings (#1563).
- Call
#coerce
on right hand operator ifBigDecimal
is the left hand operator (#1533). - Fixed return type of division of
Integer.MIN_VALUE
andLong.MIN_VALUE
by -1 (#1581). Exception#cause
is now correctly set for internal exceptions (#1560).rb_num2ull
is now implemented as well as being declared in the ruby.h header (#1573).rb_sym_to_s
is now implemented (#1575).R_TYPE_P
now returns the type number for a wider set of Ruby objects (#1574).rb_fix2str
has now been implemented.rb_protect
will now work even ifNilClass#==
has been redefined.BigDecimal
has been moved out of theTruffle
module to match MRI.StringIO#puts
now correctly handlesto_s
methods which do not return strings (#1577).Array#each
now behaves like MRI when the array is modified (#1580).- Clarified that
$SAFE
can never be set to a non-zero value. - Fix compatibility with RubyGems 3 (#1558).
Kernel#respond_to?
now returns false if a method is protected and theinclude_all
argument is false (#1568).
Changes:
TRUFFLERUBY_CEXT_ENABLED
is no longer supported and C extensions are now always built, regardless of the value of this environment variable.- Getting a substring of a string created by a C extension now uses less memory as only the requested portion will be copied to a managed string.
-Xoptions
has been deprecated and will be removed - use--help:languages
instead.-Xlog=
has been deprecated and will be removed - use--log.level=
instead.-J
has been deprecated and will be removed - use--jvm.
instead.-J-cp lib.jar
and so on have been deprecated and will be removed - use--jvm.cp=lib.jar
or--jvm.classpath=lib.jar
instead.-J-cmd
,--jvm.cmd
,JAVA_HOME
,JAVACMD
, andJAVA_OPTS
do not work in any released configuration of TruffleRuby, so have been removed.-Xoption=value
has been deprecated and will be removed - use--option=value
instead.TracePoint
now raises anArgumentError
for unsupported events.TracePoint.trace
andTracePoint#inspect
have been implemented.
Compatibility:
- Improved the exception when an
-S
file isn't found. - Removed the message from exceptions raised by bare
raise
to better match MRI (#1487). TracePoint
now handles the:class
event.
Performance:
- Sped up
String
handling in native extensions, quite substantially in some cases, by reducing conversions between native and managed strings and allowing for mutable metadata in native strings.
TruffleRuby - GraalVM Community Edition 1.0 RC12
Bug fixes:
- Fixed a bug with
String#lines
and similar methods with multibyte
characters (#1543). - Fixed an issue with
String#{encode,encode!}
double-processing strings
using XML conversion options and a new destination encoding (#1545). - Fixed a bug where a raised cloned exception would be caught as the
original exception (#1542). - Fixed a bug with
StringScanner
and patterns starting with^
(#1544). - Fixed
Enumerable::Lazy#uniq
with infinite streams (#1516).
Compatibility:
TruffleRuby - GraalVM Community Edition 1.0 RC11
New features:
- macOS clocks
CLOCK_MONOTONIC_RAW
,_MONOTONIC_RAW_APPROX
,_UPTIME_RAW
,
_UPTIME_RAW_APPROX
, and_PROCESS_CPUTIME_ID
have been implemented (#1480). - TruffleRuby now automatically detects native access and threading permissions
from theContext
API, and can run code with no permissions given (Context.create()
).
Bug fixes:
- FFI::Pointer now does the correct range checks for signed and unsigned values.
- Allow signal
0
to be used withProcess.kill
(#1474). IO#dup
now properly sets the newIO
instance to be close-on-exec.IO#reopen
now properly resets the receiver to be close-on-exec.StringIO#set_encoding
no longer raises an exception if the underlying
String
is frozen (#1473).- Fix handling of
Symbol
encodings inMarshal#dump
andMarshal#load
(#1530).
Compatibility:
- Implemented
Dir.each_child
. - Adding missing support for the
close_others
option toexec
andspawn
. - Implemented the missing
MatchData#named_captures
method (#1512).
Changes:
Process::CLOCK_
constants have been given the same value as in standard
Ruby.
Performance:
- Sped up accesses to native memory through FFI::Pointer.
- All core files now make use of frozen
String
literals, reducing the number
ofString
allocations for core methods. - New -Xclone.disable option to disable all manual cloning.
TruffleRuby - GraalVM Community Edition 1.0 RC10
New features:
- The
nkf
andkconv
standard libraries were added (#1439). Mutex
andConditionVariable
have a new fast path for acquiring locks
that are unlocked.Queue
andSizedQueue
,#close
and#closed?
, have been implemented.Kernel#clone(freeze)
has been implemented (#1454).Warning.warn
has been implemented (#1470).Thread.report_on_exception
has been implemented (#1476).- The emulation symbols for
Process.clock_gettime
have been implemented.
Bug fixes:
- Added
rb_eEncodingError
for C extensions (#1437). - Fixed race condition when creating threads (#1445).
- Handle
exception: false
for IO#write_nonblock (#1457). File.expand_path
now raises an exception for a non-absolute user-home.ArgumentError
messages now better match MRI (#1467).- Added support for
:float_millisecond
,:millisecond
, and
:second
time units toProcess.clock_gettime
(#1468). - Fixed backtrace of re-raised exceptions (#1459).
- Updated an exception message in Psych related to loading a non-existing
class so that it now matches MRI. - Fixed a JRuby-style Java interop compatibility issue seen in
test-unit
. - Fixed problem with calling
warn
if$stderr
has been reassigned. - Fixed definition of
RB_ENCODING_GET_INLINED
(#1440).
Changes:
- Timezone messages are now logged at
CONFIG
level, use-Xlog=CONFIG
to
debug if the timezone is incorrectly shown asUTC
.