Start...End time | Track name |
---|---|
01:30 - 02:30 UTC |
|
04:30 - 05:00 UTC |
Lang: ja
Track: TrackLarge Hall
The future vision of Ruby ParserRecently maintainability and usability of ruby's parser have been discussed. There are several approaches for these problems, however I believe LR parser is the best solution for supporting Ruby's elegant syntax. When using parser generators, we write a grammar description file like "parse.y". In a grammar file, many DSL, e.g. %parse-param, %initial-action, %left, %right ..., are used to control the behavior of generated parser. Even so Push Down Automaton has potential to solve these problems, parser generator's DSL is not enough to represent it. Such impedance mismatches between DSL and PDA requires us to use hacks like lex state. This talk will cover redesigning the responsibility of lexer and parser, how to expand DSL for grammar files and introduction to Lrama parser generator. Memo |
05:10 - 05:40 UTC |
Lang: en
Track: TrackSmall Hall
Understanding the Ruby Global VM Lock by observing itThe Global VM Lock (GVL), also known as Global Interpreter Lock (GIL), is an implementation detail of the CRuby VM. At a high-level, it prevents Ruby code across multiple threads from running in parallel (while still allowing concurrency!). The GVL is an extremely important implementation detail, as it can have a big impact on the performance and responsiveness of any Ruby application that uses more than a single thread to do its work. In this talk, I explore what the GVL is, why it is no longer called global VM lock, its impact on Ruby applications and how we can see it in action by using the GVL instrumentation API through the `gvl-tracing` and `gvltools` gems. Memo |
05:50 - 06:20 UTC |
Lang: en
Track: TrackLarge Hall
"Ractor" reconsideredRactor was introduced in Ruby 3.0 as an experimental feature to enable parallel programming in Ruby. Now Ractor is not widely used for many reasons. For example, from the perspective of a Ractor implementer, Ractor does not have enough performance and quality. In this talk, we will explain which features are not enough, why they are difficult, and how to solve these difficulties. Memo |
07:00 - 07:30 UTC |
Lang: ja
Track: TrackLarge Hall
Power up your REPL life with typesNowadays, we can use the power of types when writing code in an editor or IDE. But how about in IRB? What if the auto completion of IRB gets more accurate using type information? Wouldn’t it be happy? In this talk, I will show how to implement type based auto completion and make your own customized IRB. Memo |
01:30 - 02:30
04:30 - 05:00
Recently maintainability and usability of ruby's parser have been discussed. There are several approaches for these problems, however I believe LR parser is the best solution for supporting Ruby's elegant syntax. When using parser generators, we write a grammar description file like "parse.y". In a grammar file, many DSL, e.g. %parse-param, %initial-action, %left, %right ..., are used to control the behavior of generated parser. Even so Push Down Automaton has potential to solve these problems, parser generator's DSL is not enough to represent it. Such impedance mismatches between DSL and PDA requires us to use hacks like lex state. This talk will cover redesigning the responsibility of lexer and parser, how to expand DSL for grammar files and introduction to Lrama parser generator.
05:10 - 05:40
The Global VM Lock (GVL), also known as Global Interpreter Lock (GIL), is an implementation detail of the CRuby VM. At a high-level, it prevents Ruby code across multiple threads from running in parallel (while still allowing concurrency!). The GVL is an extremely important implementation detail, as it can have a big impact on the performance and responsiveness of any Ruby application that uses more than a single thread to do its work. In this talk, I explore what the GVL is, why it is no longer called global VM lock, its impact on Ruby applications and how we can see it in action by using the GVL instrumentation API through the `gvl-tracing` and `gvltools` gems.
05:50 - 06:20
Ractor was introduced in Ruby 3.0 as an experimental feature to enable parallel programming in Ruby. Now Ractor is not widely used for many reasons. For example, from the perspective of a Ractor implementer, Ractor does not have enough performance and quality. In this talk, we will explain which features are not enough, why they are difficult, and how to solve these difficulties.
07:00 - 07:30
Nowadays, we can use the power of types when writing code in an editor or IDE. But how about in IRB? What if the auto completion of IRB gets more accurate using type information? Wouldn’t it be happy? In this talk, I will show how to implement type based auto completion and make your own customized IRB.
Start...End time | Track name |
---|---|
00:40 - 01:10 UTC |
Lang: ja
Track: TrackOpen Studio
Learn RactorI learned Ractor by improving the speed of my application. From this experience, I'll show you situations where Ractor is a good fit and how I changed it for Ractor. Memo |
01:20 - 01:50 UTC |
Lang: en
Track: TrackSmall Hall
Build a mini Ruby debugger in under 300 linesAs developers, we know that the best way to learn is by doing. Many of us have built mini-rails, mini-sinatra, and even mini-rubies. But have you ever built your own debugger? In this talk, I'll show you how to create a mini Ruby debugger that's both powerful and fun to use. You'll learn how to: - Run your program with debugger with a simple command - Set breakpoints and through debugger commands - Step through your code to find bugs - And best of all, you'll do it all in under 300 lines of code! Don't miss out on this opportunity to level up your debugging skills and have some fun along the way. Memo |
02:00 - 02:30 UTC |
Lang: en
Track: TrackSmall Hall
RubyGems on the watchDid you know that in 2022, over 400 malicious packages were released to RubyGems? That's more than one per day! Our packages ecosystem may not be the biggest, but sure it is being actively exploited! Are you worried? Don't be! You are not alone! RubyGems has a security team actively monitoring and mitigating various threats to ensure that the gems ecosystem is safe and sound. The previous year was when the RubyGems security team would have to issue critical CVEs related to RubyGems security. Still, at the same time, we spent days and nights making sure that the discovered vulnerabilities were not actively exploited. Join me on an adventure from one critical vulnerability to another. Let's explore the world of malicious packages together and learn how you can ensure your safety in this world full of threats and bad actors. Memo |
04:30 - 05:00 UTC |
Lang: ja
Track: TrackLarge Hall
Revisiting TypeProf - IDE support as a primary featureTypeProf is a type analyzer for Ruby code that has been bundled since Ruby 3.0. It has provided type inference of non-type-annotated Ruby code as a primary feature, and IDE support via Language Server as a secondary feature. This year, we are trying to reverse this; Let IDE a primary target. We're redesigning the analyzer to help achieving this. To speed up the response to edits in the IDE, we plan to make the analysis modular and incremental and reduce the amount of re-analysis per edit. We also plan to implement showing analyzed types as mouse hover hint by changing the analysis from bytecode-based to AST based. In this talk, we will present the new design of TypeProf and its prototype. Memo |
05:10 - 05:40 UTC |
Lang: en
Track: TrackOpen Studio
Reading and improving Pattern Matching in RubyPattern Matching is already one of the essential features in Ruby, but not everyone knows how it is implemented. In this talk, I will show not only how it is, but also explain how to read and understand the specific feature's implementations in Ruby's C source code. Moreover, I'm going to try improving Pattern Matching on speed(the result is not guaranteed...). I will also show how to do it, and how to measure it. I hope this talk will be an opportunity to get Ruby programmers who are not familiar with the C language interested in Pattern Matching and Ruby implementation! Memo |
05:50 - 06:20 UTC |
Lang: ja
Track: TrackOpen Studio
Introduction of new features for VS Code debuggingruby/debug, which is a replacement for traditional lib/debug.rb standard library has been developed for two years. Also, many improvements are still being made. In this talk, I'll introduce new features to improve the user experience in VS Code debugging. VS Code Debug Visualizer: Would it be helpful if we could see the Active Record object as a table? Debug Visualizer allows you to visualize many objects in many ways, such as bar charts and line charts! Demo: https://www.youtube.com/watch?v=9vLVCrpzlDQ Trace Inspector: Trace Inspector is useful when tracing in VS Code. Users can search tracing logs easily and get a lot of helpful information by using Rdbg Trace Inspector. For example, users can know which method is called, which line is executed, local variables at some point, and so on. Memo |
07:00 - 07:30 UTC |
Lang: en
Track: TrackSmall Hall
The Second Oldest BugHistorically, calling a method with a very large number of arguments resulted in a core dump. In Ruby 1.9, this was improved to instead raise SystemStackError. In Ruby 2.2, the issue was fixed for methods defined in Ruby. However, in Ruby 3.2, this is still an issue for methods defined in C. This issue was reported as a bug over 12 years ago, and was the second oldest open bug in Ruby's bug tracker. Come learn about stacks, heaps, argument handling during method dispatch, and how we fixed this bug in Ruby 3.3. Memo |
07:40 - 08:40 UTC |
Lang: en
Track: TrackLarge Hall
Optimizing YJIT’s Performance, from Inception to ProductionThe release of Ruby 3.2 brought many improvements to YJIT, both in terms of performance and memory usage. Importantly, the reduced memory footprint makes YJIT much more viable for real-world production deployments. Enough so that YJIT is no longer marked as experimental, and Shopify has chosen to deploy it on its worldwide StoreFront renderer infrastructure. Making YJIT suitable for production is not just a matter of getting the highest performance numbers possible. In this talk, I want to go over the story and the process that has enabled us to bring YJIT to a state where we consider it to be production-ready, all the way from the original research ideas that lead to the creation of YJIT, to the choice of benchmarks and the curation of our benchmark suite, to the methodology used to benchmark YJIT, but also discussing specific key performance optimizations that YJIT performs, and how we were able to optimize YJIT for a real production workload using a data-driven approach. Memo |
00:40 - 01:10
I learned Ractor by improving the speed of my application. From this experience, I'll show you situations where Ractor is a good fit and how I changed it for Ractor.
01:20 - 01:50
As developers, we know that the best way to learn is by doing. Many of us have built mini-rails, mini-sinatra, and even mini-rubies. But have you ever built your own debugger? In this talk, I'll show you how to create a mini Ruby debugger that's both powerful and fun to use. You'll learn how to: - Run your program with debugger with a simple command - Set breakpoints and through debugger commands - Step through your code to find bugs - And best of all, you'll do it all in under 300 lines of code! Don't miss out on this opportunity to level up your debugging skills and have some fun along the way.
02:00 - 02:30
Did you know that in 2022, over 400 malicious packages were released to RubyGems? That's more than one per day! Our packages ecosystem may not be the biggest, but sure it is being actively exploited! Are you worried? Don't be! You are not alone! RubyGems has a security team actively monitoring and mitigating various threats to ensure that the gems ecosystem is safe and sound. The previous year was when the RubyGems security team would have to issue critical CVEs related to RubyGems security. Still, at the same time, we spent days and nights making sure that the discovered vulnerabilities were not actively exploited. Join me on an adventure from one critical vulnerability to another. Let's explore the world of malicious packages together and learn how you can ensure your safety in this world full of threats and bad actors.
04:30 - 05:00
TypeProf is a type analyzer for Ruby code that has been bundled since Ruby 3.0. It has provided type inference of non-type-annotated Ruby code as a primary feature, and IDE support via Language Server as a secondary feature. This year, we are trying to reverse this; Let IDE a primary target. We're redesigning the analyzer to help achieving this. To speed up the response to edits in the IDE, we plan to make the analysis modular and incremental and reduce the amount of re-analysis per edit. We also plan to implement showing analyzed types as mouse hover hint by changing the analysis from bytecode-based to AST based. In this talk, we will present the new design of TypeProf and its prototype.
05:10 - 05:40
Pattern Matching is already one of the essential features in Ruby, but not everyone knows how it is implemented. In this talk, I will show not only how it is, but also explain how to read and understand the specific feature's implementations in Ruby's C source code. Moreover, I'm going to try improving Pattern Matching on speed(the result is not guaranteed...). I will also show how to do it, and how to measure it. I hope this talk will be an opportunity to get Ruby programmers who are not familiar with the C language interested in Pattern Matching and Ruby implementation!
05:50 - 06:20
ruby/debug, which is a replacement for traditional lib/debug.rb standard library has been developed for two years. Also, many improvements are still being made. In this talk, I'll introduce new features to improve the user experience in VS Code debugging. VS Code Debug Visualizer: Would it be helpful if we could see the Active Record object as a table? Debug Visualizer allows you to visualize many objects in many ways, such as bar charts and line charts! Demo: https://www.youtube.com/watch?v=9vLVCrpzlDQ Trace Inspector: Trace Inspector is useful when tracing in VS Code. Users can search tracing logs easily and get a lot of helpful information by using Rdbg Trace Inspector. For example, users can know which method is called, which line is executed, local variables at some point, and so on.
07:00 - 07:30
Historically, calling a method with a very large number of arguments resulted in a core dump. In Ruby 1.9, this was improved to instead raise SystemStackError. In Ruby 2.2, the issue was fixed for methods defined in Ruby. However, in Ruby 3.2, this is still an issue for methods defined in C. This issue was reported as a bug over 12 years ago, and was the second oldest open bug in Ruby's bug tracker. Come learn about stacks, heaps, argument handling during method dispatch, and how we fixed this bug in Ruby 3.3.
07:40 - 08:40
The release of Ruby 3.2 brought many improvements to YJIT, both in terms of performance and memory usage. Importantly, the reduced memory footprint makes YJIT much more viable for real-world production deployments. Enough so that YJIT is no longer marked as experimental, and Shopify has chosen to deploy it on its worldwide StoreFront renderer infrastructure. Making YJIT suitable for production is not just a matter of getting the highest performance numbers possible. In this talk, I want to go over the story and the process that has enabled us to bring YJIT to a state where we consider it to be production-ready, all the way from the original research ideas that lead to the creation of YJIT, to the choice of benchmarks and the curation of our benchmark suite, to the methodology used to benchmark YJIT, but also discussing specific key performance optimizations that YJIT performs, and how we were able to optimize YJIT for a real production workload using a data-driven approach.
Start...End time | Track name |
---|---|
00:40 - 01:50 UTC |
Lang: en
Track: TrackLarge Hall
Ruby Committers and The WorldCRuby committers on stage! Memo |
02:00 - 02:30 UTC |
Lang: en
Track: TrackSmall Hall
Gradual typing for Ruby: comparing RBS and RBI/SorbetSince the releases of Sorbet then RBS, many developers are looking to adopt gradual type checking for their Ruby project. But what are the differences between these two solutions? Which one should they choose? In this talk we’ll compare RBS and RBI/Sorbet typing specifications. We’ll show how to get started with typing, the pros and cons of each solution as well as their related tooling. Whether you're just getting started with Ruby or you're calling the technical shots for your team, come and see which typing specification is best suited for your needs and how it can improve your developer experience. Memo |
04:30 - 05:00 UTC |
Lang: ja
Track: TrackLarge Hall
Ruby + ADBC - A single API between Ruby and DBsADBC is Apache Arrow Database Connectivity. It provides a API that can connect to different databases by wrapping database specific APIs. This is not a new approach. There are existing APIs such as Active Record, Sequel and ODBC. The difference between the existing APIs and ADBC is the focus on large data and performance. ADBC is an important part to use Ruby for data processing. We can extract large data from many databases (not only RDBMSs but also data ware houses and so on) and load large data into many databases with ADBC. To use Ruby for data processing, we need data. ADBC helps it. Memo |
05:10 - 05:40 UTC |
Lang: en
Track: TrackLarge Hall
Code indexing: How language servers understand our codeLanguage servers are a way of providing IDE features to any editor. Specialized functionality for navigating and understanding our Ruby code can greatly improve the developer experience and is highly aligned with the goal of making the developer happy. In the context of the Ruby LSP, let’s dive into how language servers can build up knowledge about codebases using indexing and how it is used to implement features such as go to definition. Memo |
05:50 - 06:20 UTC |
Lang: en
Track: TrackLarge Hall
Ruby JIT Hacking GuideYJIT delivered a significant speedup to various real-world applications. Have you wondered how a Just-In-Time compiler makes your application fast? Ruby 3.2 has a secret backdoor to hook your own Just-In-Time compiler. Using that “feature”, this talk will guide you through how a Ruby JIT can be written in Ruby. You’ll learn the basics of Ruby VM, how to encode native instructions in Ruby, and interesting optimizations that JIT can do with them. Memo |
07:00 - 07:30 UTC |
Lang: en
Track: TrackSmall Hall
Let's write RBS!RBS improves your development experience, but you need to know the tools and conventions to use RBS efficiently. This talk describes the RBS way to develop applications and gems by demonstrating Ruby coding with RBS. Memo |
07:40 - 08:40 UTC |
Lang: en
Track: TrackLarge Hall
Parsing RBSDevelopment of advanced IDE features requires parsing broken source code because writing something in editors usually causes intermediate – syntactically incorrect states. This is not only for Ruby code, but also for RBS type definitions. In this talk, I will introduce my error tolerant parser and the tricks that generate better syntax trees from incorrect RBS source code. Memo |
00:40 - 01:50
CRuby committers on stage!
02:00 - 02:30
Since the releases of Sorbet then RBS, many developers are looking to adopt gradual type checking for their Ruby project. But what are the differences between these two solutions? Which one should they choose? In this talk we’ll compare RBS and RBI/Sorbet typing specifications. We’ll show how to get started with typing, the pros and cons of each solution as well as their related tooling. Whether you're just getting started with Ruby or you're calling the technical shots for your team, come and see which typing specification is best suited for your needs and how it can improve your developer experience.
04:30 - 05:00
ADBC is Apache Arrow Database Connectivity. It provides a API that can connect to different databases by wrapping database specific APIs. This is not a new approach. There are existing APIs such as Active Record, Sequel and ODBC. The difference between the existing APIs and ADBC is the focus on large data and performance. ADBC is an important part to use Ruby for data processing. We can extract large data from many databases (not only RDBMSs but also data ware houses and so on) and load large data into many databases with ADBC. To use Ruby for data processing, we need data. ADBC helps it.
05:10 - 05:40
Language servers are a way of providing IDE features to any editor. Specialized functionality for navigating and understanding our Ruby code can greatly improve the developer experience and is highly aligned with the goal of making the developer happy. In the context of the Ruby LSP, let’s dive into how language servers can build up knowledge about codebases using indexing and how it is used to implement features such as go to definition.
05:50 - 06:20
YJIT delivered a significant speedup to various real-world applications. Have you wondered how a Just-In-Time compiler makes your application fast? Ruby 3.2 has a secret backdoor to hook your own Just-In-Time compiler. Using that “feature”, this talk will guide you through how a Ruby JIT can be written in Ruby. You’ll learn the basics of Ruby VM, how to encode native instructions in Ruby, and interesting optimizations that JIT can do with them.
07:00 - 07:30
RBS improves your development experience, but you need to know the tools and conventions to use RBS efficiently. This talk describes the RBS way to develop applications and gems by demonstrating Ruby coding with RBS.
07:40 - 08:40
Development of advanced IDE features requires parsing broken source code because writing something in editors usually causes intermediate – syntactically incorrect states. This is not only for Ruby code, but also for RBS type definitions. In this talk, I will introduce my error tolerant parser and the tricks that generate better syntax trees from incorrect RBS source code.