Awesome Series @ Planet Ruby
Rubies (Virtual Machines, Compilers, ...) • ActiveRecord • Webframeworks (Micro, Macro, APIs, ...) • Events (Conferences, Camps, Meetups, ...) • Blogs (News, Opinions, Podcasts, ...)
A collection of awesome Rubies (compilers, interpreters, virtual machines, parsers, doc generators, version managers, etc.)
Note: 💎 stands for the RubyGems page and stands for the GitHub page.
- CRuby, MRI, JRuby, RubySpec, Rubinius, YARV: A Little Bit of Ruby Naming by Noah Gibbs, Appfolio, Dec 2017
Q: What's 3x3?
3x3 => Ruby 3 will be 3 times faster in 2020
Ruby 3 - the next major update of ruby (planed for 2020) will be 3 times (3x) faster than Ruby 2.
Note: The baseline for Ruby3x3 is 2.0 so all the improvements in 2.x will count toward the 3x goal.
A Nintendo Entertainment System (NES) emulator written in Ruby - running with 60 frames per seconds (fps) in Ruby 3 in 2020
An "enjoyable" benchmark for rubies to drive "Ruby 3x3: Ruby 3 will be 3 times faster".
The benchmark is a Nintendo Entertainment System (NES) emulator that works at 20 frames per seconds (fps) in Ruby 2.0. An original NES works at 60 fps. If Ruby 3x3 succeeds, we can enjoy NES games with ruby!
NOTE: We do not aim to create a practical NES emulator. There are many great emulators available today. We recommend using another emulator if you want to play a game.
Benchmark example
See Rubies Benchmark with Optcarrot for the measurement condition and some more charts.
- 2017/Dec - MJIT infrastructure accepted into Ruby 2.6 - MJIT infrastructure means: JIT worker thread, profiler, gcc/clang compiler support, loading function from shared object file, some hooks to ensure JIT does not cause SEGV, etc...
See the #Ruby3x3 hashtag on twitter for the latest Ruby 3x3 news bytes.
- Ruby 3 and JIT: Where, When and How Fast? by Noah Gibbs, Appfolio, Dec 2017
- How's Progress on Ruby 3x3? by Noah Gibbs, Appfolio, Dec 2017
- Towards Ruby 3x3 Performance - Introducing RTL and MJIT by Vladimir Makarov, Red Hat, Sept 2017, Talk @ RubyKaigi 2017 on register transfer language (RTL) and method JIT (MJIT)
- OptCarrot: An Excellent CPU Benchmark for Ruby 3x3 by Noah Gibbs, Appfolio, Sept 2017
- Running Optcarrot, a Ruby NES emulator, at 150 fps with the GUI! by Benoit Daloze, Oracle Labs @ Johannes Kepler University, Nov 2016
- Ruby 3x3: Q&A w/ Matz, Koichi, and Tenderlove by Jonan Scheffler, Heroku, Nov 2016 - on the guild proposal, just-in-time (JIT) compilation the future of ruby performance
- Ruby,
- also known as Matz's Ruby Interpreter (MRI) or CRuby; using the YARV (Yet another Ruby VM) since version 1.9
- 2017: 2.5 (Dec/24)
- 2016: 2.4 (Dec/24)
- 2015: 2.3 (Dec/24)
- 2014: 2.2 (Dec/24)
- JRuby,
- Ruby on the Java Virtual Machine (JVM)
- 2016: v9.1.0.0
- 2014: v1.7.x
- Rubinius (rbx),
- designed for concurrency; uses a low-pause generational garbage collector; core library and tools coded in Ruby
- TruffleRuby,
- A high performance Ruby on top of Truffle and Graal
- mruby,
- lightweight Ruby; designed for linking and embedding within your application
- Opal -
, 💎 - source-to-source ruby-to-javascript compiler
- Topaz,
- Ruby coded in Python on top of RPython (the toolchain that powers PyPy)
- GoRuby
- Ruby coded in Go
- MagLev,
- a ruby interpreter built on top of the GemStone/S (64-bit) Virtual Machine (VM); note - to run MagLev you need a commercial GemStone/S Server (license)
- tinyrb,
- a tiny subset of Ruby with a Lua'esc Virtual Machine (VM)
- fruby
- Ruby in Français (French) e.g. classe, défini, si, sinonsi, vrai, faux, fin, etc.
- IronRuby,
- a ruby interpreter built on top of the Microsoft .NET Common Language Runtime (CLR)
- MacRuby
- a ruby interpreter built on top of Apple's Objective-C/Cocoa library
- Ruby Enterprise Edition (REE) - builds on top of MRI Rubies, versions 1.8.X and later
- SmallRuby @ České vysoké učení technické v Praze (ČVUT) - a ruby interpreter built on top of the Smalltalk/X virtual machine
- Diamondback Ruby (DRuby) @ University of Maryland (UMD) - adds gradual typing (with type inference and type annotations) to Ruby
- Opal -
, 💎 - source-to-source compiler
- rubys/ruby2js
, 💎 - minimal yet extensible Ruby to JavaScript converter
- RubyJS,
- JavaScript standard library based on the Ruby core-lib
- Crystal,
- Ruby-like syntax; statically-typed with type inference; compiles to machine code; run a ye good olde binary
- Mirah,
- formerly known as Duby; compiles to Java bytecode; no (extra) runtime library required
- RubyFlux
- a ruby to java static compiler
- RubyMotion - commercial compiler for Apple iOS/Cocoa
- Elixir - Ruby-inspired syntax; a dynamic, functional language for the Erlang VM compiles to BEAM instructions (bytecode)
(†): Note: Elixir is not a Ruby-to-Erlang compiler. Elixir started off with a Ruby-inspired syntax. The language semantics differ e.g. dynamic pure functional vs dynamic general pragmatic "multi-paradigm" language.
- rvm,
- Ruby enVironment Manager; 27,000 lines of shell scripts to manage your rubies (overwrites your cd)
- rbenv
- intercepts Ruby commands using shim executables added into your $PATH
- chruby
- changes the current Ruby
- Ruby under a Microscope - An Illustrated Guide to Ruby Internals by Pat Shaughnessy; No Starch Press; 360 pages; Nov 2013
- Ruby Performance Optimization: Why Ruby Is Slow, and How to Fix It by Alexander Dymo; The Pragmatic Programmers
- The Ruby Bibliography,
A list of Ruby research theses and papers.
- Streem Lang
- prototype of stream based programming language by Yukihiro Matsumoto
- RubyBench,
- Ruby Releases Benchmarks
- Contracts for Ruby (contracts.ruby)
, 💎 - a contract is one line of code that you write above a method definition; it validates the arguments to the method, and validates the return value of the method
- Rubype (Ruby+Type)
, 💎 - gradual type checking for Ruby
- Typedocs
, 💎 - method type annotations for Ruby
- Typecheck
, 💎 - type checking for Ruby methods
- Ruby Type Checker (Rtc)
- Active Support
, 💎
- Zucker
, 💎 - collection of Ruby refinements; lots of small refinements to sweeten your Ruby code
- Powerpack
, 💎 by Bozhidar Batsov et al - collection of Ruby core extensions for array, enumerable, hash, numeric, string, etc.
- PowerCore
by Arturo Herrero et al - collection of Ruby core extensions for array, date, fixnum, hash, kernel, object, proc, string, etc.
- SciRuby -
- tools for scientific computing in Ruby e.g. nmatrix, statsample, etc.
- Functional Ruby
, 💎 - adding functional programming tools to Ruby; inspired by Erlang, Clojure, Haskell, and Functional Java
- Concurrent Ruby
, 💎 - modern concurrency tools including agents, futures, promises, thread pools, supervisors, and more; inspired by Erlang, Clojure, Scala, Go, Java, JavaScript, and classic concurrency patterns
- Ruby QuickRef - Language, Standard Library, Tools
- Learn Ruby in Y Minutes,
- A whirlwind tour of Ruby - learnruby.rb
- seattlerb/ruby_parser (RP)
, 💎 - a ruby parser written in ruby (using racc -- which does by default use a C extension). RP's output is the same as ParseTree's output: s-expressions using ruby's arrays and base types
- whitequark/parser
, 💎 - a ruby parser written in ruby; also includes an "unparser" to produce equivalent source code from the parser's Abstract Syntax Tree (AST)s
- YARD,
, 💎 - Yay! A Ruby Documentation Tool
- SDoc
, 💎 - RDoc generator to build searchable HTML documentation for Ruby code
- RDoc
, 💎 - RDoc produces HTML and online documentation for Ruby code
- Traveling Ruby,
- self-contained, portable Ruby binaries
- Omnibus
, 💎 - mini language (that is, domain-specific language (DSL) for installers (that is, binary packages)
- RubyGems,
- 100,000+ Gems
- Awesome Ruby
- Awesome ActiveRecord
- Awesome Jekyll @ Planet Jekyll
- Awesome Markdown
- Ruby Gem of the Week Series @ Planet Ruby,
- Trending Ruby Projects @ GitHub - Today, This Week, This Month
- Alltime Starred Ruby Projects @ GitHub
- Ruby Toolbox
- Gems @ Ruby Bookmarks
- Ruby @ Reddit
- Awesome Ruby Events
- meetups, conferences, camps, etc. from around the world
- Planet Ruby,
- online news reader about all things ruby
Jesse Cooke • Marcel Hlopko • Sota Yamashtia
License
The awesome list is dedicated to the public domain. Use it as you please with no restrictions whatsoever.
Questions? Comments?
Send them along to the ruby-talk mailing list. Thanks!