TruffleRuby - GraalVM Community Edition 1.0 RC5
Pre-release
Pre-release
lukasstadler
released this
03 Aug 12:43
·
17808 commits
to master
since this release
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.