3

動的型付けを使用したコンパイル済み言語 (ネイティブ コードへのコンパイル) に関しては、少し混乱しています。動的型付けとは、プログラム内の型が実行時にのみ推論されることを意味します。

言語がコンパイルされている場合、実行時に実行されるインタープリターはありません。CPUがメモリから命令を読み込んで実行するだけです。このようなシナリオでは、言語の型セマンティクスに違反する命令が実行時に実行された場合、プログラムの実行をインターセプトしてエラーをスローするインタープリターはありません。システムはどのように機能しますか?

動的に型付けされたコンパイル済み言語の型セマンティクスに違反する命令が実行時に実行されるとどうなりますか?

PS: 私が知っている動的に型付けされたコンパイル済み言語には、Scheme、Lua、Common Lisp などがあります。

4

1 に答える 1

4

動的型付け言語のコンパイラは、必要に応じて型をチェックする命令を生成するだけです。実際、静的に型付けされた一部の言語でさえ、これが必要になることがあります。たとえば、チェック キャストを使用するオブジェクト指向言語 ( dynamic_castC++ など) の場合です。動的型言語では、より頻繁に必要になります。

これらのチェックを可能にするには、各値をその型を追跡する方法で表す必要があります。動的に型付けされた言語で値を表す一般的な方法は、型と値を含む構造体へのポインターとしてそれらを表すことです (最適化として、(十分に小さい) 整数の場合、整数を直接無効なポインター (整数を 1 つ左にシフトし、その最下位ビットを設定することにより))。

于 2014-07-19T22:28:53.253 に答える