To zależy. Jeżeli chodzi o Javę to jest JNI (jak podano w innej odpowiedzi). To ci pozwala na połączenie z językami C i C++. A to daje już wiele możliwości (osadzenie interpreterów innych języków). W przypadku Javy, możesz jeszcze napisać programy w językach opartych na JVM - Scala, Kotlin i połączyć z Javą, ponieważ kompilują się do Java Bytecodu. Tak samo w przypadku .NET - tam jest język CIL, a później bytecode .NETowy. W przypadku Asemblera, w niektórych językach jest funkcja asm(). Pozwala ona na dodanie instrukcji asemblera. Przypomina to inline CSS. Implementowanie HTML i zarazem JavaScriptu to skutek użycia CEF (Chromium Embedded Framework).
W przypadku języków, które kompilują się do kodu maszynowego, jest ich warstwa pośrednia (pliki obiektowe .o). Nigdy o tym nie czytałem, ale być może jest opcja, że łączenie np. C++ i Go to skutek łączenia tych plików.
Oczywiście są inne metody: komunikowanie się. Możesz postawić lokalny serwer API i wtedy jest jednostronna komunikacja. Możesz też za pomocą zwykłych plików tekstowych.
-------------------------------------------------------------------
Jeżeli umiesz podstawy c++, spróbuj napisać dwa osobne programy (oba w c++). Jeden z nich podmienia zawartość pliku test.txt z użyciem getline (zapętlone w nieskończonej pętli). Drugi ma jedną zmienną, pusty string(będzie w niej zawarta treść pliku, na początku zmienna jest pusta). Program odczytuje ten plik w nieskończoność. Jeśli coś się w pliku zamienia (porównanie z zmienną), to wypisuje treść pliku na ekran, oraz zmienna przechowująca aktualną zawartość pliku, jest zamieniana. Ot, taki eksperyment.
-------------------------------------------------------------------
Ostatecznie, program może wywoływać innego execa z użyciem jego CLI.