2019 Grant Accomplishment Report
The following projects have been completed, and their deliverables have been accepted by the grant committee.
Creating a multi-file precompilation mechanism
ISeq, an intermediate representation of RubyVM, provides binary serialization and deserialization functions. Bootsnap improves the application startup time by caching the binary data. However, Bootsnap cannot cache multiple files such as projects and gems at once. In addition, some gems that the Ruby interpreter loads at startup are not cached.
This project provides a mechanism for pre-compiling gems and projects into a single binary file by extending the MRI. Using it, we aim to speed up the launching of Ruby applications and the Ruby interpreter itself.
This project was canceled, and the intermediate report has been published instead of the final report.
We have proven that fibers are useful for building scalable systems. In order to develop this further, we need to add hooks into the various Ruby VMs so that we can improve the concurrency of existing code without changes. There is an outstanding PR for this work, but additional effort is required to bring this to completion and show its use in real world situations. We propose to bring the existing PR to completion and improve Ruby’s concurrency model.
From time to time, we will live stream the implementation of this feature. Please follow https://twitter.com/ioquatix to receive notifications before live streaming begins.
The Tests of Reline In Real Terminals
Ruby 2.7 has brand-new IRB with Reline that is a multiline interactive input interface library. It contains some multiline editing modes that are GNU Readline compatible on terminals and it’s very difficult to reproduce behaviors. I always test it manually. Reline has too many features so I need too many checking before when I add a commit every time. It’s too dangerous.
The goal of this project is development “real” terminal test frameworks for Reline.
Rubyplot: An advanced plotting library for Ruby
Rubyplot is a plotting library for Ruby inspired from the library Matplotlib for Python which aims to provide platform-independent data visualizations to be used for scientific computing and web development. This project aims to advance Rubyplot as the defacto standard plotting library in the Ruby community. By the end of the project, Rubyplot will have a large variety of good looking plots which would be well documented and easy to use, support for NMatrix and Numo arrays and basic Image Processing functionality.
RbBCC - An improvement for CRuby ecosystem to access Linux tracing technologies
The goal of this project is enabling Ruby ecosystem to trace Linux
applications in a detailed way.
“Linux applications” includes the Linux kernel itself.
In addition, enabling debuging and event aggregation are also aimed to achieve.
Recently Linux supports a functionality called eBPF(extended Berkley
Using this we can trace and aggregate events occurred in Linux kernel
with lower costs.
There is a library called libbcc that wraps
ebpf(2) syscall to
utilize more safely,
and is now only available from Python or Lua. There is no libbcc
accessor for Ruby.
This project first creates the Ruby gem (named RbBCC) which can access
all of the basic functions of libbcc.
At the same time, the project also develop an internal DSL for basic tracing
in order to empower server operators to trace kernel events just using Ruby.