【问题标题】:Equivalent terminology for 'compile time' in JavascriptJavascript 中“编译时间”的等效术语
【发布时间】:2018-12-01 20:38:10
【问题描述】:

术语编译时间与编译语言(如C++)一起使用,表示源代码正在经历编译过程的时间点。

runtime 一词用于表示应用程序打开并由用户运行的时间点。

例如,如果我们编写了一个基于顶点列表渲染地形的简单游戏...如果此地形数据是从服务器获取的,我可能会说地形的状态直到 运行时。但是,如果设想我们只有一个地形“模型”,并直接在源代码中进行配置,我可能会说地形的状态在编译时是已知的(我是说错了吗?)。

在 Javascript 中,编译时间的等效术语是什么?我自己的解决方案是将其称为设计时间,但我很想知道是否有正确的术语。

【问题讨论】:

  • 由于 JavaScript 是一种解释型语言,而不是一种编译型语言,因此 execution time 在 JavaScript (imo) 中是一个适当的等价物。
  • 我想,既然没有什么要编译的,那就是脚本的load time
  • 如果您有一个将数据捆绑到代码中的构建步骤,那么说它是一个编译步骤绝对有效。
  • 取决于实现,但有些引擎有“及时”(JIT)编译。见stackoverflow.com/q/7807235/691711

标签: javascript terminology


【解决方案1】:

就您的示例而言,仅说它是“硬编码”可能更有意义,因为这对于您所描述的内容似乎更准确。硬编码的东西在编译时总是已知的,但在编译时已知的东西不一定是硬编码的(例如,在 C++ 中,它们可以使用 constexpr 函数生成,或使用构建参数注入)。

在 Javascript 中最接近“编译时间”的东西我可能会称之为“构建时间”,因为您经常在 Javascript 中有某种构建步骤,无论这是使用重量级构建过程WebPack,只是简单的缩小,甚至只是将应用程序文件的特定版本收集到某种可分发的包中。即使您实际上根本没有执行这样的步骤,我认为人们通常会理解这是什么意思。

【讨论】:

    【解决方案2】:

    取决于实现,但某些引擎具有“即时”(JIT) 编译。见JavaScript Just In Time compilation

    但是,作为代码编写者而不是引擎可以做的事情大多限于捆绑和缩小以减少获取运行程序所需的所有脚本。

    最接近的比较可能是如何在编译语言中动态和静态链接。

    【讨论】:

      【解决方案3】:

      在Javascript中没有真正的相当于“编译时间”。

      一个常见的术语,例如没有赋值的“提升”或变量声明是“创建阶段”(相对于“执行阶段”)。

      这很适合解释和理解 javascript。但是,不一定真的会发生这样一个特定的“阶段”。

      语言规范ECMA-262 也不使用这些术语。相反,它只使用相对术语,即它指定在其他事情之前或之后应该发生什么,并且显然将实现留给引擎开发人员。

      例如互联网上通常这样解释:

      在“创建阶段”声明一个 var,并在“执行阶段”实例化

      但 ECMA 只是以这种方式指定它:

      当 X 时创建一个 var (/let/const/...),但只要 Y,...,它就保持“未定义”(但可能直到 Z,...才被访问)

      此类相对术语的示例:

      ECMA-262,第 11 章,第 13.3.2 章:

      Var 变量是在实例化包含它们的词法环境时创建的 ...
      ... 被赋值为 ... 当执行 VariableDeclaration 时,而不是 创建变量时

      ECMA-262,第 11 章,第 8.1 章:

      每次评估此类代码时都会创建一个新的词法环境

      【讨论】:

        猜你喜欢
        • 2013-04-06
        • 1970-01-01
        • 2011-09-10
        • 2016-07-03
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        相关资源
        最近更新 更多