Ви в принципі праві. Якщо сказано, що Рубі написано на С, це означає, що перекладач мови та частини основної бібліотеки написані на С.
Отже, інтерпретатор Ruby - це програма C, яка приймає текстовий файл як вхідний, обробляє його, а потім викликає функції, які знаходяться або в іншому текстовому файлі (якщо він написаний у Ruby), або які складаються з коду C, як багато основної функціональності, яка потребує безпосередньо отримувати доступ до системних ресурсів, таких як пам'ять, файлова система та інше. І деякі функції, які вимагають дуже високої продуктивності.
Отже, у вас є різні частини мови, які можна або потрібно писати іншими мовами. Ніщо не завадить тобі написати письмовий перекладач на C та бібліотеки на C ++ (хоча, можливо, це ускладнить деякі речі). Ви навіть можете зробити кілька кроків і використовувати мову, яка дуже добре обробляє текст, щоб генерувати проміжні дані, які потім обробляються деяким кодом С.
Фактори прийняття рішення можуть бути такими ж, як і для інших складних застосувань. Продуктивність одна. Можливість запису коду, який може отримати доступ до системних ресурсів безпосередньо іншого. Тож у більшості випадків це повинна бути мова, що складена (хоча теоретично ви можете написати перекладача Ruby на Python). Наявність у різних системах важливо, якщо ви хочете, щоб ваша мова працювала на Linux, Win, OS X та інших.