Skip to content
Koichi Sasada edited this page Mar 14, 2021 · 6 revisions

The following ideas are examples of GSoC 2021.

Ruby type systems

Ruby 3.0 introduce new type signature language RBS and type checking tools. Please consider to extend the eco-system.

Improve RBS toolchain

There are many chances to improve RBS toolchain. The followings are examples of the projects:

  • RBS generation from JSON schema.
  • API document generation from RBS files.

You can propose any idea to improve the RBS toolchain. (You will find a missing piece easily if you try to use the tools. 💨)

  • Recommendation: RBS is included in Ruby 3, which is released last December. These projects will help Ruby developers by making our type checking solution much more practical.
  • Prerequisites: Ruby
  • Programming areas include: Data structure
  • Estimated difficulty level: Easy/Medium
  • Potential mentors: @soutaro

Language Server for RBS

Language Server Protocol is one of the most widely adopted solutions to implement IDE/editor integrations with programming languages. A language server for RBS editing will be really helpful for reading/writing RBS files using IDEs.

The features we want to support are:

  • Completion for type names.
  • Navigations (jump to definition) across RBS files.
  • Find usages of types in RBS files.

Steep provides some of the features above, and you can refer to the implementation to start working on this project.

  • Recommendation: RBS is included in Ruby 3, which is released last December. The IDE integration will help Ruby developers reading/writing RBS files and make a big impact on Ruby programming experience.
  • Prerequisites: Ruby
  • Programming areas include: LSP/Unix
  • Estimated difficulty level: Medium/Hard
  • Potential mentors: @soutaro

Write RBS of libraries

RBS repository contains RBS files for core libraries and standard libraries. gem_rbs_collection repository contains RBS files for gems.

Core/standard library coverage is not too bad, but it still has a room to improve. gem_rbs_collection only covers ~20 gems, and we want more gems to be covered by the repository.

This is an idea to write more RBS files for the libraries. Choose some libraries and write RBS files (and tests) for them.

  • Recommendation: The library type definition coverage is essential for the success of RBS. The RBS files you write will be used by Ruby developers and help them using RBS based tools.
  • Prerequisites: Ruby, RBS
  • Estimated difficulty level: Easy/Medium
  • Potential mentors: @soutaro

Improve TypeProf

TypeProf is a type analyzer which is bundled in Ruby 3.0. It is a kind of type inference tool; it reads a non-type-annotated Ruby program and generates a type signature of the program. See the following materials for TypeProf:

As TypeProf is still preliminary, there is room for improvement. Please try TypeProf first, and propose any idea to enhance it.

  • Prerequisites: Ruby
  • Estimated difficulty level: Medium/Hard
  • Potential mentors: @mame

Ruby interpreter (MRI)

Make faster Ruby

There are many ways to improve the performance of Ruby (MRI).

  • Improve/redesign virtual machine
  • Improve/redesign just in time compiler
  • Improve/redesign garbage collector
  • Improve/redesign I/O system
  • ...

If you want to try this project, please explain your plan and discuss in advance with potential mentors (at least Koichi).

  • Prerequisites: Ruby/C
  • Programming areas include: Interpreter design
  • Estimated difficulty level: Hard
  • Potential mentors: @ko1

Make a new profiler

Profiling is an important technique to improve the software performance. Ruby has several profilers and it has several issues.

Please design your best profiler compare with existing profilers. To apply this development topic, please explain the existing profilers and why your profiler can be better.

  • Prerequisites: Ruby/C/Profiler desgin
  • Programming areas include: Profiler tools
  • Estimated difficulty level: Medium/Hard
  • Potential mentors: @ko1

Make better benchmark set

Ruby community doesn't has enough benchmark set to compare implementations. From top down approach, we need more big applications we can try with minimum steps. From bottom up approach, we need more microbenchmarks for each functionalities (class/methods). With your benchmark set, please expose Ruby's bottleneck.

  • Prerequisites: Ruby
  • Programming areas include: Ruby
  • Estimated difficulty level: Easy/Medium
  • Potential mentors: @ko1

Ractor-supported libraries

Ruby 3.0 introduced new concurrent/parallel abstraction named Ractor. To make Ractor-supported libraries we need to modify several lines.

Please check well-known libraries (standard libraries, most popular gems, ...) and modify them to support Ractor. Making new libraries which utilize Ractor (e.g. Rack-sever with Ractor) is also good idea.

  • Prerequisites: Ruby
  • Programming areas include: Ruby
  • Estimated difficulty level: Easy/Medium
  • Potential mentors: @ko1/@hsbt

Tests for debugger

@ko1 is rewriting debug.rb, but it is hard to prepare the tests for this kind of tools. Please try to prepare test framework for it and write tests. Similar tools such as deivid-rodriguez/byebug: Debugging in Ruby 2 will help you.

  • Prerequisites: Ruby
  • Programming areas include: Ruby
  • Estimated difficulty level: Easy/Medium
  • Potential mentors: @ko1

[For students] Propose Your Own?

If nothing on this list interests you, you can always propose your own. Ask a person who is a candidate of the mentor and send an email to Koichi ko1@atdot.net about the project plan and mentor's recommendation.

[For mentor candidates] Propose your project?

Please ask Koichi ko1@atdot.net about it and add your project in this project. Any Ruby-related projects (interpreter, eco-system, documentation, ...) are welcome.