ruby/ruby
Papers Referenced in This Repository
Evaluating YJIT’s Performance in a Production Context: A Pragmatic Approach
Ruby is a dynamically-typed programming language with a large breadth of features which has grown in popularity with the rise of the modern web, and remains at the core of the implementation of widely-used online platforms such as Shopify, GitHub, Discourse, and Mastodon. There have been many attemp...
YJIT: a basic block versioning JIT compiler for CRuby
Ruby is a dynamically typed programming language with a large breadth of features which has grown in popularity with the rise of the modern web, and remains at the core of the implementation of many widely-used websites. CRuby, the default implementation of the language, features a JIT compiler know...
Interprocedural Type Specialization of JavaScript Programs Without Type Analysis.
Previous work proposed lazy basic block versioning, a technique for just-in-time compilation of dynamic languages which we believe represents an interesting point in the design space. Basic block versioning is simple to implement, simple enough that a single developer can build a complete just-in-ti...
Simple and Effective Type Check Removal through Lazy Basic Block Versioning
Dynamically typed programming languages such as JavaScript and Python defer type checking to run time. In order to maximize performance, dynamic language VM implementations must attempt to eliminate redundant dynamic type checks. However, type inference analyses are often costly and involve tradeoff...
Compacting garbage collection with ambiguous roots
Many modern garbage collectors [4] recover space by copying. Using an initial "root" set of pointers which are stored in known locations, all accessible objects are copied into a "new space". Two of the attractive properties of such a collector are that it results in memory compaction and it can hav...
Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator
A new algorithm called Mersenne Twister (MT) is proposed for generating uniform pseudorandom numbers. For a particular choice of parameters, the algorithm provides a super astronomical period of 2 19937 −1 and 623-dimensional equidistribution up to 32-bit accuracy, while using a working area of only...
How to read floating point numbers accurately
Consider the problem of converting decimal scientific notation for a number into the best binary floating point approximation to that number, for some fixed precision. This problem cannot be solved using arithmetic of any fixed precision. Hence the IEEE Standard for Binary Floating-Point Arithmetic ...
Using Selective Memoization to Defeat Regular Expression Denial of Service (ReDoS)
Regular expressions (regexes) are a denial of service vector in most mainstream programming languages. Recent empirical work has demonstrated that up to 10% of regexes have super-linear worst-case behavior in typical regex engines. It is therefore not surprising that many web services are reportedly...