コンパイル
プロジェクトはコンパイルすることができます。 コンパイルとは、すべてのメソッドをマシン言語に翻訳することです。 プロジェクトをコンパイルすると、コードの整合性を調べたり、実行速度を向上させることができます。さらに、コード全体を難読化することにより保護することも可能です。 4D でプロジェクト開発をおこない、それをスタンドアロンアプリケーションとして配布するまでの間の手順として、コンパイルは不可欠です。
コンパイル
コンパイル処理はすべて 4Dアプリケーションにより自動的でおこなわれます。
macOS上でコンパイルするには、
Xcode
をインストールする必要があります。 このことについての詳細は Apple Silicon用コンパイラー を参照ください。
-
コンパイラーウィンドウを表示するには、デザイン メニューの コンパイラー... を選択するか、またはツールバーにある コンパイラー ボタンをクリックします。
また、デザイン メニューの コンパイル開始... を選択すると、コンパイル処理を直接開始できます。
- コンパイル ボタンをクリックすると、現在の コンパイル設定 に基づいてコンパイル処理を開始します。
エラーが検出されなければ、実際のコンパイル処理が開始します。コンパイル処理が完了すると、"コンパイルに成功しました" というメッセージがウィンドウの下部に表示されます:
コンパイルが終了次第、アプリケーションをコンパイル済みモードで実行し、実行速度がどれだけ向上したのか確認することができます。
エラーが検出されると処理が中止され、"コンパイルに失敗しました" というメッセージが表示されます。 ウィンドウの情報エリアに、問題となるメソッド名と行番号が階層リスト形式で表示されます:
関係するメソッドを直接 4D のコードエディターで開くには、検出された各エラーをダブルクリックします。 エラーを含む行がハイライト表示され、エラーの種類がウィンドウのシンタックスエリアに表示されます。
メソッド メニューから 前のエラー / 次のエラー を選択すると、エラーが含まれる各行を移動することができます。
初めてのコンパイルで検出されるエラーの数に辟易するかもしれませんが、気にすることはありません。 ほどなく、これらのエラーが同じ原因によるものであることに気づくでしょう。たとえば、特定のプロジェクト規約に対する違反などです。 コンパイラーは、エラーの訂正に役立つよう 正確なエラー診断 を提供します。
コンパイルには、適切なライセンスが必要です。 ライセンスがない場合、コンパイルを実行することはできません (ボタンが無効になります)。 その場合でも、シンタックスチェックと変数定義メソッドの生成はおこなうことができます。
コンパイル済み実行
プロジェクトがコンパイルされると、インタープリターモードとコンパイル済みモード を切り替えて実行できるようになります。この際、4Dアプリケーションを終了する必要はありません (インタープリターコードを削除している場合は除きます)。 切り替えには、実行 メニューの インタープリター再起動 や コンパイル済み再起動 コマンドを使用します。 プロジェクトを開くダイアログボックス でも、起動時にインタープリターモードとコンパイル済みモードから選択することができます。
モードを変更すると、4D は現在のモードを閉じ、新しいモードを開きます。 つまり、アプリケーションが閉じられ、再び開かれます。 モードを切り替えるたびに、4D は 2つのデータベースメソッド (定義されていれば) を次の順番に実行します: On Exit
-> On Startup
。
インタープリターモードでプロジェクトを編集したら、それをコンパイルコードに反映させるには再コンパイルしなければなりません。
コンパイラーウィンドウ
コンパイラーウィンドウでは、コンパイル ボタン の他にも、プロジェクト開発時に有用な機能が提供されています。
シンタックスチェック
シンタックスチェック ボタンは、シンタックスチェックフェーズの実行を開始します。 チェックが終了すると、検出されたエラーがすべて情報エリアに表示されます。 エラー行をダブルクリックすると、対応するメソッドを表示することができます。
シンタックスチェックは、ツールバーの コンパイラー ボタンに割り当てられた シンタックスチェック コマンドから実行することもできます。 アプリケーションをコンパイルするための適切なライセンスを持たない場合は、このオプションしか使用できません。
型宣言を生成する
このボタンは、変換されたプロジェクトで、コンパイルパスオプション に 自動変数定義は行わない (直接型指定) が選択されていない場合にのみ表示されます。 このボタンに関する情報については、以前の 4Dリリースのドキュメント を参照ください。
コンパイルコードを削除
コンパイルコードを削除 ボタンを使用すると、プロジェクトのコンパイル済みコードが削除されます。 ボタンをクリックすると、コンパイル時に生成されたコード がすべて削除されます。実行 メニューの コンパイル済み再起動 コマンドが無効になり、開始時の "開く: コンパイルモード済みデータベース" オプションはグレー表示されます。
警告を表示/隠す
警告を表示/隠す ボタンをクリックすると、コンパイラーウィンドウの 警告 の表示を切り替えることができます。
このオプションを有効にすると、ウィンドウには他のエラータイプの後に警告 (あれば) が表示されます。 実際の表示は次のとおりです:
警告をダブルクリックすると、対応するメソッドが開かれます。
コンパイラー設定
ストラクチャー設定ダイアログボックスの "コンパイラー" タブでは、プロジェクトのコンパイルに関連するパラメーターを設定できます。 コンパイラーウィンドウ の コンパイラー設定 ボタンをクリックすると、コンパイラーページを直接開くことができます。
コンパイルオプション
このエリアには、コンパイル処理中に使用される一般的なオプションがまとめられています。
Symbolファイルを生成
Symbolファイルを生成するのに使用します (Symbolファイル 参照)。 Symbolファイルは、プロジェクトの Logs フォルダー 内に ProjectName_symbols.txt
という名前で作成されます。
エラーファイルを生成
シンタックスチェック時にエラーファイルを生成するのに使用します (エラーファイル 参照)。 エラーファイルは、プロジェクトの Logs フォルダー 内に ProjectName_error.xml
という名前で作成されます。
コンパイル対象CPU
履歴
リリース | 内容 |
---|---|
19 | 追加 |
この設定で、4Dプロジェクトをネイティブコンパイルする対象となるプロセッサー・ファミリーを選択します。 4D のコンパイラーは 2つのプロセッサー・ファミリーに向けてネイティブコードをビルドできます:
- Intel/AMD プロセッサー (すべてのマシン)
- Apple Silicon プロセッサー
対象CPUの選択肢は 2つ提示されます。 結果は、4D を実行しているマシンのプロセッサーに依存します。
オプション | Windows Intel/AMD | macOS Intel | macOS Silicon |
---|---|---|---|
全てのプロセッサ (Intel/AMD および Apple Silicon) | Intel/AMD 用コードのみ Windows上で Apple Silicon 用のコードは生成できません | Apple Silicon + Intel/AMD 用コード 2種類のコンパイルコードが生成されます | Apple Silicon + Intel/AMD 用コード 2種類のコンパイルコードが生成されます |
自分のプロセッサ (プロセッサー名) | Intel/AMD 用コード | Intel/AMD 用コード | Apple Silicon 用コード |
Apple Silicon 用にコンパイルするには、マシンに Clang アプリケーションをインストールする必要があります。 Clang は最新バージョンの Xcode に含まれています。 詳細については Apple Silicon用コンパイルの要件 を参照ください。
追加のオプション (互換性)
20 R7 より前の 4Dバージョンから変換されたプロジェクトでは、追加のコンパイルオプションを使用できます:
- コンパイルパス
- デフォルトの型指定
- コンパイラーメソッド...
これらのオプションは、従来のコードとの互換性のためにのみ維持されています。 詳細については、以前の 4Dリリースのドキュメント を参照ください。
変換されたプロジェクトでは、直接型指定を有効化 し、それに準拠した宣言コードを書くことが推奨されます:
var
キーワードを使って すべての変数を明示的に宣言する。- 関数のプロトタイプで
Function
やClass Constructor
キーワードを使って、またはメソッド内で#DECLARE
キーワードを使って、すべてのパラメーターを明示的に宣言する (パラメーターの宣言を参照)。
直接型指定の有効化
直接型指定モードは、変換されたプロジェクトでのみ任意となります。 4D 20 R7 以降で作成されたプロジェクトではネイティブで使用されます。
直接型指定モードを有効化するには、コンパイルパス メニューで 自動変数定義は行わない (直接型指定) オプションを選択します。 このオプションが選択されると、他の互換性オプションは使用できなくなり、表示されなくなります。
柔軟性と効率性を提供するため、このオプションを使用することが推奨されます。 直接型指定の概念は、すべての要素がコード内の定義されている場所で直接宣言されることを前提としています。 すべての変数が var
シンタックス で宣言されていることと、メソッドや関数のパラメーターが プロトタイプで 宣言されていることを確認する必要があります (不足している、または無効な宣言を検出するのに シンタックスチェック 機能が役立ちます)。
警告
警告は、コンパイラーがシンタックスチェックをおこなう際に生成するとメッセージです。 これらのメッセージの目的は、実行時エラーを引き起こす可能性のあるステートメントに注意を向けることです。 警告によりコンパイルが中断されることはありません。
状況や使用されるプログラミングスタイルによって、警告の重要性は変化します。 コンパイラーダイアログおよびコードエディター (4Dコードエディターまたは VS Code) にて、警告を有効/無効にすることができます。警告タブ を使えばグローバルに、または //%W
を使用することでローカルに設定できます。
警告タブ
このタブでは、どの警告をグローバルに表示するかを定義できます。 警告のリストはコード順で並べられ、ローカライズされたラベルを確認することができます。
リストを絞り込むには、コードとラベルを検索 テキストボックスを使用して、警告ラベルやコードを検索します。
デフォルトでは、すべての警告タイプがチェックされて有効になっています。
警告の表示状態を変更すると、プロジェクトの Settingsフォルダーに置かれる "warnings.json" ファイルに情報が保存されます。
初期設定にリセット ボタンは、すべての警告表示状態チェックボックスをデフォルト値に戻し、"warnings.json" ファイルを削除します。
ローカルに警告を無効化/有効化する
コードの特定の部分で警告を制御するには、専用のコメントを使用してそれらを無効化/有効化することができます。
警告を無効にするには、警告を無効にするコードセクションの前後に次のコメントを挿入します:
// コードセクションの先頭に追加するコメント
//%W-<警告番号>
// コードセクションの最後に追加するコメント
//%W+<警告番号>
警告を再有効化したいコードセクションがある場合には、その前後に次のコメントを挿入します:
// コードセクションの先頭に追加するコメント
//%W+<警告番号>
// コードセクションの最後に追加するコメント
//%W-<警告番号>
無効化/有効化できるのは、番号の付いた警告に限られます。 警告番号は、コンパイルエラーリストの各メッセージの最後、または警告タブのリストに示されています。 たとえば、次の警告を無効にしたいものとします:
1: 変数 $a の再定義 (550.10)
... それには、以下のコメントを 4Dメソッドに追加するだけです:
var $a : Text
$a:="hello world"
//%W-550.10
var $a : Text
//%W+550.10
特別な警告コメントは、警告タブでの警告表示設定よりも優先されます。
コンパイルツール
Symbolファイル
コンパイラー設定の Symbolファイルを生成 オプションを選択してコンパイルすると、プロジェクトの Logs フォルダー 内に ProjectName_symbols.txt
という名称の Symbolファイルが作成されます。 このドキュメントはいくつかの部分に分かれています:
プロセスおよびインタープロセス変数のリスト
これら 2つのリストは、4つのカラムに分かれています:
- プロジェクト内で使用されているプロセス変数、インタープロセス変数、および配列の名前。 変数は ABC順に表示されます。
- 変数の型。 変数の型は、コンパイラー命令コマンドにより設定されるか、変数の使われ方に基づいてコンパイラーが判断します。 変数の型が特定できない場合、このカラムは空欄になります。
- 変数が配列の場合に、その次元数が表示されます。
- コンパイラーが変数の型を決定したコンテキストへの参照。 変数が複数のコンテキストで使用されている場合は、コンパイラーが変数の型を決定する際に使用したコンテキストが表示されます。
- 変数がデータベースメソッド内で検出された場合、(M)* に続けて 4D で定義されたデータベースメソッド名が表示されます。
- 変数がプロジェクトメソッド内で検出された場合、(M) に続けて 4D で定義されたメソッド名が表示されます。
- 変数がトリガー (テーブルメソッド) 内で検出された場合、(TM) に続けてテーブル名が表示されます。
- 変数がフォームメソッド内で検出された場合、テーブル名と (FM) に続けてフォーム名が表示されます。
- 変数がオブジェクトメソッド内で検出された場合、フォーム名、テーブル名、(OM) に続けてオブジェクトメソッド名が表示されます。
- 変数がフォーム上のオブジェクトであり、プロジェクトメソッド、フォームメソッド、オブジェクトメソッド、トリガーのいずれでも使用されていない場合は、(F) に続けてそのオブジェクトが使用されるフォーム名が表示されます。 各リストの最後には、プロセス変数とインタープロセス変数のサイズがバイト単位で表示されます。
コンパイル時に、コンパイラーは特定のプロセス変数が使用されているプロセスを判別できません。 プロセス変数には、プロセスごとに異なる値が格納されている可能性があります。 そのため、新規プロセスが開始されるたびに、すべてのプロセス変数が意図的に複製されます。したがって、メモリ上でこれらのプロセス変数が占める容量に注意することが推奨されます。 また、プロセス変数に使われる容量は、プロセスのスタックサイズとは関連しないことに留意が必要です。
ローカル変数のリスト
ローカル変数のリストは、データベースメソッド、プロジェクトメソッド、トリガー、フォームメソッド、オブジェクトメソッドごとに、4D内と同じ順番で並べられています。
このリストは、3つのカラムに分かれています:
- メソッドで使用されるローカル変数のリスト
- 変数の型
- 変数が配列の場合に、その次元数
メソッドの全リスト
ファイルの最後には、データベースメソッドとプロジェクトメソッドの全リストが、それぞれ次の情報とともに納められます:
- 戻り値の型 (戻り値のあるプロシージャーまたは関数)
- パラメーターの型 (受け渡される引数および戻される値)
- コール数
- スレッドセーフまたはスレッドアンセーフ・プロパティ
この情報は、次の形式で示されます:
プロシージャーまたは関数 <メソッド名>(パラメーターの型):戻り値の型, コール数, スレッドセーフまたはスレッドアンセーフ
エラーファイル
コンパイラー設定の エラーファイルを生成 オプションを使用して、コンパイル時にエラーファイルを生成するかどうかを選択することができます。 エラーファイルは、プロジェクトの Logsフォルダー内に ProjectName_errors.txt
という名前で作成されます。
コンパイラーウインドウ からエラーに直接アクセスすることができますが、マシンからマシンへ送信できるエラーファイルがあると便利な場合があります。 エラーファイルは、その内容を自動的に解析しやすいように XMLフォーマットで生成されます。 これを利用して、エラー表示用に独自のインターフェースを作成することもできます。
エラーファイルの長さは、コンパイラーにより生成されるエラーと警告の数により変わります。
エラーファイルの構造は次のとおりです:
- ファイルの一番上にはエラーと警告のリストがあり、メソッドごと、そして 4D で作成された順序で並べられます。
- 全般的なエラー セクションには、タイプ定義がおこなえないものと識別が不明確なものがすべて集められます。 これらのエラーと警告は、次の形式で表示されます:
- メソッドにおける行番号 (0 は全般的なエラー)
- warning属性は、検出された異常が警告であるのか (warning="true")、あるいはエラーであるのか (warning="false") を表わします
- エラーを解説する診断の表示
プロジェクトに全般的なエラーが存在しない場合、そのファイルには 全般的なエラー セクションがありません。
エラーファイルには、次の 3つのタイプのメッセージが含まれます:
-
特定の行に関連するエラー: これらのエラーは、コンテキスト (エラーが見つかった行) 内に説明とともに表示されます。 コンパイラーは、データ型やシンタックスに関する矛盾を含む式で見つけると、このタイプのエラーをレポートします。 コンパイラーウィンドウでは、検出された各エラーをダブルクリックすると、該当するメソッドが直接 4Dのコードエディターで開かれ、エラーを含む行が反転表示されます。
-
全般的なエラー: これらのエラーは、プロジェクトのコンパイルを不可能にします。 コンパイラーが全般的なエラーを生成するケースは、次の 2つです:
- プロセス変数のデータ型が決定できなかった。
- 異なる 2つのオブジェクトが同じ名称である。
全般的なエラーは特定のメソッドに関連していないため、このような名前が付けられています。 最初のケースは、コンパイラーがプロジェクトのいずれの箇所でも、指定された型定義を実行できなかった場合です。 2番目のケースでは、いずれのオブジェクトに特定の名前を割り当てるべきかを決定できません。
- 警告: 警告はエラーではありません。 警告により、プロジェクトがコンパイルできなくなることはありません。これは、エラーになる可能性のあるコードを示すだけです。 コンパイラーウィンドウにおいて、警告はイタリック体で表示されます。 それぞれの警告をダブルクリックすると、該当するメソッドが直接 4Dのコードエディターで開かれ、その警告に関係する行が反転表示されます。
範囲チェック
4Dコンパイラーによって生成されたコードでは、配列要素へのアクセスや文字参照が実際に配列や文字列の範囲内でおこなわれているかが自動的に確認されます。 範囲外へのアクセスは、ランタイム実行エラーを誘発します。
コード内で間違いがないと思われる箇所に対して範囲チェックを適用したくないときもあります。 具体的には、かなりの回数繰り返されるループに関し、旧式のマシン上でコンパイル済みデータベースを実行すると、範囲チェックにより処理速度が著しく低下するおそれがあります。 関連するコードに誤りがなく、システムエラーを引き起こさないことが確実であれば、範囲チェックをローカル上で無効にすることができます。
これをおこなうには、範囲チェックから外すコードを特殊なコメントである //%R-
と //%R+
で囲みます。 //%R-
コメントは範囲チェックを無効にし、//%R+
はそれを再び有効にします:
// %R- 範囲チェックを無効化
... // ここに範囲チェックから外すコードを記述します
// %R+ 以降は範囲チェックが再び有効になります
コンパイラーについて
4D には 2種類のコンパイラーがあります:
- "クラシック" コンパイラーは Intel/AMDプロセッサー向けのネイティブコードをコンパイルします
- "Apple Silicon用コンパイラー" は Apple Silicon プロセッサー向けのネイティブコードをコンパイルします
クラシックコンパイラーは Windows および macOS のどちらでも使用できますが、Apple SIlicon用コンパイラーは macOS マシンでのみ使用できます:
Windows用コンパイル | Intel Mac用コンパイル | Silicon Mac用コンパイル | |
---|---|---|---|
Windows | O | O | X |
Intel Mac | O | O | O |
Silicon Mac | O | O | O |
どちらのコンパイラーも 4D に統合されています。 コンパイル対象CPU オプションの設定に応じて、適切なコンパイラーが自動的に選択されます。
クラシックコンパイラー
マシンの OS に関わらず、クラシックコンパイラーは Intel/AMDプロセッサー向けのネイティブコンパイルコードを生成します。 特別な設定は必要ありません。
結果のコンパイルコードはプロジェクトの DerivedData フォルダーに保存されます。
Apple Silicon用コンパイラー
Apple Silicon用コンパイラーは Apple M1 などの Apple Silicon プロセッサー向けのネイティブコンパイルコードを生成します。
結果のコンパイルコードはプロジェクトの Libraries フォルダーに保存されます。
要件
- macOS マシン: Apple Silicon用コンパイラーは Apple のマシン上でのみ実行可能です。
- 4D プロジェクトアーキテクチャー: Apple Silicon用コンパイラーは プロジェクトアーキテクチャー を使った 4D開発でのみ利用できます。
- Xcode または Developer Tools: コンパイルの 2つ目のステップ において、プロジェクトを C++ コードからコンパイルするために、Apple Silicon用コンパイラーはオープンソース macOS コンパイラー Clang を呼び出します。 Clang は Apple ネイティブライブラリを必要とします。これらは Xcode または Developer Tools パッケージより提供されています。
- Xcode や Developer Tools をマシン上でインストールされた状態で すでに持っている場合、それらのバージョンが 4D の要件と合っていることを確認します。
- マシンにインストールされた状態でこれらのツールを 持っていない場合、Apple Developer の Webサイトからいずれかをダウンロードする必要があります。
インストール手順が簡単なため Xcode のインストールを推奨しています。 よりコンパクトな Developer Tools をインストールしても問題ありませんが、こちらはインストール手順がやや複雑です。
いずれにせよ、要件が満たされていない場合には、4D の Apple Silicon用コンパイラーが警告を発します。
インクリメンタルコンパイラー
Apple Silicon用コンパイラーはインクリメンタルコンパイラーです:
- 初めてのコンパイルにおいては、すべての 4Dメソッド がコンパイルされます。 これには時間がかかる可能性がありますが、 一度きりです。
- 以降のコンパイルにおいては、新規または編集されたメソッド のみが処理され、コンパイル時間を大幅に短縮します。