Skip to content

Releases: rubinius/rubinius

Release 5.0

16 May 23:59
a0a9ed9
Compare
Choose a tag to compare

Version 5.0 (2020-05-16)

Release 4.20

21 Apr 06:12
20e3b6c
Compare
Choose a tag to compare

Version 4.20 (2020-04-20)

  • JIT: "I'm back fam" 😻 (Brian Shirai)
    Narrator: "Kinda, sorta"

Release 4.19

21 Apr 05:26
78a7cb8
Compare
Choose a tag to compare

Version 4.19 (2020-04-20)

  • Clean up some deprecations. (Brian Shirai)

Release 4.18

21 Apr 04:57
b4d5c34
Compare
Choose a tag to compare

Version 4.18 (2020-04-20)

  • Distributed ThreadNexus to Machine, Threads, ThreadState. (Brian Shirai)

Release 4.16

17 Apr 04:45
43a6850
Compare
Choose a tag to compare

Version 4.16 (2020-02-22)

  • 🤷 (Brian Shirai)

  • Start updating README. (Brian Shirai)

  • Move more of Environment into Machine. (Brian Shirai)

  • Removed C++ tests. (Brian Shirai)
    Maintaining these tests for a decade, I can confidently state they don't
    add enough value to compensate for the maintenance cost. As more C++
    code (eg primitives, object classes) are replaced by instructions, the
    value of the tests diminishes even more.

  • Removed configure step for machine tests. (Brian Shirai)

  • Moved locks to Machine. (Brian Shirai)

  • Removed remnants of C++ tests. (Brian Shirai)

  • Boot and halt on main thread. (Brian Shirai)

  • Update README.md (Brian Shirai)

  • Update README.md (Brian Shirai)

  • Update README.md (Brian Shirai)

  • Removed old concurrency utils. (Brian Shirai)

  • Update README.md (Brian Shirai)

  • Update README.md (Brian Shirai)

  • Some Channel and misc cleanup. (Brian Shirai)

  • More Thread, ThreadState cleanup. (Brian Shirai)

  • Finalize UnwindSite caches. (Brian Shirai)

  • Release last ThreadState. (Brian Shirai)

  • Don't discard MachineThread ThreadState on fork. (Brian Shirai)

Release 4.15

02 Feb 17:49
21e83c4
Compare
Choose a tag to compare

Version 4.15 (2020-02-02)

  • Try a GitHub Action for CI. (Brian Shirai)
  • Tabs 😭. (Brian Shirai)
  • My castle for a CLI linter. (Brian Shirai)
  • Name some things. (Brian Shirai)
  • Fifth times a charm?. (Brian Shirai)
  • Shotgun the packages. (Brian Shirai)
  • Maybe later GitHub Actions. 👋 (Brian Shirai)
  • Dispose of ExtendedHeaders at the end of a GC cycle. (Brian Shirai)
  • Ensure CallFrame is initialized. (Brian Shirai)
  • Added undefined behavior sanitizer to --sanitize. (Brian Shirai)
  • Run specs in small batches. (Brian Shirai)
  • Clean up some old stuff. (Brian Shirai)
  • Try Bionic again. (Brian Shirai)
  • Release rapidjson document storage. (Brian Shirai)
  • Revert "Release rapidjson document storage." (Brian Shirai)
    The diagnostics JSON reporters need reworking.

This reverts commit be1e28c.

  • Remove obsolete JIT file. (Brian Shirai)
  • Introduce new Machine structure. (Brian Shirai)
    This provides proper and orderly creation of all the virtual machine
    components, and the orderly destruction of those components when the
    virtual machine halts.

[x] 1. Add Machine to SharedState;
[x] 1. Pass Machine through Environment to SharedState

[x] 1. Move SharedState items for env into Environment;

[x] 1. Move Configuration to Machine;

[x] 1. Move ThreadNexus to Machine;

Fixnum is deprecated.

[x] 1. Move MachineThreads to Machine;

[x] 1. Move Collector to Machine;

[x] 1. Move Memory to Machine;

[x] 1. Move SymbolTable into Memory;

[x] 1. Move Globals into Memory;

Make VM tests pass for now.

  • Add task to show CodeDB dir. (Brian Shirai)

  • Revert "Add task to show CodeDB dir." (Brian Shirai)
    This reverts commit 2b6949e.

  • Locate the CodeDB for the VM tests. (Brian Shirai)

  • Removed SharedState, VMThreadState. (Brian Shirai)

  • Moved State to ThreadState. (Brian Shirai)
    This is a first step to eliminating VM and ManagedThread.

  • Removed ManagedThread. (Brian Shirai)

  • Removed VM. (Brian Shirai)

  • Back to the ol' Trusty. (Brian Shirai)
    There is some process or IO related issue on Bionic that is extremely
    puzzling.

  • Ok, fine, fail on Bionic then. (Brian Shirai)
    Revert "Back to the ol' Trusty."

This reverts commit a53fd06.

  • More cleanup. (Brian Shirai)
    Removed MachineThreads list. Specific MachineThread's lifecycle
    functions are called directly. Handling around fork() moved to Machine.
    Some Console cleanup.

  • Let backtrace locations wrap. (Brian Shirai)

  • Clean a few spec tags. (Brian Shirai)

Release 4.14

26 Jan 20:53
02f6c52
Compare
Choose a tag to compare

Version 4.14 (2020-01-26)

  • Added start of array-type instructions. (Brian Shirai)

  • Revert "Disable experimental compiler plugins." (Brian Shirai)
    This reverts commit 806f3be.

  • More work on array-type instructions. (Brian Shirai)

  • Added --sanitize configure flag. (Brian Shirai)
    This doesn't work yet on macOS 😭

    clang: error: unsupported option '-fsanitize=leak' for target 'x86_64-apple-darwin19.2.0'

  • Fix warning on Ubuntu Bionic. (Brian Shirai)
    machine/ffi_util.cpp:53:10: warning: In the GNU C Library, "major" is defined by <sys/sysmacros.h>.
    For historical compatibility, it is currently defined by <sys/types.h> as well, but we plan to
    remove this soon. To use "major", include <sys/sysmacros.h> directly. If you did not intend to
    use a system-defined macro "major", you should undefine it after including <sys/types.h>.
    [-W#pragma-messages]

  • Switch to AddressSanitizer. (Brian Shirai)

  • Enhance --sanitize configure option. (Brian Shirai)

  • Exclude sysmacros.h on macOS. (Brian Shirai)

  • Clean up some Valgrind-exposed memory leaks. (Brian Shirai)

  • Use unsynchronized set during GC. (Brian Shirai)
    We only run one thread during GC, so we don't need synchronized (un)set.

  • Track code return value for GC. (Brian Shirai)

  • Rework extended header & memory handle mechanisms. (Brian Shirai)

  • Added ref count instructions. (Brian Shirai)

  • Added deprecation for Fixnum, Bignum. (Brian Shirai)

  • Clean up from memory header rework. (Brian Shirai)

  • Removed a bunch of Rake stuff. (Brian Shirai)

  • Start to clean up 'Machine'. (Brian Shirai)

  • Checkpoint for GC after saving object reference. (Brian Shirai)
    It turns out, surprisingly enough, it's much easier to see the object we
    are trying to trace if we put it where we can see it first.

Release 4.13

20 Jan 23:39
806f3be
Compare
Choose a tag to compare

Version 4.13 (2020-01-20)

  • Added more math functions. (Brian Shirai)

  • Replaced Bignum#<<, Bignum#>> primitives. (Brian Shirai)

  • Replaced Fixnum#size, Bignum#size primitives. (Brian Shirai)

  • Replaced {Fixnum, Bignum}#bit_length primitives. (Brian Shirai)

  • Switch Travis to use 18.04 bionic. (Brian Shirai)

  • Install gdbm on Linux for Travis 18.04 bionic. (Brian Shirai)

  • Install gdbm on Linux for Travis 18.04 bionic. (Brian Shirai)

  • Revert switching Travis to bionic. (Brian Shirai)

  • Replaced more Bignum, Fixnum primitives. (Brian Shirai)

  • Added more instructions. (Brian Shirai)

  • Replaced {Fixnum, Bignum}#{to_s, inspect} primitives. (Brian Shirai)

  • Replaced {Bignum, Fixnum}#to_f primitive. (Brian Shirai)

  • Replaced {Fixnum, Bignum}#divmod primitives. (Brian Shirai)

  • Enable experimental compiler plugins. (Brian Shirai)

  • Ignore stdlib C-exts that won't build. (Brian Shirai)

  • Try bionic on Travis again. (Brian Shirai)

  • Moved Fixnum.=== to Integer. (Brian Shirai)

  • Improved Process.waitpid. (Brian Shirai)

  • Removed unnecessary subprocess from Fiber#resume spec. (Brian Shirai)

  • Reset process start time in forked child. (Brian Shirai)

  • Back to trusty. (Brian Shirai)

  • Simplify Integer.===. (Brian Shirai)

  • Finished removing Fixnum, Bignum classes in core. (Brian Shirai)
    More work remains before the constants can be removed.

  • Reset start time after fork. (Brian Shirai)

  • Handle coded caches better. (Brian Shirai)
    This is still very messy and all this should be proper dependencies, but
    I'd rather build that in the new build system that doesn't use Ruby.

  • Added more floating point instructions. (Brian Shirai)

  • Replaced Float#{nan?, infinity?} primitives. (Brian Shirai)

  • Make a proper pointer to registers. (Brian Shirai)
    Previously, the registers were referenced relative to the beginning of
    the stack by adjusting all the register indexes when creating the
    MachineCode instance.

  • Disable experimental compiler plugins. (Brian Shirai)

Release 4.12

07 Jan 17:11
0c0028b
Compare
Choose a tag to compare

Version 4.12 (2020-01-06)

  • Replaced more Float, Fixnum, Bignum primitives. (Brian Shirai)

  • Fixed spec assuming 32bit. (Brian Shirai)

  • Replaced more Integer bitwise primitives. (Brian Shirai)

  • Removed nonsense spec. (Brian Shirai)
    Not going to support this behavior. Rubinius returns true for all three
    cases:

    $ ruby -v -e 'p 0x800000000000027 <= (0x800000000000027 + 0.0)'
    ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19]
    false
    $ ruby -v -e 'p 1 <= (1 + 0.0)'
    ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19]
    true
    $ ruby -v -e 'p (264) <= ((264) + 0.0)'
    ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19]
    true

  • Replaced Bignum#~, Bignum#-@ primitives. (Brian Shirai)

Release 4.11

06 Jan 06:00
d1b029c
Compare
Choose a tag to compare

Version 4.11 (2020-01-05)

  • Fixed building OSX packages. (Brian Shirai)

  • Try re-enabling Travis OSX. (Brian Shirai)

  • Re-disable Travis OSX. STDIN is not a TTY. (Brian Shirai)
    https://travis-ci.org/rubinius/rubinius/jobs/167911681#L5416

  • Removed obsolete compiler define RBX_PROFILER. (Brian Shirai)

  • Attempt to avoid breaking LLVM compiler flags. (Brian Shirai)

  • Updated gems. (Brian Shirai)

  • More instruction tests. (Brian Shirai)

  • More interpreter tests. (Brian Shirai)

  • Tests for check_frozen instruction. (Brian Shirai)

  • Moved builtin/ to class/. (Brian Shirai)
    The name 'builtin' is not very descriptive. Now that we are going to have
    managed objects that are both object-oriented and simple data, and both are
    'built in', we need more descriptive names for the directories, so the new
    names are 'class' and 'data', which parallels the names used in the code.

  • Fixed path to website releases data. (Brian Shirai)

  • For Rubinius build on aarch64-linux-gnu (Raspberry Pi 3). (#3705) (medols)

  • Specs for rb_obj_method_arity. (Brian Shirai)

  • Added rb_obj_method_arity. Fixes #3708. (Brian Shirai)

  • Updated daedalus-core gem. (Brian Shirai)

  • Added C-API rb_memhash. (Brian Shirai)

  • Updated rubysl-openssl version. (Brian Shirai)

  • Updates to issues/PR templates. (Brian Shirai)

  • Try putting README.md under .github. (Brian Shirai)

  • Revert "Try putting README.md under .github." (Brian Shirai)
    This reverts commit 320f504.

  • Updated README. (Brian Shirai)

  • Don't use enum as last arg for varargs. /ht @heftig. (Brian Shirai)

  • Fixed Bundler, brew wars. (Brian Shirai)

  • Fixed setting ThreadGroup for signal handler Thread. (Brian Shirai)
    In Rubinius, trapped signals are handled in a dedicated Thread.

In Ruby, the Thread where a signal is processed isn't defined, but the
assumption is that the signal handler runs in Thread.main (as observed in Ruby
behavior).

Also undefined in Ruby is what ThreadGroup a Thread created in a signal
handler
should be added to. Going with the assumption that the signal handler
proc is run in Thread.main, we assume the new Thread should be added to
Thread.main.group.

We now set the signal handler Thread's group to the same group as Thread.main,
so that threads created in a signal handler proc have a group and are added to
a group.

  • Better backtrace rendering for copy-paste. (Brian Shirai)
    Rubinius renders backtraces with the receiver+method right justified and the
    source location trailing. Previously, the source location was split when
    exceeding the available terminal width to avoid cluttering the left side where
    the receiver+method was rendered to aid visibility of the most important
    backtrace information.

Unfortunately, splitting up the source location makes copy-pasting the path to
edit a source file very tedious.

Now, the source location is rendered as an unbroken sequence of characters but
starting on a new line if the total backtrace line exceeds the terminal width.
This preserves the readability of the receiver+method, while also preserving
the ability to copy-paste the source location.

  • Improved backtrace rendering contrast. (Brian Shirai)
    Rubinius introduced colorized backtraces to improve readability.

Unfortunately, color is problematic due to the perception of colors and the
interaction of color with terminal colors, which something which Rubinius has
no control over.

The goal of readability in backtraces is an important one. There are two
primary pieces of information in each backtrace line: 1. receiver+method; and
2. source code location, file+line number.

The current rendering approach is to bold the receiver+method and separate the
source line on a new line when the total backtrace line exceeds the terminal
width. This provides contrast that improves scanning the backtrace on primary
information, the receiver+method, and easily selecting secondary information,
the source location, when necessary.

  • Align method names in backtrace. (Brian Shirai)
    It is a very common convention (in Rubinius, at least) to fully render a
    method as 'A::B::C{#, .}name', where A::B:: is an optional namespace and C is
    the class of the receiver and # indicates an instance method, while .
    indicates a module method.

As such, this convention carries over without much question to rendering
backtraces. However, the context of consuming a backtrace requires different
conventions, but ones that are not foreign.

So, for rendering backtraces, the conventions are retained but the ordering is
changed slightly to improve processing the information. There are now four
basic components to a backtrace line (for an object-oriented method): 1. the
method name; 2. the instance/module indicator; 3. the fully-scoped receiver
name; and 4. the source code location.

The first thing that needs to be located and digested is the method name, so
the method names are right aligned allowing both easily reading the method
name and quick indexing for the second important piece of information, the
receiver name. The source location trails and may be on a new line if the
total backtrace line rendering exceeds the terminal width.

This rendering better orders information in the backtrace based on the
hierarchy of important information (method name > instance/module indicator >
receiver name > source location). It also balances the tensions between making
an individual line of a backtrace readable and making the whole thing
scannable and readable. When rendering the full method name as A::B::C#name,
the variability of the A::B::C component pushed many names too far to the
right, leaving a very jagged left edge that is more difficult to scan, as well
as burying the method name (the primary element) embedded in the middle of a
bunch of character noise.

  • Fixed rendering method name. (Brian Shirai)

  • Catch C++ exceptions sooner. (Brian Shirai)
    We attempt to catch C++ exceptions as close to where they occur as possible.
    This means at the last executed managed code (eg method) so that as much
    context as possible can be given.

  • Added extra C++ exception catch to new interpreter. (Brian Shirai)

  • Use llvm-config --libs instead of --libfiles. (Brian Shirai)

  • fix case where IO#gets blocks forever on read to char boundary (Chuck Remes)
    This was a tough one. WEBrick would hang when reading an HTTP
    header. The cause was that IO::EachReader#read_to_separator_with_limit
    blocked forever trying to "peek ahead" to ensure we are reading
    to the end of a proper character boundary. In this case the socket
    had no more data to recv but it also does not set EOF, therefore
    the read blocked indefinitely. The simple fix was to move to a
    non-blocking read and skip the read entirely if the string
    already had a valid encoding. However, this broke several specs
    for reading multi-byte chars. To resolve that problem required
    making sure that when read_nonblock returned an empty buffer that
    this buffer was set to ASCII_8BIT instead of whatever the default
    external coding was set to (usually UTF-8). The fixes are all
    relatively simple but it took many hours to chase this down and
    figure out the minimal approach to fix it.

  • DRY up allocation of 8-bit string buffers (Chuck Remes)

  • Update issue_template.md (Brian Shirai)
    Fixed Markdown formatting of checkbox list.

  • Update pull_request_template.md (Brian Shirai)
    Fixed Markdown formatting of checkbox list.

  • Enable build from network for RPi3 (macbookpr02010)

  • add test for instructions::send_stack_with_block (Chuck Remes)

  • add test for instructions::rotate (Chuck Remes)

  • add work in progress test for instructions::send_vcall (Chuck Remes)

  • better tests for instructions::send_stack (Chuck Remes)
    The test_send_stack_execute_returns_null tests the situation where
    no value is returned from the method, e.g. nullptr.

Second test test_send_stack_method_no_method_error tests code path
where the method is not found and raises a NoMethodError. This had
the side effect of leaving arguments on the stack. This is a
problem that requires a bug fix to the instruction.

  • clean up stack before trying to execute method (Chuck Remes)
  • verify stack is cleaned up before NoMethodError raised (Chuck Remes)
  • clean up stack before executing method in case it raises error (Chuck Remes)
  • test to verify handling of method returning nullptr (Chuck Remes)
  • verify stack is cleaned up when NoMethodError raised (Chuck Remes)
  • clean up stack before executing method (Chuck Remes)
  • handle method that returns nullptr properly (Chuck Remes)
  • test for stack cleanup on instructions::send_stack_with_splat when NoMethodError raised (Chuck Remes)
  • clean up stack before executing method (Chuck Remes)
  • finish other tests for instructions::send_stack_with_splat (Chuck Remes)
  • free allocated buffes on an early return to prevent memory leak (Chuck Remes)
  • allow for scan-build to substitute CC and CXX compilers (Chuck Remes)
  • fix typo (Chuck Remes)
  • add tests for instructions::send_super_stack_with_block (Chuck Remes)
  • clean up stack prior to calling method that may raise exception (Chuck Remes)
  • add tests for instructions::send_super_stack_with_splat (Chuck Remes)
  • verify stack cleared before method call that could raise exception (Chuck Remes)
  • add tests for instructions::send_vcall (Chuck Remes)
  • add test for instructions::set_const (Chuck Remes)
  • add test for instructions::set_const_at (Chuck Remes)
  • add tests for instructions::set_ivar (Chuck Remes)
  • add tests for instructions:::set_local, set_stack_local, and store_my_field (Chuck Remes)
  • compatible with musl libc (SquallATF)
    Mapping unsigned to uint to compatible with musl libc
  • freebsd supports birthtime so test for it (Chuck Remes)
  • update US/Eastern to use modern zone terminoloy America/New_York (Chuck Remes)
  • fix two small FFI bugs (Chuck Remes)
    Bug 1 was trying to find the string index of the integer 0. For this
    to work the system calls :to_str on the Fixnum which fails. The fix
    is to specify the nul string explic...
Read more