首页 文章

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

提问于
浏览
36

在我对动态和静态类型的阅读中,我不断反对编译静态类型语言的假设,同时解释动态类型语言 . 我知道一般来说这是真的,但我对异常感兴趣 .

我真的希望有人不仅可以提供这些例外的一些例子,而是试图解释为什么决定这些语言应该以这种方式工作 .

5 回答

  • 0

    这是一些有趣系统的列表 . 它并非详尽无遗!

    动态键入和编译

    • Gambit Scheme编译器,Chez Scheme,Will Clinger的Larceny Scheme编译器,Bigloo Scheme编译器,可能还有很多其他编译器 .

    为什么?

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

    • Lua的LuaJIT即时编译器 .

    为什么?

    表明它可以做到 . 然后,人们开始喜欢在他们的Lua程序上获得3倍的加速 . Lua参与很多游戏,性能很重要,而且它也在逐渐渗透到其他产品中 . Adobe Lightroom中70%的代码是Lua .

    • iconc Icon -to-C编译器 .

    为什么?

    使用它的五十个人都喜欢Icon . 完全不同寻常的评估模型,最具创新性(在我看来,最好的)字符串处理系统 . 但是这种评估模型非常昂贵,特别是在20世纪80年代后期的计算机上 . 通过将Icon编译为C,Icon Project使大型Icon程序可以在更短的时间内运行 .

    Conclusion :人们首先开发一种动态类型语言的附件,可能是一个重要的代码库 . 最终,社区吐出一个本机代码编译器,以便您可以获得更好的性能并解决更大的问题 .

    静态类型和解释

    这个类别不常见,但......

    • Objective Caml . ML的方言,是语言设计中许多创新实验的载体 .

    为什么?

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

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

    为什么?

    便携,快速的编译时间,易于进行交互式读/评估/打印循环 . 成为一个流行的教学编译器 .

    • C-Terp . 我认为可能来自Gimpel Software的旧产品 . Sabre C-a产品我认为你不能再买了 .

    为什么?

    调试 . 特别是,在MS-DOS下调试20世纪80年代的硬件 . 对于非常少的资源,你可以在非常有限的硬件上调试C代码得到很好的帮助(想想:4.77MHz处理器带有8位总线,640K的RAM满载) . 几乎不可能为本机编译的代码获得良好的可视化调试器,但使用解释器,相当容易 .

    • UCSD Pascal-使“P代码”成为家喻户晓的系统 .

    为什么?

    教师喜欢Niklaus Wirth的语言设计,编译器可以运行在非常小的机器上 . Wirth的清洁设计和UCSD P系统是无与伦比的组合,Pascal是20世纪70年代的标准教学语言 . 年轻人可能会发现很难理解在20世纪70年代,在第一门课程中没有关于教什么语言的辩论 . 今天我知道使用C,C,Haskell,Java,ML和Scheme的程序 . 在20世纪70年代,它总是帕斯卡尔,而加州大学圣地亚哥分校的P系统是一个很重要的原因 .

    如果你想知道,P代表 portable .

    Summary :解释静态类型语言是快速实现每个人实施的好方法 . (它也有利于青铜时代硬件的调试 . )

  • 3

    Objective-C被编译并支持动态类型(当然通过 [target doSomething] 语法调用方法时) . 也就是说,您可以向目标发送任何消息(使用普通语言语法,无需针对反射API进行编程),在编译时仅接收可能无法处理的警告,并且仅在运行时接收异常(如果目标不存在)不响应那个选择器(这就像一个方法签名);并且您可以询问任何对象(如果您的代码没有关注,可以全部为静态类型 id )是否 respondsToSelector: 来探测它能力 .

  • 1

    Java(一种静态类型语言)被编译为JVM字节码,该字节码在较旧版本的JVM上进行解释,而现在使用Just In Time(JIT)编译,这意味着机器代码是在运行时生成的 . 我也相信ML及其方言可以被解释,ML绝对是静态类型 .

  • 34

    Actionscript具有动态类型并编译为字节码 .

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

  • 2

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

    例如,请参见this SO question - Python - why compile? .

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

相关问题