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。
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被编译并支持动态类型(当然是通过
Java(静态类型语言)被编译成JVM字节码,它被解释在JVM的旧版本上,而现在它使用即时编译(JIT),意思是机器代码在运行时生成。我也相信ML及其方言可以被解释,而且ML绝对是静态类型。
actionscript具有动态类型并编译为字节码。
如果你想在iPhone上发布一个Flash应用程序,它甚至可以直接编译成本机代码。
python是一种具有编译器的动态语言。
例如,请看这个问题。
通常,编译会使程序运行得更快。