Ideas List (2021)
The following ideas are examples of GSoC 2021.
Ruby 3.0 introduce new type signature language RBS and type checking tools. Please consider to extend the eco-system.
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 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
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
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:
- Type Profiler: Ambitious Type Inference for Ruby 3: A slide deck to introduce TypeProf (formerly known as Type Profiler)
- A documentation of TypeProf
- TypeProf milestones and TODOs: Big milestones and random ideas to improve 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
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
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
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
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
@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
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.
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.