In molti casi, quando vedi più lingue usate insieme, scoprirai che una è una lingua compilata e l'altra è un linguaggio di scripting.
Il linguaggio compilato è tipicamente C / C ++, ma può essere molti altri linguaggi (Haskell, Erlang, Java, ecc.). Il linguaggio compilato fornisce l'applicazione di base. La base fornisce un'interfaccia al sistema operativo sottostante e la base per il lavoro che deve essere svolto dall'applicazione. L'applicazione fornirà spesso funzionalità di livello inferiore che semplificano lo sviluppo utilizzando l'interfaccia di scripting.
Il linguaggio di scripting viene spesso utilizzato per fornire personalizzazioni per l'applicazione. La personalizzazione può essere parte dell'applicazione fornita dal venditore per la propria convenienza o l'interfaccia di scripting può fornire la personalizzazione per l'utente finale.
Molte volte, l'interfaccia di script fornisce quasi un linguaggio specifico di dominio fornendo funzioni utili e un'interfaccia di alto livello specifica per l'applicazione, rendendola più facilmente personalizzabile.
Un paio di esempi ben noti. Emacs è scritto in C e personalizzato con Emacs Lisp. TextMate è un'applicazione compilata personalizzata con Ruby. Atom è un nuovo editor di testo scritto in JavaScript per essere eseguito su Node. L'atomo è più indiretto. L'applicazione è (quasi?) Tutto JavaScript mentre Node.js utilizza V8 che è scritto in C ++. World of Warcraft ha un'interfaccia di scripting che usa Lua.
Come esempio personale, ho lavorato su un programma di installazione brand-in cui il codice di base era Objective-C / C ++ per accedere agli elementi dell'interfaccia utente su MacOS con personalizzazione utilizzando AppleScript. L'interfaccia AppleScript è stata utilizzata solo da noi per contrassegnare l'applicazione per ciascun cliente.
Come altri hanno già detto, usa la lingua giusta per l'applicazione giusta.