Sie haben im Grunde recht. Wenn gesagt wird, dass Ruby in C geschrieben ist, bedeutet dies, dass der Sprachinterpreter und Teile der Kernbibliothek in C geschrieben sind.
Der Ruby-Interpreter ist also ein C-Programm, das eine Textdatei als Eingabe verwendet, verarbeitet und dann Funktionen aufruft, die sich entweder in einer anderen Textdatei befinden (sofern sie in Ruby geschrieben wurden) oder kompilierten C-Code enthalten, der über die erforderliche Grundfunktionalität verfügt Direkter Zugriff auf Systemressourcen wie Speicher, Dateisystem und mehr. Und einige Funktionen, die eine sehr hohe Leistung erfordern.
Sie haben also verschiedene Teile einer Sprache, die in anderen Sprachen geschrieben werden können oder müssen. Nichts würde Sie davon abhalten, den Interpreter in C und die Bibliotheken in C ++ zu schreiben (obwohl dies möglicherweise einige Dinge erschwert). Sie könnten sogar mehrere Schritte ausführen und eine Sprache verwenden, die sehr gut in der Textverarbeitung ist, um einige Zwischendaten zu generieren, die dann von einem C-Code verarbeitet werden.
Faktoren für die Entscheidung können dieselben sein wie für andere komplexe Anwendungen. Leistung ist eins. Die Fähigkeit, Code zu schreiben, der direkt auf andere Systemressourcen zugreifen kann. In den meisten Fällen muss es sich also um eine kompilierte Sprache handeln (obwohl Sie theoretisch einen Ruby-Interpreter in Python schreiben könnten). Die Verfügbarkeit auf verschiedenen Systemen ist wichtig, wenn Sie möchten, dass Ihre Sprache unter Linux, Win, OS X und anderen ausgeführt wird.