动态/静态语言和编译器/解释器

时间:2014-01-04 21:14:02

标签: dynamic compiler-construction static programming-languages interpreter

我有一些问题:

  • 总是会解释动态编程语言吗?我想是的,但为什么呢?
  • 静态打字系统是否有动态语言?
  • 总是编译带有静态类型系统的编程语言?

换句话说,之间确实存在一个联系:

  • 静态/动态类型系统和静态/动态语言
  • 静态/动态类型系统和编译器/解释器
  • 静态/动态语言和编译器/解释器

2 个答案:

答案 0 :(得分:3)

类型系统和执行方法之间没有固有的联系。可以编译动态语言,并可以解释静态语言。可以说,静态类型系统对于在执行之前编译的程序很有意义,作为在程序执行之前捕获某些类型的错误的方法。但是,动态类型系统解决的问题与静态类型系统不同,解释执行解决了与编译不同的问题。

请参阅What to know before debating type systems

答案 1 :(得分:2)

  

总是会解释动态编程语言吗?我想是的,但为什么呢?

没有。广泛使用的大多数动态语言在内部编译为字节码或机器代码(“JIT”)。还有一些用于动态类型语言的提前编译器。 Scheme和Lisp以及其他语言有很多编译器。

  

静态打字系统是否有动态语言?

是。您在这里寻找的术语是“可选输入”和“逐步输入”。

  

总是编译带有静态类型系统的编程语言?

大多数是,但这不是严格要求的。许多静态类型的函数语言(如ML,F#和Haskell)支持交互模式,它将动态解释(或内部编译和执行)代码。 Go还有一个命令,可以直接从源代码编译和运行代码。

  

换句话说,之间确实存在一个联系:

     

静态/动态类型系统和静态/动态语言   静态/动态类型系统和编译器/解释器   静态/动态语言和编译器/解释器

两者之间存在软链接。大多数使用动态类型语言的人都在使用它们,部分原因是他们希望在开发时快速迭代。同时,大多数使用静态类型语言的人希望尽早捕获尽可能多的错误。这意味着动态类型语言倾向于直接从源代码运行,而静态类型语言则倾向于提前编译所有内容。

但是没有技术原因阻止你混淆它。