RubyConf TH 2019 - Debug Hard: Ruby String Library Methods and Underlying C ... by Vishal Chandnani
Channel: RubyConf TH
Date: 15/10/2019

Debug Hard: Ruby String Library Methods and Underlying C Implementations by Vishal Chandnani

What if the Ruby String library ‘reverse’ method or its underlying C implementation had a bug? What if it produced unexpected results with certain types of inputs? e.g. strings with unicode characters. How would you catch and fix such a bug? How would you explain the unexpected results?

1. Relevance
The Ruby String library ‘reverse’ method is implemented in C. The debugging tools in this talk apply to Ruby programs, and help provide useful insights into the underlying C implementation.

2. Novelty and Originality
The ‘use unicode_normalize to address certain string reversal issues’ appears to be known to certain developers. The novel idea in this talk is the analysis of Ruby and C implementation to explain the problem and possible solutions.

3. Knowledge
I started my software development career at Lucent Technologies (originally Bell Labs Innovations, currently Nokia Bell Labs) and used C/C++ to develop CDMA wireless communication system software for 12 years. At The Boeing Company, I used Ruby/Rails to develop U.S. government intelligence community software for 7 years. I am fascinated that Ruby is implemented in C and am excited to share my recent debugging experiences with our community.

4. Coverage
This talk presents a step-by-step approach to debugging Ruby programs by diving into their underlying C implementation. It uses a string with unicode characters to demonstrate the problem and provides insights into the reversal process by understanding their byte-level representation.

5. Organization
This talk starts with a high-level view of the Ruby String library ‘reverse’ method implementation. It introduces the idea of using a Virtual Machine (VM) to build Ruby from source. We learn about the Unicode standard and encoding fundamental principles. We explore the ‘unicode_normalize’ implementation and how it addresses ‘reverse’ method problems. Along the way, we use commands/tools like grep, chars, code_points, each_byte, printf and gdb to provide insight into Ruby library methods.

6. Bottom Line
This talk aims to improve confidence in understanding bugs and/or unexpected results in the current application language (e.g. Ruby) as well as the underlying (e.g. C) implementations. I hope to inspire the Ruby community to explore the internals of Ruby strings and provide recommendations for further exploration.