Releases: oracle/truffleruby
TruffleRuby - GraalVM Community Edition 19.3.0.2
Ruby is an experimental language in the GraalVM 19.3.0.2 release. More information is available on the GraalVM website.
TruffleRuby - GraalVM Community Edition 19.3.0
Ruby is an experimental language in the GraalVM 19.3.0 release. More information is available on the GraalVM website. Changes in 19.3.0 (from the project changelog):
New features:
- Compilation of C extensions is now done with an internal LLVM toolchain producing both native code and bitcode. This means more C extensions should compile out of the box and this should resolve most linker-related issues.
- It is no longer necessary to install LLVM for installing C extensions on TruffleRuby.
- It is no longer necessary to install libc++ and libc++abi for installing C++ extensions on TruffleRuby.
- On macOS, it is no longer necessary to install the system headers package (#1417).
- License updated to EPL 2.0/GPL 2.0/LGPL 2.1 like recent JRuby.
Bug fixes:
rb_undef_method
now works for private methods (#1731, @cky).- Fixed several issues when requiring C extensions concurrently (#1565, @eregon).
self.method ||= value
with a private method now works correctly (#1673, @pitr-ch).- Fixed
RegexpError: invalid multibyte escape
for binary regexps with a non-binary String (#1433, @aardvark179). - Arrays now report their methods to other languages for interopability (#1768).
- Installing
sassc
now works due to using the LLVM toolchain (#1753). - Renamed
Truffle::Interop.respond_to?
to avoid conflict with Ruby'srespond_to?
(#1491). - Warn only if
$VERBOSE
istrue
when a magic comment is ignored (#1757, @nirvdrum). - Make C extensions use the same libssl as the one used for the openssl C extension (#1770).
Compatibility:
GC.stat
can now take an optional argument (#1716, @kirs).Kernel#load
withwrap
has been implemented (#1739, @chrisseaton).- Implemented
Kernel#spawn
with:chdir
(#1492). - Implemented
rb_str_drop_bytes
, notably used by OpenSSL (#1740, @cky). - Include executables of default gems, needed for
rails new
in Rails 6. - Use compilation flags similar to MRI for C extension compilation.
- Warn for
gem update --system
as it is not fully supported yet and is often not needed. - Pass
-undefined dynamic_lookup
to the linker on macOS like MRI.
Performance:
- Core methods are no longer always cloned, which reduces memory footprint and should improve warmup.
- Inline cache calls to
rb_intern()
with a constant name in C extensions. - Improve allocation speed of native handles for C extensions.
- Improve the performance of
NIL_P
andINT2FIX
in C extensions. - Various fixes to improve Rack performance.
- Optimize
String#gsub(String)
by not creating aRegexp
and usingString#index
instead. - Fixed "FrameWithoutBoxing should not be materialized" compilation issue in
TryNode
.
The general GraalVM 19.2.0 release notes are available on the graalvm.org website.
TruffleRuby - GraalVM Community Edition 19.2.1
Ruby is an experimental language in the GraalVM 19.2.1 release. More information is available on the GraalVM website. Changes in 19.2.1:
- Updated to use GraalVM 19.2.1 release.
The general GraalVM 19.2.1 release notes are available on the the graalvm.org website.
TruffleRuby - GraalVM Community Edition 19.2.0.1
Ruby is an experimental language in the GraalVM 19.2.0.1 release. More information is available on the GraalVM website. Changes in 19.2.0.1:
- Updated to use GraalVM 19.2.0.1 release.
The general GraalVM 19.2.0.1 release notes are available on the graalvm.org website.
TruffleRuby - GraalVM Community Edition 19.2.0
Ruby is an experimental language in the GraalVM 19.2.0 release. More information is available on the GraalVM website. Changes in 19.2.0 (from the project changelog):
New features:
Fiddle
has been implemented.
Bug fixes:
- Set
RbConfig::CONFIG['ruby_version']
to the same value as the TruffleRuby version. This fixes reusing C extensions between different versions of TruffleRuby with Bundler (#1715). - Fixed
Symbol#match
returningMatchData
(#1706). - Allow
Time#strftime
to be called with binary format strings. - Do not modify the argument passed to
IO#write
when the encoding does not match (#1714). - Use the class where the method was defined to check if an
UnboundMethod
can be used for#define_method
(#1710). - Fixed setting
$~
forEnumerable
andEnumerator::Lazy
's#grep
and#grep_v
. - Improved errors when interacting with single-threaded languages (#1709).
Compatibility:
- Added
Kernel#then
(#1703). FFI::Struct#[]=
is now supported for inline character arrays.blocking: true
is now supported forFFI::Library#attach_function
.- Implemented
Proc#>>
and#<<
(#1688). Thread.report_on_exception
is nowtrue
by default like MRI 2.5+.BigDecimal
compatibility has been generally improved in several ways.
Changes:
- An interop read message sent to a
Proc
will no longer call theProc
.
Performance:
- Several
String
methods have been made faster by the usage of vector instructions
when searching for a single-byte character in a String. - Methods needing the caller frame are now better optimized.
The general GraalVM 19.2.0 release notes are available on the graalvm.org website.
TruffleRuby - GraalVM Community Edition 19.2.0-dev-b01
This is a preview release for 19.2 and we recommend testing it for all users.
TruffleRuby - GraalVM Community Edition 19.1.1
Ruby is an experimental language in the GraalVM 19.1.1 release. More information is available on the GraalVM website. Changes in 19.1.1:
- Updated to use GraalVM 19.1.1 release.
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.