インタープリターモードとコンパイル済みモード
4D アプリケーションは インタープリター または コンパイル済み モードで実行することができます:
- インタープリターモードにおいて、コードは実行時に読み込まれてマシン語に翻訳されます。 コードはいつでも追加・変更することができ、アプリケーションは自動的に更新されます。
- コンパイル済みモードにおいては、コンパイル時にすべてのコードが一括で読み込まれて翻訳されます。 コンパイル後のアプリケーションにはアセンブリレベルの指示のみが残され、コード編集はできません。
コンパイルには以下のようなメリットがあります:
- 速度: アプリケーションの実行速度を3倍から1000倍速くします。
- コードチェック: アプリケーションコードの整合性を チェックし、 論理的矛盾や構文的矛盾を検出します。
- 保護: アプリケーションをコンパイルすると、インタープリターコードを削除できます。 コンパイルされたアプリケーションは、故意的にも不注意からもストラクチャーやメソッドの表示・修正ができないこと以外は、オリジナルのアプリケーションと同じに動作します。
- ダブルクリックで起動するアプリケーション: コンパイル後のアプリケーションは、独自のアイコンを持つスタンドアロンアプリケーションに作り変えることもできます。
- プリエンプティブモードでの実行: プリエンプティブプロセスとして実行できるのは、コンパイルされたコードに限られます。
インタープリターコードとコンパイル済みコードの違い
アプリケーションの動作は同じであっても、インタープリターモードとコンパイル済みモードにはいくつかの相違点があり、コンパイルされるコードを書くにあたってはこれらを意識しておく必要があります。 基本的に、4D のインタープリターはコンパイラーより柔軟です。
コンパイル済みコード | インタープリターコード |
---|---|
変数名とメソッド名が被ってはいけません。 | エラーは生成されませんが、メソッド が優先されます。 |
すべての変数は、var や #Declare 、Function キーワードを使った宣言によって、あるいはコンパイル時にコンパイラーによって、型指定されなければなりません。 | 変数の型は実行中に決定していくことができます (推奨されません) |
変数や配列のデータタイプは変更できません。 | 変数や配列のデータタイプは変更可能です (推奨されません) |
1次元配列を2次元配列に、また2次元配列を1次元配列に変更することはできません。 | 可能です。 |
コンパイラーにより変数のタイプ定義はおこなわれますが、フォーム上の変数のようにデータタイプが明確でない場合は、宣言によって変数のデータタイプを指定するべきです。 | |
Undefined 関数は、常に False を返します。 変数は常に定義されています。 | |
メソッドの "プリエンプティブプロセスで実行可能" プロパティにチェックを入れていた場合、コードは他のスレッドアンセーフなコマンドやメソッドを呼び出してはいけません。 | プリエンプティブプロセスプロパティは無視されます。 |
特定のループの場合、割り込みを可能にするには IDLE コマンドが必要です。 | いつでも割り込み可能です。 |