关于类型系统:哪些语言是动态类型和编译的(哪些是静态类型和解释的)?

Which languages are dynamically typed and compiled (and which are statically typed and interpreted)?

在阅读关于动态和静态类型的文章时,我一直在提出一个假设,即静态类型语言是编译的,而动态类型语言是解释的。我知道一般来说这是真的,但我对例外情况很感兴趣。

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


下面是一些有趣的系统的列表。这并不详尽!

动态类型化和编译

  • gambit方案编译器,chez-scheme,将使用clinger的盗窃方案编译器,bigloo方案编译器,以及其他许多编译器。


    Why?

    很多人真的很喜欢这个计划。程序如数据,良好的宏观系统,35年的发展,大社区。但他们想要表现。因此,许多优秀的本地代码编译器—chez方案甚至是一个成功的商业产品(解释的字节码是免费的;您支付的本地代码)。

  • Luajit实时编译器。


    Why?

    证明这是可以做到的。然后,人们开始喜欢在他们的lua程序上提高3倍的速度。Lua在很多游戏中都很重要,性能也很重要,而且它也逐渐进入到其他产品中。AdobeLightroom中70%的代码是Lua。

  • iconc图标到C编译器。


    Why?

    使用它的50个人喜欢图标。完全不寻常的评估模型,最创新的(我认为是最好的)字符串处理系统。但这种评估模型确实很昂贵,尤其是在80年代后期的计算机上。通过将icon编译为c,icon项目使大图标程序能够在更短的时间内运行。

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

    静态类型和解释

    这类不太常见,但…

  • 目标CAML。ML的方言,是许多语言设计创新实验的载体。


    Why?

    非常便携的系统和非常快的编译时间。人们喜欢这两种属性,因此新的语言设计思想被广泛地分解。

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


    Why?

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

  • C-Telp一个旧产品,我想可能来自吉普软件。Saber C—我认为你再也买不到了。


    Why?

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

  • ucsd pascal,使"p-code"成为家喻户晓的词的系统。


    Why?

    老师们喜欢NiklausWirth的语言设计,编译器可以在非常小的机器上运行。Wirth的干净设计和UCSD P系统完美结合,Pascal是20世纪70年代的标准教学语言。年轻人可能很难理解20世纪70年代在第一门课程中教授什么语言没有争论。今天,我知道程序使用C,C++,Haskell,Java,ML,和方案。在20世纪70年代,它一直是帕斯卡,而UCSDP系统是一个很大的原因。

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

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


    Objective-C被编译并支持动态类型(当然是通过[target doSomething]语法调用方法时)。也就是说,您可以向目标发送任何消息(使用普通语言语法,不针对反射API进行编程),在编译时仅接收可能无法处理的警告,并且仅在目标不响应该选择器(类似于方法签名)时在运行时接收异常;并且您可以请求任何对象(例如如果您的代码不知道更好或不关心的话,ICH都可以是静态类型的id,不管它是respondsToSelector:来探测它的能力。


    Java(静态类型语言)被编译成JVM字节码,它被解释在JVM的旧版本上,而现在它使用即时编译(JIT),意思是机器代码在运行时生成。我也相信ML及其方言可以被解释,而且ML绝对是静态类型。


    actionscript具有动态类型并编译为字节码。

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


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

    例如,请看这个问题。

    通常,编译会使程序运行得更快。