The Rubinius Language Platform
MPL-2.0 License
Bot releases are hidden (Show)
Published by brixen almost 7 years ago
Version 3.88 (2017-12-31)
Published by brixen almost 7 years ago
Version 3.87 (2017-12-30)
Added boot time stats. (Brian Shirai)
Added argument to ret instruction. (Brian Shirai)
This sets space to add return value type caching and nil values tagged
to method ids.
Improved CodeDB loading metrics. (Brian Shirai)
Updated daedalus. (Brian Shirai)
This will generate the instruction and interpreter files with debug info.
Removed unwind label. (Brian Shirai)
The unwind label was an attempt to move the unwind state from runtime to
compile time. Due to nested unwind blocks, this needs more work.
Updated libsodium to 1.0.14. (Brian Shirai)
Added start of CompiledCode#code_id. (Brian Shirai)
This id is a cryptographic hash of the CompiledCode object that can be
used by the CodeDB to uniquely identify this object. The code_id can be
used to lazily load CompiledCode objects when they are going to be run.
Added CompiledCode#stamp_id. (Brian Shirai)
Updated rubinius-bridge gem. (Brian Shirai)
This adds CompiledCode#code_id when compiling under MRI.
Updated gems. (Brian Shirai)
Switch to code_id for runtime/core. (Brian Shirai)
Lazily load core methods from CodeDB. (Brian Shirai)
Cleaned JIT gen cruft. (Brian Shirai)
Add rubygems and bytecode compiler to CodeDB. (Brian Shirai)
Updated AST gem. (Brian Shirai)
More work on CodeDB being the general compilation cache. (Brian Shirai)
Load files from CodeDB if they exist. (Brian Shirai)
Load compiler from CodeDB. (Brian Shirai)
Add lambda version of logger functions. (Brian Shirai)
This enables deferring potentially costly operations because of
call-by-value that would not be needed if the log level is below the
level of the logging call.
Add logging to CodeDB. (Brian Shirai)
Slightly better loading from CodeDB. (Brian Shirai)
Start migrating from runtime/ to CodeDB. (Brian Shirai)
Build and use CodeDB for library code. (Brian Shirai)
Remove library from default $LOAD_PATH. (Brian Shirai)
Add missing push_file insn files. (Brian Shirai)
Copy non-Ruby files to CodeDB source. (Brian Shirai)
This is mostly for RubyGems but it's conceivable other library code may
have supporting files.
Improved build C-exts for Ruby library. (Brian Shirai)
Don't overwrite CodeDB cache with nothing. (Brian Shirai)
Remove Converter path caching cruft. (Brian Shirai)
The cache mechanism was quite blunt and was not even in use. It can be
replaced with something that works better, but no reason to have the
unused code in the repo.
Add deprecations for Rubinius::{RUNTIME, CORE}_PATH. (Brian Shirai)
Don't segv the process if CodeDB is missing, corrupt. (Brian Shirai)
Added archdir, removed thens. (Brian Shirai)
Use fittest fixture in Enumerable#each_entry spec (Kenichi Kamiya)
Fix Enumerable#each_entry with no yield arguments (Kenichi Kamiya)
Remove an outdated tag (Kenichi Kamiya)
Add specs around Enumerator#dup (Kenichi Kamiya)
Fix Enumerator#dup on iterating enumerators (Kenichi Kamiya)
Add a spec to ensure Enumerator#peek_values identity (Kenichi Kamiya)
Fix Enumerator#peek_values identity for multiple arguments (Kenichi Kamiya)
Add specs for Enumerator#initialize with special size (Kenichi Kamiya)
Ensure to set integer for Enumerator#size (Kenichi Kamiya)
Drop Enumerable:: namespace for Enumerator (Kenichi Kamiya)
We can drop this since dropped 18x supports
Fix Regexp.union
behavior on optional left parenthesis (Artyom Khramov)
Regexp::SourceParcer
always treats left parenthesis as a beginning of
a group. However, the parenthesis can be escaped and this case is
unhandled.
This change tweaks the Regexp::SourceParcer#create_parts
method to
handle this case.
Other sorts of resources that are plausible include AST, LLVM IR, shared
libraries, and machine code functions.
The CodeDB cache presumes a source (eg filesystem) for resources. A
resource is the CodeDB can be represented by two attributes (purgeable
or unpurgeable) and three states (cached, uncached, nonexistent).
A resource is a mapping from a "stem" in a "context" (eg $LOAD_PATH,
$LOADED_FEATURES) to the cache or filesystem. The naming of the resource
is a string of the form "#{prefix}#{stem}#{extension}" where both prefix
and extension may be empty strings. The full string is the feature.
The following state machine describes loading a resource that exists in
the cache:
+---------+ True +-------------+ False /------------\
| loaded? | ----------> | reload flag | ---------> | Don't load |
+---------+ +-------------+ \------------/
| | ^
| False | True |
| | |
+--------------------------+ |
| |
v |
+------------+ False /------\ |
| purgeable? | ---------> | Load | |
+------------+ \------/ |
| ^ |
| True | |
| | |
v | |
+-------------+ | |
| prefix in | False | |
| $LOAD_PATH? | ------------- )-----------------------------+
+-------------+ | |
| | |
| True | |
| | |
v | |
+----------------+ | |
| feature exists | False | |
| on filesystem? | ---------- )-----------------------------+
+----------------+ | |
| | |
| True | |
| | |
v | |
+---------------+ | |
| cache mtime > | False | |
| file mtime? | ----------- )-----------------------------+
+---------------+ |
| |
| True |
| |
+----------------------+
The single file is composed of the following regions:
When the cache is opened, the data region is mmap'd for low latency
access to loading code. The index and contents regions are read into
in-memory map structures.
When the cache is used in a read-write mode, on close, the new data is
appended to the existing data by writing only the new data at the end of
the data region. The index and contents maps are then written to the new
index and contents regions after the data region.
Build using CodeDB cache. (Brian Shirai)
Removed Bundler from build. (Brian Shirai)
Removed remnants of Bundler, RedCard. (Brian Shirai)
Temporary gem install daedalus. (Brian Shirai)
Prepare for new build system. (Brian Shirai)
Moved codegen scripts to build/scripts. (Brian Shirai)
Move config.rb to build/config. (Brian Shirai)
This file will be replaced by a non-Ruby dictionary of configured and
default values for building Rubinius.
Always build in a staging directory. (Brian Shirai)
Fix assumptions about file locations during build. (Brian Shirai)
Fix missed path. (Brian Shirai)
Moved vendor/ to build/libraries. (Brian Shirai)
Temporarily pull daedalus in for rewrite. (Brian Shirai)
Move all build artifacts to build/artifacts. (Brian Shirai)
Start moving generated files out of machine/gen. (Brian Shirai)
Fix looping build. (Brian Shirai)
Finish moving generated code to source dir. (Brian Shirai)
Move config.guess to build/bin. (Brian Shirai)
Update README. (Brian Shirai)
Removed GlobalCache. (Brian Shirai)
This is part of a three-step process:
Create new CodeDB cache when building. (Brian Shirai)
Properly scope Thread constant. Fixes #3773. (Brian Shirai)
Guard access to Fiber's Thread. Fixes #3772. (Brian Shirai)
The Fiber's Thread can disappear any time the Fiber has been suspended.
Set Rubinius::Signature in the VM. (Brian Shirai)
Fixed Thread{.#}abort_on_exception specs. (Brian Shirai)
Don't overwrite CodeDB cache in use. (Brian Shirai)
Don't trigger exception unwind for no exception. (Brian Shirai)
Set ENV for build Melbourne. (Brian Shirai)
The Rubinius core library currently includes Ruby code that sets the
platform and machine-specific configuration values that are then used to
build C-extensions like Melbourne. To build these from the bootstrap
CodeDB cache but still use the machine-specific values, we inject them
into the environment when building Melbourne.
Remove use of SecureRandom. (Brian Shirai)
This also assigns a random code_id to a CompiledCode object. In the
future, the code_id will be assigned based on the serialized form of the
CompiledCode object to better represent the uniqueness of a particular
instance but also be stable (with a seed) to enable using the code_id as
a key for associating other data.
Tweak definition of Diagnostics class. (Brian Shirai)
Add start of new inline cache validation. (Brian Shirai)
Invalidate inline caches. (Brian Shirai)
Removed more remnants of old cache invalidation. (Brian Shirai)
Improved use of inline cache. (Brian Shirai)
Add core/prediction.rb. (Brian Shirai)
Add info to seek failure message. (Brian Shirai)
Roll back class_data change. (Brian Shirai)
Try reverting it all. (Brian Shirai)
The Travis failures are not reproducible locally on a Trusty64 virtualbox VM.
Re-apply some inline cache changes. (Brian Shirai)
Re-apply more inline cache changes. (Brian Shirai)
Disable evictions. (Brian Shirai)
Revert "Disable evictions." (Brian Shirai)
This reverts commit e25512ed8707d2555a722392d5a6c6a5ae1167d9.
Disable replacing inline cache. (Brian Shirai)
Revert "Re-apply more inline cache changes." (Brian Shirai)
This reverts commit e281c579b9482d454df834cce5e75f2b83b25a55.
Start consolidating under diagnostics. (Brian Shirai)
Add MethodPrediction. (Brian Shirai)
Remove abort from legacy util/thread. (Brian Shirai)
Rework CallSite caching. (Brian Shirai)
This restructures CallSite and the inline caching concepts slightly from
the previous implementation.
A CallSite is a location in the source code where another method is
invoked. A CallSite may or may not have a cache.
A CallSite tracks every time it is invoked. The default invocation of a
CallSite that has never been invoked does not cause the first method to
be cached. This is to avoid caching methods that will only be inovked
once.
A CallSite cache has a max size. New cache entries are always added at
the front of the list of cache entries. During a garbage collection
cycle, invalid cache entries are evicted and the list of entries is
re-ordered so that more "efficient" caches occur in the list before less
efficient ones. The efficiency is calculated as (h / (h + m) * h), where
h is hits, m is misses, and the scaling by h is intended to more
realistically represent cases like 100/100 and 2/2. The former is more
"efficient" (ie more likely to be hit) than the latter.
A CallSite that has frequently evicted cache entries is likely
megamorphic and will not benefit from caching as the cost of mutating
the cache and iterating to find a possibly matching entry outweighs just
dispatching to the method. In this case, the CallSite will disable
caching and just dispatch every time the CallSite is invoked.
Ensure ThreadNexus threads_mutex is unlocked after fork(). (Brian Shirai)
Elaborate Fiber#transfer exception message. (Brian Shirai)
Comment deopt code temporarily. (Brian Shirai)
Mask ESPIPE on terminal device. (Brian Shirai)
Fix Fiber#transfer error message. (Brian Shirai)
Revert "Mask ESPIPE on terminal device." (Brian Shirai)
This reverts commit c02010846b5844edd1a1313d28299d369158e767.
Try rescue on rewind for File#reopen. (Brian Shirai)
Pre-install some gems (again). (Brian Shirai)
Set root Fiber's Thread attribute correctly. Fixes #3776. (Brian Shirai)
Temporarily tag Thread#join specs that segv. (Brian Shirai)
Migrate a few more things to C++11 concurrency features. (Brian Shirai)
Add codedb/source to LOAD_PATH for IRB. (Brian Shirai)
Alternatively, we could remove every last trace of IRB code, but that
will admittedly take slightly longer to complete.
Why remove it? Because IRB does stuff like implement its own code
loading mechanism instead of using load or require, which makes it
impossible to extend functionality behind load and require, like the
CodeDB does. In other words, things like IRB are why can't have nice
things. We need to be rid of things like IRB.
Published by brixen about 7 years ago
Version 3.86 (2017-09-27)
To facilitate transitioning to multiple VM targets, the instruction set needs
to be specified in a format that is target-independent. The spec/instructions
specs are a reasonable intermediate target, but are also a step towards a
language-neutral textual asm format and assembler that will provide complete
targe independence.
Published by brixen about 7 years ago
Version 3.85 (2017-09-24)
Published by brixen about 7 years ago
Version 3.84 (2017-08-02)
Published by brixen about 7 years ago
Version 3.83 (2017-07-26)
Fix a typo in the GitHub issue template (#3750) (Jos Ahrens)
Corrects a typo 'issued' -> 'issue' in 8.c
Add Random::DEFAULT as an instance of Random (#3752) (Lin Jen-Shin (godfat))
This is basically for MRI compatibility. This could be verified by:
ruby -ve 'p ObjectSpace.each_object(Random).to_a == [Random::DEFAULT]'
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
true
Published by brixen over 7 years ago
Version 3.82 (2017-06-27)
I don't know a better way the cover this in spec though
Remove unneeded specs. (Brian Shirai)
Specs should positively test values or state changes. There is an infinite
number of ways code could not raise an error, so asserting a value created or
state changed is the preferred way to write specs.
Attempt to work around broken Travis image. (Brian Shirai)
The Travis Trusty image update fails to set STDOUT as a TTY.
Revert "Attempt to work around broken Travis image." (Brian Shirai)
This reverts commit 96887debc1b51ebe68fa9299577c6684858e1748.
Guard TTY spec. (Brian Shirai)
Travis CI sporadically breaks their images such that STDOUT isn't a TTY.
Published by brixen over 7 years ago
Version 3.81 (2017-06-09)
Published by brixen over 7 years ago
Version 3.80 (2017-06-09)
Published by brixen over 7 years ago
Version 3.79 (2017-06-01)
Published by brixen over 7 years ago
Version 3.78 (2017-05-16)
Published by brixen over 7 years ago
Version 3.77 (2017-05-06)
Published by brixen over 7 years ago
Version 3.76 (2017-05-06)
Published by brixen over 7 years ago
Version 3.75 (2017-04-22)
This contrasts with implementing Fiber as a user-mode "stack" that is
multiplexed onto a single OS thread. In this case, all the data from multiple
Fibers are carried over to the new process with the OS thread executing the
fork() system call.
The user-mode "stack" implementation has a significant drawback in not being
reliably portable across systems (eg porting to WebAssembly would not permit
physically modifying a "thread" stack). Additionally, this approach obscures
the program's operation from the OS scheduler and complicates debugging the
process.
The advantages of composing Fiber with a first-class OS thread are the
opposite. They are completely portable, they offer the OS clear visibility
into the operation of the program, they inspectable by debuggers, and the
resource overhead is as readily controllable as with user-mode "stack" Fibers.
The drawbacks of the user-mode "stack" approach are significant, so Rubinius
has chosen to implement Fiber using first-class OS threads. This makes use of
Fiber incompatible with using fork(). However, Fiber is nothing more than a
limited Thread, and since Rubinius gives full control over the resources
allocated for Thread, Fiber offers no significant advantage over Thread aside
from the abstraction of the single lock associated with all the Fibers on a
Thread that guarantees serial execution of all Fiber code. This could be
mimicked by pure Ruby code and instances of Thread.
Since the use case of Fiber and fork() are mostly distinct, the limitation of
not being able to call fork() from a non-root Fiber is considered an
acceptable trade-off for the advantages of proper OS thread support of Fiber.
Also, this lock is used at execution leaf nodes around state and when no
fork() can be active, so re-init'ing the lock on process transitions is not
necessary.
The boundaries are now much better defined and some of the 'events' have not
been needed. There is more restructuring needed and if the removed events turn
out to be required, they can be re-added.
Published by brixen over 7 years ago
Version 3.74 (2017-04-16)
Published by brixen over 7 years ago
Version 3.73 (2017-03-31)
Published by brixen over 7 years ago
Version 3.72 (2017-02-21)
Published by brixen over 7 years ago
Version 3.71 (2017-02-09)
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.
Bug 2 was more of an issue of convenience. The FFI.config facility
builds FFI::Struct class layouts from data in runtime/platform.conf.
Some structs have char arrays. The original code allocated the proper
space but it did not associate an array with a :char_array field.
Therefore trying to access the field to assign to it directly did
not work.
e.g.
struct = RubySL::Socket::Foreign::SockaddrUn.new
struct[:sun_path] = "/some/path" # failed!
This fix allows the direct assignment of string fields built using
the FFI.config convenience method.
Published by brixen over 7 years ago
Version 3.70 (2017-01-24)
Published by brixen almost 8 years ago
Version 3.69 (2016-11-17)