Skip to content

TruffleRuby - GraalVM Community Edition 1.0 RC5

Pre-release
Pre-release
Compare
Choose a tag to compare
@lukasstadler 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) to PATH on macOS.
  • Improve error message when LLVM, clang or opt 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 return nil 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 calls main.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 if WeakRef 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 by pry's binding.pry.
  • Resolve symlinks in GEM_HOME and GEM_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 NativeRopes now make a copy of the rope when duped.
  • 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 and String#unpack tainting, and a better
    implementation of P and p.
  • 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 and TRUFFLERUBY_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 and PATCH have been removed.