Tout d'abord, une clarification, Java n'est pas complètement statique-compilé et lié dans le cours C++. Il est compilé en bytecode, qui est ensuite interprété par une machine virtuelle java. La JVM peut aller et faire juste-à-temps de la compilation, de la machine natif de la langue, mais ne pas avoir à le faire.
Plus au point: je pense que l'interactivité est la principale différence pratique. Puisque tout est interprété, vous pouvez prendre un petit extrait de code, de les analyser et de les exécuter à l'encontre de l'état actuel de l'environnement. Donc, si vous avez déjà exécuté le code qui a initialisé une variable, vous aurez accès à cette variable, etc. Il se prête vraiment moyen pour des choses comme le style fonctionnel.
L'interprétation, toutefois, les coûts beaucoup, surtout quand vous avez un système avec un grand nombre de références et le contexte. Par définition, il est peu rentable car un code identique pourrait être interprétée et optimisé par deux fois (bien que la plupart des exécutions ont certains de la mise en cache et les optimisations pour que). Encore, vous payez un coût d'exécution et ont souvent besoin d'un environnement d'exécution. Vous êtes également moins susceptibles de voir le complexe interprocedural optimisations car à l'heure actuelle leur performance n'est pas assez interactif.
Par conséquent, les systèmes de grande taille qui ne va pas changer beaucoup, et pour certaines langues, il est plus logique de précompiler et prelink tout, faire toutes les optimisations que vous pouvez faire. Cela se termine avec un très maigre runtime qui est déjà optimisé pour la machine cible.
Comme pour la génération executbles, qui a peu à voir avec elle, à mon humble avis. Vous pouvez souvent créer un exécutable à partir d'un langage compilé. Mais vous pouvez aussi créer un fichier exécutable à partir d'un langage interprété, sauf que l'interprète et le moteur d'exécution est déjà emballé dans l'exécutable, et cachés de vous. Cela signifie que vous devez généralement payer les coûts d'exécution (même si je suis sûr que pour certaines langues, il existe des moyens pour traduire tout à un arbre exécutable).
Je suis en désaccord que toutes les langues puissent être interactive. Certains langages, comme le C, sont tellement liée à la machine et de l'ensemble de la structure des liens que je ne suis pas sûr que vous pouvez construire un sens à part entière, une version interactive