4

Est-ce que des langues comme par ex. Ruby (si vous exécutez l'IRM, je veux dire pas compilé avec le code octet) s'exécute réellement analysé chaque fois qu'une exécution, par exemple, d'une méthode ou d'un corps de boucle est nécessaire? Je veux dire, pour exécuter une boucle, vous devez analyser son corps N fois?Qu'est-ce que cela signifie pour une langue d'être «interprétée»?

Je viens toujours pensé que tous ces programmes sont en cours d'analyse une fois à l'amorçage, transformé dans un arbre de déclarations « fortement typé », etc. Est-ce vrai?

Répondre

4

Je vais être méchant maintenant et dire que à peu près tous les langages de programmation est interprétée, que ce soit un interprète logiciel (Ruby, Python, Java) ou matériel (C, C++) :)

Pour une vraie réponse, bien que je ne connaisse pas l'implémentation interne de Ruby, je suis sûr qu'ils ne l'analysent pas encore et encore. Bien qu'ils n'utilisent pas bytecode dans l'implémentation d'origine (ou ont-ils déjà migré?), Ils utilisent une représentation intermédiaire (vous pouvez le voir correctement quand vous voulez écrire des extensions C pour cela), et ainsi les exécuter encore et encore.

+0

« ils utilisent une représentation intermédiaire (vous pouvez le voir bien quand vous voulez écrire C-extensions pour elle) » - l'hypothèse où il est stocké en mémoire, ce qui pourrait cette représentation se ressemblent? – Bubba88

+0

Pour l'implémentation originale écrite en C, il s'agit d'une série de structures appelée "VALUE". Voici un petit aperçu: http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html – LukeN

+0

"Tout en n'utilisant pas bytecode dans le implémentation originale (ou ont-ils déjà migré?) "L'interpréteur officiel de ruby ​​utilise le bytecode depuis la version 1.9. – sepp2k

4

Interprété est un mot avec une définition très lâche. Même les instructions de code machine sont interprétées par le processeur.

En général, une distinction est faite entre les langues qui sont compilées avant leur exécution et les langues qui ne disposent pas d'un processus de compilation et sont exécutés dans un autre programme, appelé l'interprète. Ces derniers types de langues sont souvent appelés interpreted languages.

La ligne n'est pas clair dans certains cas:

  • Certaines langues peuvent être soit compilé ou interprété, par exemple PHP.
  • Certains code interprété peut être compilé lors de l'exécution dans les instructions machine natives (JIT compilation).
  • Certaines langues compilées peuvent avoir une fonctionnalité qui permet exec code à générer et exécuté à l'exécution, sans passer par le processus de compilation normale.