在我对动态和静态类型的阅读中,我不断遇到这样的假设:静态类型语言是编译的,而动态类型语言是解释的。我知道一般来说这是正确的,但我对例外情况感兴趣。

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

有帮助吗?

解决方案

这里列出了一些有趣的系统。这是 不是 详尽无遗!

动态类型和编译

  1. Gambit 方案编译器, 切兹计划, ,Will Clinger 的盗窃计划编译器, 比格鲁 方案编译器,可能还有许多其他编译器。

    为什么?

    很多人真的很喜欢Scheme。程序即数据,良好的宏观体系,35年的发展,大社区。但他们想要的是性能。因此,出现了很多优秀的本机代码编译器——ChezScheme甚至是一个成功的商业产品(解释的字节码是免费的;您付费的本机代码)。

  2. LuaJIT 即时编译器 卢阿.

    为什么?

    来证明这是可以做到的。然后,人们开始 喜欢 他们的 Lua 程序加速了 3 倍。Lua 出现在很多游戏中,性能很重要,而且它也渗透到其他产品中。Adobe Lightroom 中 70% 的代码是 Lua。

  3. iconc 图标-to-C 编译器。

    为什么?

    使用过它的五十个人 爱过 图标。完全不寻常的评估模型,有史以来设计的最具创新性(在我看来是最好的)字符串处理系统。但该评估模型非常昂贵,尤其是在 20 世纪 80 年代末的计算机上。通过将 Icon 编译为 C,Icon 项目使得大型 Icon 程序可以在更短的时间内运行。

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

静态类型和解释

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

  1. 客观凸轮. 。ML 的方言,车辆 地段 语言设计方面的创新实验。

    为什么?

    非常便携的系统和非常快的编译时间。人们都喜欢这两种特性,因此新的语言设计思想得到了广泛传播。

  2. 莫斯科 ML。标准机器学习,带有模块系统的一些额外功能。

    为什么?

    便携、编译速度快、易于进行交互式读取/评估/打印循环。成为流行的教学编译器。

  3. C-萜普。一个老产品,我想可能来自 Gimpel Software。Saber C——我认为你再也买不到的产品了。

    为什么?

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

  4. UCSD Pascal——这个系统让“P 代码”成为家喻户晓的词。

    为什么?

    老师们喜欢 Niklaus Wirth 的语言设计,编译器可以运行在 非常 小型机器。Wirth 的简洁设计和 UCSD P 系统形成了无与伦比的组合,Pascal 被 20世纪70年代的标准教学语言。年轻人可能很难理解 20 世纪 70 年代有 关于第一门课程教什么语言的争论。今天我知道使用 C、C++、Haskell、Java、ML 和 Scheme 的程序。在 20 世纪 70 年代,人们总是使用 Pascal,而 UCSD P 系统是一个重要原因。

    如果您想知道,P 代表 便携的.

概括: :解释静态类型语言是快速将实现交付到每个人手中的好方法。(它对于在青铜时代硬件上进行调试也具有优势。)

其他提示

目标-C被编译和支持动态类型(当然调用经由[target doSomething]语法方法时)。也就是说,你只能在运行时发送任何消息给目标(用普通语言的语法,而无需编程针对反射API),只接收的,它可能无法处理编译时警告,并收到一个异常如果目标没有按“到该选择器(其为等的方法签名)吨响应;你可以问任何对象(都可以是静态类型id的,如果你的代码不知道什么更好的,或者不关心)是否respondsToSelector:探讨其功能。

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

的Actionscript有动态数据类型和编译成字节码。

如果您想发布在iPhone上的Flash应用程序它甚至编译一直到本机代码。

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

请参阅这太问题 - 。Python - why compile?,例如

在一般情况下,编译使得程序运行得更快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top