Programming languages 哪些语言是动态类型化和编译的(哪些是静态类型化和解释的)?

Programming languages 哪些语言是动态类型化和编译的(哪些是静态类型化和解释的)?,programming-languages,type-systems,dynamic-typing,static-typing,Programming Languages,Type Systems,Dynamic Typing,Static Typing,在我阅读动态和静态类型时,我一直反对静态类型语言被编译,而动态类型语言被解释的假设。我知道这通常是正确的,但我对例外情况感兴趣 我真的希望有人不仅给出这些异常的一些例子,而且尝试解释为什么决定这些语言应该以这种方式工作。Python是一种具有编译器的动态语言 例如,请参见-Python-为什么要编译? 一般来说,编译使程序运行得更快。Java(一种静态类型语言)被编译成JVM字节码,在旧版本的JVM上进行解释,而现在它使用即时(JIT)编译,这意味着机器代码是在运行时生成的。我也相信ML和它的方

在我阅读动态和静态类型时,我一直反对静态类型语言被编译,而动态类型语言被解释的假设。我知道这通常是正确的,但我对例外情况感兴趣


我真的希望有人不仅给出这些异常的一些例子,而且尝试解释为什么决定这些语言应该以这种方式工作。

Python是一种具有编译器的动态语言

例如,请参见-
Python-为什么要编译?


一般来说,编译使程序运行得更快。

Java(一种静态类型语言)被编译成JVM字节码,在旧版本的JVM上进行解释,而现在它使用即时(JIT)编译,这意味着机器代码是在运行时生成的。我也相信ML和它的方言是可以解释的,ML肯定是静态类型的。

Actionscript有动态类型并编译成字节码


如果你想在iPhone上发布Flash应用程序,它甚至可以编译成本地机器代码。

Objective-C是编译的,支持动态键入(当然是通过
[target doSomething]
语法调用方法时)。也就是说,您可以向目标发送任何消息(使用普通语言语法,无需针对反射API编程),在编译时只接收可能无法处理的警告,并且只有在目标不响应该选择器(类似于方法签名)的情况下,才在运行时接收异常;您可以询问任何对象(如果您的代码不知道或不关心,那么所有对象都可以是静态类型的
id
),它是否响应选择器:,以探测其功能。

以下是一些有趣的系统列表。它不是详尽无遗的

动态类型化和编译
  • Gambit方案编译器,将是Clinger的盗窃方案编译器,方案编译器,可能还有许多其他的

    为什么?

    很多人都很喜欢这个计划。项目作为数据,良好的宏观系统,35年的发展,大社区。但他们想要表现。因此,许多优秀的本机代码编译器Chez Scheme甚至是一个成功的商业产品(解释字节码是免费的;本机代码由您付费)

  • LuaJIT实时编译器

    为什么?

    来证明这是可以做到的。然后,人们开始喜欢在Lua程序中获得3倍的加速。Lua在很多游戏中都扮演着重要角色,而且它也潜入了其他产品中。Adobe Lightroom中70%的代码是Lua

  • iconc
    -to-C编译器

    为什么?

    使用它的50个人喜欢这个图标。完全不寻常的评估模型,是有史以来设计的最具创新性(在我看来也是最好的)字符串处理系统。但这种评估模式确实很昂贵,尤其是在20世纪80年代末的计算机上。通过将Icon编译成C,Icon项目使大图标程序在更少的时间内运行成为可能

  • 结论:人们首先对一种动态类型的语言产生一种依附,可能是一种重要的代码库。最终,社区推出了一个本机代码编译器,这样您就可以获得更好的性能并解决更大的问题

    静态类型化和解释的 这一类不太常见,但

  • 。ML方言,语言设计中大量创新实验的载体

    为什么?

    非常便携的系统和非常快的编译时间。人们喜欢这两种特性,因此新的语言设计理念被广泛传播

  • 莫斯科ML。标准ML,具有模块系统的一些额外功能

    为什么?

    可移植,编译速度快,易于进行交互式读取/评估/打印循环。成为一个流行的教学编译器

  • C-Terp。一个老产品,我想可能来自Gimpel软件。Saber C-a产品我想你再也买不到了

    为什么?

    调试。特别是在MS-DOS下对80年代的硬件进行调试。只需很少的资源,就可以在非常有限的硬件上调试C代码(想想:4.77MHz处理器,8位总线,640K RAM完全加载)。几乎不可能为本机编译代码获得一个好的可视化调试器,但使用解释器,相当容易

  • UCSD Pascal系统使“p代码”成为一个家喻户晓的单词

    为什么?

    老师们喜欢Niklaus Wirth的语言设计,而且编译器可以在非常小的机器上运行。沃思干净的设计和UCSD的P系统形成了无与伦比的组合,帕斯卡语是20世纪70年代的标准教学语言。年轻人可能会发现很难理解,在20世纪70年代,在第一门课程中没有关于教授哪种语言的争论。今天我知道程序使用C,C++,Haskell,java,ML,和方案。在20世纪70年代,它一直是帕斯卡语,而UCSD的P系统是一个重要的原因

    如果你想知道,p代表便携式


  • 摘要:解释静态类型的语言是让每个人都能快速掌握实现的好方法。(它在青铜时代的硬件上进行调试也有优势。)

    但仍然在解释器中运行,因为它不是编译成机器语言,而是编译成特殊的字节码,只能由python虚拟机(也称为解释器)运行,Java、C#和其他.NET语言也是如此。它们仍然被认为是被编译的,即使是字节码。这很有趣。我猜字节码模糊了编译和解释之间的区别。任何语言都可以编译成“删除空白”和“机器码”之间的任何形式,类型系统与之无关。NET字节码不会被解释,它会被编译成更多的代码