Ogni volta che ti preoccupi profondamente delle prestazioni, generalmente desideri avvicinarti il più possibile al metallo. Nella maggior parte delle lingue, è possibile scrivere segmenti di prestazioni critici nel codice C. I programmatori C possono passare al linguaggio assembly per le cose veramente importanti. Quindi, se sto scrivendo un codice C #, ma ho davvero bisogno di una prestazione limitata su un loop interno, posso scrivere un codice C o C ++ e usare interop per chiamare quel codice. Se ho bisogno di prestazioni ancora maggiori, posso scrivere assembly nella mia libreria C. Andare più in basso del montaggio è possibile, ma chi vuole scrivere codice macchina in questi giorni?
Tuttavia, e questa è la grande considerazione, il fatto di avvicinarsi al metallo è solo ad alte prestazioni per obiettivi piccoli e ristretti. Se stavo scrivendo un renderer 3D, potrei fare il calcolo a virgola mobile e il rendering in C, (usando una libreria per eseguirlo sulla scheda video.) Ma i problemi di performance sono anche architettonici, e spesso i problemi di prestazioni da problemi su larga scala risolto meglio in un linguaggio di alto livello.
Guarda Erlang: Ericsson aveva bisogno di un linguaggio per eseguire facilmente un lavoro parallelo enorme, perché l'elaborazione parallela avrebbe avuto più prestazioni di qualsiasi routine C strettamente ottimizzata su un core della CPU. Allo stesso modo, avere il codice più veloce in esecuzione nel tuo loop è solo un miglioramento delle prestazioni se non puoi rimuovere completamente il loop facendo qualcosa di meglio al livello più alto.
Puoi fare un enorme sistema, programmazione ad alto livello in C, ma a volte la maggiore espressività di un linguaggio più potente mostrerà opportunità di ottimizzazioni architettoniche che altrimenti non sarebbero ovvie.