Rust und C++ Hand in Hand: Strategien fĂĽr ein besseres Zusammenspiel
In einem Statement fasst die Rust Foundation die Probleme bei der Interoperabilität zwischen Rust und C++ zusammen und bringt erste Lösungsansätze.
Die Rust Foundation hat auf GitHub ein Dokument veröffentlicht, das die größten Probleme beim Zusammenspiel zwischen Rust und C++ beschreibt. Die Stiftung schlägt kurzfristige und langfristige Maßnahmen für eine bessere Interoperabilität zwischen den Programmiersprachen vor.
Das Dokument ist Teil der Interop Initivative: Google hat der Rust Foundation im Februar 2024 eine Fördersumme von einer Million US-Dollar zukommen lassen, um das Zusammenspiel von C++ und Rust zu verbessern.
Wo Rust auf C++ trifft
Die Interoperabilität ist vor allem in der systemnahen Programmierung gefragt. Dort hat Rust sich inzwischen etabliert, aber die wenigsten Projekte starten auf der grünen Wiese. Stattdessen treffen sie häufig auf vorhandene C++-Anwendungen.
Das Dokument der Rust Foundation nennt drei Anwendungsfälle: C++-Systeme, die neue Funktionsweisen mit Rust umsetzen, Rust-Systeme, die auf vorhandenen C++-Code zurückgreifen, und Systeme mit mehreren Programmiersprachen, die unter anderem Rust implementieren. Da C++ auf eine deutlich längere Geschichte zurückblickt als Rust, ist der erste Anwendungsfall bei weitem der häufigste.
Die Probleme treten vor allem auf Systemen mit begrenzten Ressourcen auf, unter anderem im Embedded-Umfeld.
Die Integration von Rust in den Linux-Kernel ist kein Thema, da der Kernel keinen C++-Code enthält. Linus Torvalds hat C++ (und andere objektorientierte Sprachen) als furchtbare Sprache bezeichnet. Allerdings hat der Einzug von Rust in den Kernel in der Community Anfang 2024 auch wieder die Diskussion über C++ angefacht.
Umweg ĂĽber C
Bisher existiert keine Toolchain, die eine gemischte Codebasis aus C++- und Rust-Code in derselben Datei verarbeitet. Daher ist fĂĽr das Zusammenspiel ein FFI-basierter (Foreign Function Interface) Ansatz erforderlich.
Dabei erfolgt die Anbindung derzeit über das Application Binary Interface (ABI) von C, da die C-ABIs stabiler und weniger plattformabhängig sind als die C++-ABIs. Der Umweg fällt vor allem dort ins Gewicht, wo C++-spezifische Features zunächst in die C-ABI überführt werden müssen.
Das Zusammenspiel mit C stand von Anbeginn der Rust-Entwicklung auf der Agenda. Die Rust Foundation beschreibt C quasi als Lingua franca für die FFI-Integration. Die größten Herausforderungen sind, dass die Sicherheitsfunktionen von Rust beim Zusammenspiel mit C weitgehend verloren gehen und dass die Kommunikation auf einer gemeinsamen sprachlichen Ebene erfolgen muss, was Rust-Features einschränkt.
Bei den wichtigsten Tools fĂĽr das Zusammenspiel von Rust mit den Programmiersprachen C und C++ sind bindgen, um C von Rust aufzurufen, und cbindgen, um Rust von C aufzurufen, deutlich umfangreicher als cxx fĂĽr die bidirektionale Kommunikation zwischen Rust und C++.
Ausweg aus der Misere
Die Rust Foundation benennt in ihrem "C++/Rust Interoperability Problem Statement" drei wesentliche Strategien, um das Zusammenspiel der Programmiersprachen zu verbessern.
Zunächst will die Stiftung zur Verbesserung der Tools beitragen und grundlegende Probleme im Rust-Projekt beseitigen, die das Zusammenspiel erschweren. Dann soll Konsens für eine Strategie gefunden werden, um Veränderungen für Rust auszumachen und vorzunehmen, die für die Interoperabilität erforderlich sind. Schließlich will die Foundation mit der C++-Community und dem C++-Standardkomitee zusammenarbeiten, um die Zusammenarbeit für beide Sprachen zu verbessern und gemeinsame Ziele bezüglich Sicherheit und Performance zu erreichen.
Weitere Details lassen sich dem C++/Rust Problem Statement auf GitHub und der AnkĂĽndigung der Rust Foundation entnehmen.
(rme)