La grande majorité des besoins de programmation, que ce soit dans l’industrie ou non, n’ont pas comme seul but d’avoir des performances maximales. En général on attache au moins autant d’importance au fait que le programme soit correct (et pas truffé de bugs), facile à maintenir, etc. C’est pour cela que plein de langages de programmations différents sont utilisés. (Sinon on écrirait tout en assembleur…)
Pour moi le fait de dire "un GC a toujours un coût" est un peu fallacieux. Les GCs ont des coûts et des gains, et finalement tous les programmes ont un GC, quand ce n’est pas dans le runtime de leur langage c’est leur allocateur mémoire (malloc
) qui fait GC (et qui peut avoir un coût en performance aussi), le système d’exploitation qui aussi gère la mémoire. Un programme écrit dans un langage à GC qui fait la même chose qu’un programme dans un langage sans GC peut être plus rapide, à quantité d’effort d’optimisations équivalents. (Parce que le GC évite plein de petits appels à malloc
plus coûteux, ou améliore la localité en déplaçant les objets…). Évidemment dans le cas général ce n’est pas ce qu’on observe, on voit plutôt (en général) des performances comparables mais une utilisation mémoire un peu supérieure. Mais l’idée de dire "ça a toujours un coût" n’a pas grand sens.
La vraie question serait plutôt : dans quels cas on a besoin de se passer de GC ? Est-ce qu’on peut le faire au sein d’un langage/système qui a un GC, ou est-ce que ça demande de passer par un langage sans GC ? Pour quelle partie du code de son application ?
Aujourd’hui les domaines où il faut absolument utiliser un langage sans GC sont assez restreints. Les noyaux systèmes d’exploitation semblent un bon candidat. Un autre c’est certaines parties des jeux vidéos, à cause des problèmes de latence introduite par la plupart des GCs (mais certains ont des latences acceptables pour les jeux vidéos, et dans tout les cas ce n’est pas un problème de performances brutes).
Dans tous les cas, si tu veux écrire des jeux vidéos, aujourd’hui les technologies les plus populaires sont presques toutes dans un langage à GC, donc la question ne se pose pas vraiment. "Love" est en Lua, Unity surtout en C#, les jeux pour Android sont tous en Java… Une exception est peut-être Unreal Engine 4, qui s’utilise surtout depuis C++, mais toutes les versions précédentes avaient leur propre langage d’utilisation maison, Unreal Script, et la version 4 a une grosse base d’utilisateurs (sérieux) qui utilisent un langage de script en plugin, Skookumscript.