Вариантов много
1) Конвертер - пишется на одном языке, затем скармливается конвертеру, и получаем код на другом языке. Обычно работает криво, не всегда как задумывалось, а иногда тупо не работает. Причина - все языки сильно разные, и не все можно однозначно перевести друг в друга без потери функционала.
2) Микросервисы и отдельные программы. В принципе это немного разные подходы, но суть одна - каждый язык компилится в бинари, а между собой общаются через апи или тупо из командной строки друг друга дергают, как вариант - через третий связующий сервис.
3) Библиотеки. Пишем либу на С, подключаем к пыху - вуаля, у нас получился Фалкон!
Вроде есть еще какая-то экзотика, но склероз, склероз... а, вроде что-то типа распределенной программной среды от МС, оно уже сдохло, но существовало некоторое время как "очень перспективная технология", но не срослось... Думаю кто-то из олдфагов даже вспомнит точное наименование...