1. ホーム
  2. language-agnostic

[解決済み] ランタイムとコンパイルタイム

2022-03-23 21:28:25

質問

ランタイムとコンパイルタイムの違いは何ですか?

どのように解決するのですか?

コンパイル時と実行時の違いは、頭のとがった理論家が言うところの 位相の区別 . 特にプログラミング言語の素養があまりない人にとっては、最も習得しにくい概念の一つです。 この問題にアプローチするために、私は次のような問いかけが有効だと考えています。

  1. プログラムが満たすべき不変量は何か?
  2. このフェーズでは何が問題になるのでしょうか?
  3. フェーズが成功した場合、事後条件(分かっていること)は何か?
  4. 入力と出力がある場合は、その内容を教えてください。

コンパイル時

  1. プログラムは不変量を満たす必要はない。 むしろ、整形されたプログラムである必要は全くない。 このHTMLをコンパイラに送りつけて、吐き出させることもできる......。
  2. コンパイル時にうまくいかないこと
    • シンタックスエラー
    • タイプチェックのエラー
    • (まれに)コンパイラのクラッシュ
  3. コンパイラが成功した場合、何がわかるか?
    • プログラムはよくできていた---どんな言語であれ、意味のあるプログラムだった。
    • プログラムの実行を開始することができる。 (プログラムはすぐに失敗するかもしれないが、少なくとも試すことはできる)
  4. 入力と出力は何ですか?
    • 入力は、コンパイルされるプログラムと、それに必要なヘッダーファイル、インターフェース、ライブラリ、またはその他のブードゥー教です。 インポート を実行します。
    • 出力はうまくいけばアセンブリコード、リロケータブルオブジェクトコード、あるいは実行可能なプログラムです。 あるいは、何か問題があれば、エラーメッセージの束が出力されます。

実行時間

  1. 私たちはプログラムの不変量について何も知らない--それらはプログラマが書き込んだものすべてである。 実行時不変量はコンパイラだけで強制されることはほとんどなく、プログラマの手助けが必要です。
  2. 失敗する可能性があるのは ランタイムエラー :

    • ゼロによる除算
    • ヌルポインタのデリフェレンシング
    • メモリ不足

    また、プログラム自身が検出するエラーもあり得ます。

    • 存在しないファイルを開こうとした。
    • ウェブページを探そうとして、URLとされるものがうまく形成されていないことが判明した場合
  3. ランタイムが成功した場合、プログラムはクラッシュせずに終了する(または継続する)。
  4. 入力と出力はすべてプログラマーに任されています。 ファイル、画面上のウィンドウ、ネットワークパケット、プリンタに送られるジョブ、何でもありです。 もしプログラムがミサイルを発射したら、それは出力であり、実行時にのみ発生します:-)。