TruffleRuby reguläre Ausdrücke: 200x schneller als C und SIMD

2025-03-18
TruffleRuby reguläre Ausdrücke: 200x schneller als C und SIMD

Dieser Blogbeitrag untersucht die Performance-Optimierung für JSON-String-Escaping in Ruby. Benchmarks vergleichen drei Ansätze: eine reine Ruby-Version, eine C-Erweiterung mit SIMD-Instruktionen und eine reine Ruby-Version auf TruffleRuby. Überraschenderweise ist die reine Ruby-Version von TruffleRuby, die ihren fortschrittlichen JIT-Compiler und die TRegex-Engine nutzt, 20-mal schneller als die C-Erweiterung und SIMD und in einigen Fällen sogar über 200-mal schneller als der C-Referenzcode. Dies liegt an der TRegex-Engine von TruffleRuby, die reguläre Ausdrücke in deterministische endliche Automaten kompiliert, Backtracking vermeidet und SIMD-Instruktionen zur Optimierung verwendet. Ähnliche Vergleiche werden für `Time.new(String)` und `StringScanner#scan_integer` gezeigt, wobei die regulären Ausdrucks-Implementierungen von TruffleRuby die C-Implementierungen von CRuby deutlich übertreffen. Dies zeigt, dass in einigen Fällen prägnanter, reiner Ruby-Code, kombiniert mit einem fortschrittlichen JIT-Compiler, die Leistung von Low-Level-Sprachen übertreffen kann.

Entwicklung Reguläre Ausdrücke