Ein Blick unter die Haube von Rubys JIT-Compilern

2025-09-13
Ein Blick unter die Haube von Rubys JIT-Compilern

Dieser Artikel taucht tief in die Funktionsweise von Rubys JIT-Compilern wie YJIT und ZJIT ein. Er erklärt, wie JIT-kompilierter Code mit Bytecode koexistiert und wie Ruby zwischen den Ausführungsmodi umschaltet. Der Artikel klärt auch, wie Ruby entscheidet, welche Methoden kompiliert werden sollen (basierend auf der Anzahl der Aufrufe) und wann JIT-kompilierter Code auf den Interpreter zurückgreift (z. B. TracePoint-Aktivierung oder neu definierte Kernmethoden). Im Wesentlichen findet Rubys JIT-Compiler durch einen ausgeklügelten Mechanismus ein Gleichgewicht zwischen Leistung und Korrektheit.

Mehr lesen
Entwicklung

KI-gestützte Polyglottenprogrammierung: Vom reinen Ruby-Entwickler zum Multilingualen in unter einem Jahr

2025-07-23
KI-gestützte Polyglottenprogrammierung: Vom reinen Ruby-Entwickler zum Multilingualen in unter einem Jahr

Ein Entwickler, der ein Jahrzehnt lang ausschließlich Ruby verwendet hat, berichtet über seinen Weg zur Beherrschung mehrerer Programmiersprachen – C++, C und Rust – in weniger als einem Jahr, dank KI-Codierungswerkzeugen wie Cursor und Claude Code. Der Autor beschreibt, wie KI-Unterstützung die Herausforderungen beim Erlernen von Systemprogrammiersprachen überwunden und effiziente Beiträge zu Projekten wie Sorbet, RBS und ZJIT ermöglicht hat. KI fungierte nicht als Codegenerator, sondern als Programmierpartner mit komplementären Fähigkeiten, der Syntax, Muster klärte und Fragen beantwortete, wodurch die Lernkurve drastisch reduziert und sinnvolle Beiträge vom ersten Tag an möglich wurden. Obwohl KI das Lernen beschleunigt, bleibt die Expertise von Menschen unersetzlich für Kurskorrekturen. Der Autor glaubt, dass KI-gestützte Programmierung die Zukunft der Softwareentwicklung ist.

Mehr lesen

Ruby 3.5: Sechsmal schnellere Objekterzeugung durch Inlining von Class#new

2025-05-22
Ruby 3.5: Sechsmal schnellere Objekterzeugung durch Inlining von Class#new

Ruby 3.5 erreicht eine deutliche Beschleunigung der Objekterzeugung, bis zu sechsmal schneller, durch das Inlining der Methode `Class#new`. Der Artikel beschreibt diese Optimierung detailliert, zeigt Benchmark-Ergebnisse, analysiert Performance-Engpässe und erklärt das Inlining-Verfahren. Durch die Eliminierung des Mehraufwands von Methodenaufrufen, die Reduzierung der Parameterkopie und die Verbesserung der Inline-Cache-Trefferquote behebt diese Optimierung effektiv Performance-Probleme bei der Objekterzeugung in Ruby, führt aber auch zu kleinen Inkompatibilitäten mit früheren Versionen.

Mehr lesen
Entwicklung

Statische Typanalyse für Ruby ohne Typannotationen

2025-03-13
Statische Typanalyse für Ruby ohne Typannotationen

Shopify-Ingenieure haben einen neuartigen statischen Typanalysator entwickelt, der Typinformationen für Ruby-Programme ableitet, ohne dass Typannotationen erforderlich sind. Der Analysator nutzt einen verbesserten Sparse Conditional Constant Propagation (SCCP)-Algorithmus und eine präzise Datenflussverfolgung, um die interprozedurale Typanalyse effizient zu handhaben und die Analyse in Sekundenschnelle abzuschließen, selbst für Programme mit vielen Klassen. Diese Forschung bietet einen neuen Ansatz zur Optimierung von Compilern für dynamische Sprachen und eröffnet neue Möglichkeiten zur Leistungssteigerung in dynamischen Sprachen wie Ruby.

Mehr lesen
Entwicklung statische Typanalyse

Beschleunigung von CRubys FFI mit JIT-Kompilierung

2025-02-12
Beschleunigung von CRubys FFI mit JIT-Kompilierung

Dieser Artikel untersucht die Verwendung von Just-in-Time-Kompilierung (JIT), um die Leistung der Foreign Function Interface (FFI) von Ruby zu verbessern. Benchmarks zeigen die Performance-Nachteile von FFI im Vergleich zu nativen Erweiterungen. Der Autor stellt FJIT vor, eine Lösung, die RJIT und benutzerdefinierte Maschinencodegenerierung nutzt, um zur Laufzeit Maschinencode zu erstellen, um externe Funktionen aufzurufen und so den FFI-Overhead zu umgehen. FJIT übertrifft native Erweiterungen in Tests und bietet eine performante Alternative für Ruby-Entwickler. Derzeit ist FJIT ein Prototyp, der nur ARM64 unterstützt, aber der Autor erwartet eine zukünftige Erweiterung auf andere Architekturen und komplexere Funktionsaufrufe.

Mehr lesen
Entwicklung