compile-time & run-time

893 阅读2分钟

总结来自stack overflow高赞回答

前置

搞清楚下面的几个问题:

  • 什么是不变的量
  • 什么样的错误会在这个阶段发生
  • 成功了会怎么样,你可以做什么
  • 输入输出分别指的是什么

带着问题去比较compile-time and run-time

compile-time

  • 什么是不变的量? 编译阶段,顾名思义就是把当前代码进行编译,编译成机器语言,所以无所谓什么不变的量

  • 这个阶段会发生什么错误 诸如语法错误,类型错误,编译错误(很少发生) 都会在这个阶段发生

  • 编译成功了就怎样 代码正常运行,意味着这个“代码本身” 不存在什么语法层面的错误, 我们可以正常执行程序,当然这个程序可能会崩(因为只能说明语法层面没什么大毛病 , 具体的逻辑编译器不在乎)

  • 输入输出是什么 对于compile-time,输入就是通过import引进来的各种文件,包括本地文件 模块 第三方模块等, 输出就是对应模块的内容

run-time

执行阶段,就是执行编译后的代码

  • 什么是不变的量

这个时候代码已经编译成功,所以这里的不变的量就是这个编译好的代码的运行环境,这基本上是开发人员来控制的

  • 这个阶段会发生什么错误

诸如 除数为0, 空指针异常, 内存溢出这种由具体逻辑引发的错误 异或是I/O操作 比如打开某个文件,但这个文件根本不存在

  • 执行成功了怎么样 程序真正意义上的正常运行

  • 输入输出分别是什么

这里就是真正意义上的输入输出了,用户输入 程序处理后给出反馈

总结

以除数为0为例, 你可以写1/0 ,这完全ok ,但是这个逻辑可能会导致你的执行失败,

所以先编译 后执行 记住各个阶段会发生什么潜在的错误 我们就能很快的进行区分了