小编典典

运行时与编译时间

all

运行时和编译时有什么区别?


阅读 119

收藏
2022-03-16

共1个答案

小编典典

编译时间和运行时间之间的差异就是头脑敏锐的理论家所说的
阶段差异
的一个例子。这是最难学习的概念之一,尤其是对于没有太多编程语言背景的人来说。为了解决这个问题,我觉得问一下很有帮助

  1. 程序满足哪些不变量?
  2. 在这个阶段会出现什么问题?
  3. 如果阶段成功,后置条件是什么(我们知道什么)?
  4. 如果有的话,输入和输出是什么?

编译时间

  1. 该程序不需要满足任何不变量。事实上,它根本不需要是一个格式良好的程序。您可以将此 HTML 提供给编译器并观看它…
  2. 编译时会出现什么问题:
    • 语法错误
    • 类型检查错误
    • (很少)编译器崩溃
  3. 如果编译成功,我们知道什么?
    • 该程序结构良好——无论使用何种语言,都是一个有意义的程序。
    • 可以开始运行程序。(程序可能会立即失败,但至少我们可以尝试。)
  4. 输入和输出是什么?
    • 输入是正在编译的程序,以及任何头文件、接口、库或其他需要 导入 以进行编译的巫术。
    • 输出希望是汇编代码或可重定位的目标代码,甚至是可执行程序。或者如果出现问题,输出是一堆错误消息。

运行

  1. 我们对程序的不变量一无所知——它们是程序员输入的任何内容。运行时不变量很少由编译器单独强制执行。它需要程序员的帮助。
  2. 可能出错的是 运行时错误

    • 被零除
    • 取消引用空指针
    • 内存不足

程序本身也可能检测到错误:

* 试图打开一个不存在的文件
* 尝试查找网页并发现所谓的 URL 格式不正确
  1. 如果运行时成功,则程序完成(或继续运行)而不会崩溃。
  2. 输入和输出完全取决于程序员。文件、屏幕上的窗口、网络数据包、发送到打印机的作业,应有尽有。如果程序发射导弹,这是一个输出,它只发生在运行时:-)
2022-03-16