Releases: oracle/truffleruby
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
.
TruffleRuby - GraalVM Community Edition 1.0 RC9
Security:
- CVE-2018-16396, tainted flags are not propagated in Array#pack and String#unpack with some directives has been mitigated by adding additional taint operations.
New features:
- LLVM for Oracle Linux 7 can now be installed without building from source.
Bug fixes
- Times can now be created with UTC offsets in
+/-HH:MM:SS
format. Proc#to_s
now hasASCII-8BIT
as its encoding instead of the incorrectUTF-8
.String#%
now has the correct encoding forUTF-8
andUS-ASCII
format strings, instead of the incorrectASCII-8BIT
.- Updated
BigDecimal#to_s
to usee
instead ofE
for exponent notation. - Fixed
BigDecimal#to_s
to allowf
as a format flag to indicate conventional floating point notation. Previously onlyF
was allowed.
Changes:
- The supported version of LLVM for Oracle Linux has been updated from 3.8 to 4.0.
mysql2
is now patched to avoid a bug in passingNULL
torb_scan_args
, and now passes the majority of its test suite.- The post-install script now automatically detects if recompiling the OpenSSL C extension is needed. The post-install script should always be run in TravisCI as well, see
doc/user/standalone-distribution.md
. - Detect when the system libssl is incompatible more accurately and add instructions on how to recompile the extension.
TruffleRuby - GraalVM Community Edition 1.0 RC8
TruffleRuby is high performance implementation of the Ruby programming language, compatible with MRI 2.4.4.
TruffleRuby is progressing fast but is currently probably not ready for you to try running your full Ruby application on. However it is ready for experimentation and curious end-users to try on their gems and smaller applications.
TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it is missing support for Nokogiri and ActiveRecord database drivers which makes it not practical to run real Rails applications at the moment.
The Ruby language components can be installed in GraalVM using the gu utility.
Release Notes
New features:
Java.synchronized(object) { }
andTruffleRuby.synchronized(object) { }
methods have been added.- Added a
TruffleRuby::AtomicReference
class. - Ubuntu 18.04 LTS is now supported.
- macOS 10.14 (Mojave) is now supported.
Changes:
- Random seeds now use Java's
NativePRNGNonBlocking
. - The supported version of Fedora is now 28, upgraded from 25.
- The FFI gem has been updated from 1.9.18 to 1.9.25.
- JCodings has been updated from 1.0.30 to 1.0.40.
- Joni has been updated from 2.1.16 to 2.1.25.
Performance
- Performance of setting the last exception on a thread has now been improved.
TruffleRuby - GraalVM Community Edition 1.0 RC7
TruffleRuby is high performance implementation of the Ruby programming language, compatible with MRI 2.4.4.
TruffleRuby is progressing fast but is currently probably not ready for you to try running your full Ruby application on. However it is ready for experimentation and curious end-users to try on their gems and smaller applications.
TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it is missing support for Nokogiri and ActiveRecord database drivers which makes it not practical to run real Rails applications at the moment.
The Ruby language components can be installed in GraalVM using the gu utility.
Release Notes
New features:
- Useful
inspect
strings have been added for more foreign objects. - The C extension API now defines a preprocessor macro
TRUFFLERUBY
. - Added the rbconfig/sizeof native extension for better MRI compatibility.
- Support for
pg
1.1. The extension now compiles successfully, but
may still have issues with some datatypes.
Bug fixes:
readline
can now be interrupted by the interrupt signal (Ctrl+C). This fixes
Ctrl+C to work in IRB.- Better compatibility with C extensions due to a new "managed struct" type.
- Fixed compilation warnings which produced confusing messages for end users (#1422).
- Improved compatibility with Truffle polyglot STDIO.
- Fixed version check preventing TruffleRuby from working with Bundler 2.0 and
later (#1413). - Fixed problem with
Kernel.public_send
not tracking its caller properly (#1425). rb_thread_call_without_gvl()
no longer holds the C-extensions lock.- Fixed
caller_locations
when called insidemethod_added
. - Fixed
mon_initialize
when called insideinitialize_copy
(#1428). Mutex
correctly raises aTypeError
when trying to serialize withMarshal.dump
.
Performance:
- Reduced memory footprint for private/internal AST nodes.
- Increased the number of cases in which string equality checks will become
compile-time constants. - Major performance improvement for exceptional paths where the rescue body
does not access the exception object (e.g.,x.size rescue 0
).
Changes:
- Many clean-ups to our internal patching mechanism used to make some native
extensions run on TruffleRuby. - Removed obsoleted patches for Bundler compatibility now that Bundler 1.16.5
has built-in support for TruffleRuby. - Reimplemented exceptions and other APIs that can return a backtrace to use
Truffle's lazy stacktraces API.
TruffleRuby - GraalVM Community Edition 1.0 RC6
TruffleRuby is high performance implementation of the Ruby programming language, compatible with MRI 2.4.4.
TruffleRuby is progressing fast but is currently probably not ready for you to try running your full Ruby application on. However it is ready for experimentation and curious end-users to try on their gems and smaller applications.
TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it is missing support for Nokogiri and ActiveRecord database drivers which makes it not practical to run real Rails applications at the moment.
The Ruby language components can be installed in GraalVM using the gu utility.
Release Notes
New features:
Polyglot.export
can now be used with primitives, and will now convert
strings to Java, and.import
will convert them from Java.- Implemented
--encoding
,--external-encoding
,--internal-encoding
. rb_object_tainted
and similar C functions have been implemented.rb_struct_define_under
has been implemented.RbConfig::CONFIG['sysconfdir']
has been implemented.Etc
has been implemented (#1403).- The
-Xcexts=false
option disables C extensions. - Instrumentation such as the CPUSampler reports methods in a clearer way like
Foo#bar
,Gem::Specification.each_spec
,block in Foo#bar
instead of just
bar
,each_spec
,block in bar
(which is what MRI displays in backtraces). - TruffleRuby is now usable as a JSR 223 (
javax.script
) language. - A migration guide from JRuby (
doc/user/jruby-migration.md
) is now included. kind_of?
works as an alias foris_a?
on foreign objects.- Boxed foreign strings unbox on
to_s
,to_str
, andinspect
.
Bug fixes:
- Fix false-positive circular warning during autoload.
- Fix Truffle::AtomicReference for
concurrent-ruby
. - Correctly look up
llvm-link
alongclang
andopt
so it is no longer
needed to add LLVM toPATH
on macOS for Homebrew and MacPorts. - Fix
alias
to work when in a refinement module (#1394). Array#reject!
no longer truncates the array if the block raises an
exception for an element.- WeakRef now has the same inheritance and methods as MRI's version.
- Support
-Wl
linker argument for C extensions. Fixes compilation ofmysql2
andpg
. - Using
Module#const_get
with a scoped argument will now correctly
autoload the constant if needed. - Loaded files are read as raw bytes, rather than as a UTF-8 string and then
converted back into bytes. - Return 'DEFAULT' for
Signal.trap(:INT) {}
. Avoids a backtrace when quitting
a Sinatra server with Ctrl+C. - Support
Signal.trap('PIPE', 'SYSTEM_DEFAULT')
, used by the gemrouge
(#1411). - Fix arity checks and handling of arity
-2
forrb_define_method()
. - Setting
$SAFE
to a negative value now raises aSecurityError
. - The offset of
DATA
is now correct in the presence of heredocs. - Fix double-loading of the
json
gem, which led to duplicate constant
definition warnings. - Fix definition of
RB_NIL_P
to be early enough. Fixes compilation of
msgpack
. - Fix compilation of megamorphic interop calls.
Kernel#singleton_methods
now correctly ignores prepended modules of
non-singleton classes. Fixes loadingsass
whenactivesupport
is loaded.- Object identity numbers should never be negative.
Performance:
- Optimize keyword rest arguments (
def foo(**kwrest)
). - Optimize rejected (non-Symbol keys) keyword arguments.
- Source
SecureRandom.random_bytes
from/dev/urandom
rather than OpenSSL. - C extension bitcode is no longer encoded as Base64 to pass it to Sulong.
- Faster
String#==
using vectorization.
Changes:
- Clarified that all sources that come in from the Polyglot API
eval
method
will be treated as UTF-8, and cannot be re-interpreted as another encoding
using a magic comment. - The
-Xembedded
option can now be set set on the launcher command line. - The
-Xplatform.native=false
option can now load the core library, by
enabling-Xpolyglot.stdio
. $SAFE
andThread#safe_level
now cannot be set to1
- raising an error
rather than warning as before.-Xsafe
allows it to be set, but there are
still no checks.- Foreign objects are now printed as
#<Foreign:system-identity-hash-code>
,
except for foreign arrays which are now printed as#<Foreign [elements...]>
. - Foreign objects
to_s
now callsinspect
rather than Java'stoString
. - The embedded configuration (
-Xembedded
) now warns about features which may
not work well embedded, such as signals. - The
-Xsync.stdio
option has been removed - use standard Ruby
STDOUT.sync = true
in your program instead.
TruffleRuby - GraalVM Community Edition 1.0 RC5
TruffleRuby is high performance implementation of the Ruby programming language, compatible with MRI 2.4.4.
TruffleRuby is progressing fast but is currently probably not ready for you to try running your full Ruby application on. However it is ready for experimentation and curious end-users to try on their gems and smaller applications.
TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it is missing support for Nokogiri and ActiveRecord database drivers which makes it not practical to run real Rails applications at the moment.
The Ruby language components can be installed in GraalVM using the gu
utility.
Release Notes
New features:
- It is no longer needed to add LLVM (
/usr/local/opt/llvm@4/bin
) toPATH
on macOS. - Improve error message when LLVM,
clang
oropt
is missing. - Automatically find LLVM and libssl with MacPorts on macOS (#1386).
--log.ruby.level=
can be used to set the log level from any launcher.- Add documentation about installing with Ruby managers/installers and how to
run TruffleRuby in CI such as TravisCI (#1062, #1070). String#unpack1
has been implemented.
Bug fixes:
- Allow any name for constants with
rb_const_get()
/rb_const_set()
(#1380). - Fix
defined?
with an autoload constant to not raise but returnnil
if the autoload fails (#1377). - Binary Ruby Strings can now only be converted to Java Strings if they only
contain US-ASCII characters. Otherwise, they would produce garbled Java Strings (#1376). #autoload
now correctly callsmain.require(path)
dynamically.- Hide internal file from user-level backtraces (#1375).
- Show caller information in warnings from the core library (#1375).
#require
and#require_relative
should keep symlinks in$"
and__FILE__
(#1383).- Random seeds now always come directly from
/dev/urandom
for MRI compatibility. - SIGINFO, SIGEMT and SIGPWR are now defined (#1382).
- Optional and operator assignment expressions now return the value
assigned, not the value returned by an assignment method (#1391). WeakRef.new
will now return the correct type of object, even ifWeakRef
is subclassed (#1391).- Resolving constants in prepended modules failed, this has now been fixed (#1391).
- Send and
Symbol#to_proc
now take account of refinements at their call sites (#1391). - Better warning when the timezone cannot be found on WSL (#1393).
- Allow special encoding names in
String#force_encoding
and raise an exception on bad encoding names (#1397). - Fix
Socket.getifaddrs
which would wrongly return an empty array (#1375). Binding
now remembers the file and line at which it was created for#eval
.
This is notably used bypry
'sbinding.pry
.- Resolve symlinks in
GEM_HOME
andGEM_PATH
to avoid related problems (#1383). - Refactor and fix
#autoload
so other threads see the constant defined while
the autoload is in progress (#1332). - Strings backed by
NativeRope
s now make a copy of the rope whendup
ed. String#unpack
now taints return strings if the format was tainted, and
now does not taint the return array if the format was tainted.- Lots of fixes to
Array#pack
andString#unpack
tainting, and a better
implementation ofP
andp
. - Array literals could evaluate an element twice under some circumstances.
Performance:
- Optimize required and optional keyword arguments.
rb_enc_to_index
is now faster by eliminating an expensive look-up.
Changes:
-Xlog=
now needs log level names to be upper case.-Dtruffleruby.log
andTRUFFLERUBY_LOG
have been removed -
use-Dpolyglot.log.ruby.level
.- The log format, handlers, etc are now managed by the Truffle logging system.
- The custom log levels
PERFORMANCE
andPATCH
have been removed.
TruffleRuby - GraalVM Community Edition 1.0 RC4
RC4 only updates the functionality of Graal JavaScript.
Therefore, RC4 does not update the functionality of the Ruby component compared to RC3.
Ruby users only need to update to RC4 if they want to use Ruby from GraalVM 1.0.0 RC4.