Swift 4.2 日本語化計画 : Swift 4.2
REPL とデバッガ
Swift.org コミュニティは LLDB デバッガ を使用して、豊富な REPL と Swift 言語のデバッグ環境を提供します。Swift は、デバッガに埋め込まれた Swift コンパイラのバージョンに緊密に結合されています。コンパイラとデバッガの緊密な統合により、迅速に発展する言語の文脈における完全な表現式の評価と同様に、Swift 型の正確な検査が可能になります。
しかし、この緊密な統合のために、開発者は、同じソースを使用してビルドされたコンパイラとデバッガの一致したペアを使用 しなければなりません。他のバージョンの LLDB を使用してデバッグすると、予期しない結果につながる可能性があります。
なぜ REPL とデバッガを組み合わせるのか?
Swift REPL の基礎として Swift デバッガを使用する決定には、いくつかの動機付け要因がありました。
- 統合されたデバッグ。最も明白な利点は、Swift REPL も完全な機能のデバッガであることです。関数を宣言し、その中にブレークポイントを設定し、それを呼び出すのは些細な事です。ブレークポイントで実行が停止すると、デバッガの全機能のセットがすぐに使用可能になります。
- エラーからの回復。 Swift での致命的なエラーは通常、プロセスの即時終了をもたらし、プロダクトコードのプログラマーエラーには意味がありますが、対話の文脈では望ましくありません。Swift REPL は、完全なデバッガを使用してエラーを調査したり、即座にリカバリを行うことができます。
- 活発な式の評価。デバッガで REPL シナリオの全範囲をサポートすることで、式の評価の高い基準を設定します。その結果、デバッガ内の式は Swift の全範囲の言語機能にアクセスでき、有効な言語構成を自由に宣言することができます。
- 一貫した結果形式。 REPL 内の値をテキストで表現するために使用される戦略は、デバッガによって共有され、ユーザー定義の型に対しても一貫した出力を保証します。
1> func answer() -> Int { 2. return 42 3. } 4> :b 2 4> answer() Execution stopped at breakpoint. Enter LLDB commands to investigate (type help for assistance.) 1 func answer() -> Int { -> 2 return 42 3 }
1> ["One", "Two"][2] fatal error: Array index out of range Execution interrupted. Enter Swift code to recover and continue. Enter LLDB commands to investigate (type :help for assistance.)
Xcode プレイグラウンドサポート
Swift 開発者はさまざまな方法で言語にアプローチできます。従来のコマンドラインコンパイラと対話式 REPL に加えて、多くの開発者にとって最も初期の経験の 1 つは、Xcode にプレイグラウンドを導入したことを通してでした。Swift 3.0 と Xcode 8 以前は、Xcode に含まれていた Swift のバージョンでのみこれは可能でした。Xcode プレイグラウンドサポートプロジェクトでは、Xcode 8 のプレイグラウンド経験との統合に必要なすべてを含む Swift のツールをビルドできます。プレイグラウンドサポートは、対応するスナップショットに含まれます。スナップショットをダウンロードし、インストールし、ツールチェーンを選択すると、Xcode のプレイグラウンドで最新の Swift 機能を使用できます。
このプロジェクトは、2 つのフレームワークをビルドします。
- プレイグラウンドサポート。このフレームワークは、Xcode と通信するためにプレイグラウンドコードによって明示的に参照される API を定義します。たとえば、これは、アニメーションや相互作用のためにライブを表示する特定のビューを鑑別するプレイグラウンドであり、また定義された基準が満たされたときにプレイグラウンドがページ間を自動的に移動するときに典型的です。
- プレイグラウンドの木こり。このプロジェクトは暗黙的に使用され、行単位で関心のある値を記録し、それらを Xcode に伝えます。呼び出しは自動的にプレイグラウンドコードに挿入されるため、明示的な参照は不要です。