口译员和动态类型语言

为什么具有动态类型语言的程序通常被解释而不是编译?


简而言之:他们像豌豆和胡萝卜一样走到一起。

编译与解释和语言输入基本上是分开的担忧,因为您可以拥有所有可能的排列方式。 另一方面,选择编译和不为语言设计选择动态类型的“原因”通常是相同的:性能。 选择动态输入和解释的“原因”也有些相关。

这不是一条硬性规定。 你总是可以混合起来。 例如,您可以编译Perl和Lisp并解释C.


您正在观察非因果关联:

  • 动态类型和解释是相关的,因为两者都易于实现。
  • 静态类型和编译相关,因为两者都有利于可预测的良好性能。
  • 编译器通常会改装成动态类型语言,以提高性能(因为性能通常很差)。 例如,下面是在编写第一个编译器之前解释了一些主要的动态类型语言的时间:Lisp(1958-1962),Mathematica(1988-2004),Lua(1993-2004),Python(1991-2002)和Javascript(1995-2009)。 相比之下,OCaml(1996)和F#(2001)等语言首先作为编译器发布。


    正如其他人所指出的那样,语言既不编译也不解释。 它们只是需要翻译的规则,大部分都是解释和编译的实现。 即使这样,当很多“解释器”都在那里爆发时,很难谈论解释与编译,而且如果源文件更改,一些“编译器”很乐意按需编译。

    也许最好将实现分类为完全预编译按需编译 。 如果我们使用这些类别,那么打破完整预编译的一件事就是一个eval函数。 这可能比动态类型对实现有更多的影响。 如果你有一个eval函数,你需要支持按需编译。

    链接地址: http://www.djcxy.com/p/72319.html

    上一篇: Interpreters and Dynamically Typed Languages

    下一篇: Interpreted languages: The higher