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
),它是否响应选择器:,以探测其功能。以下是一些有趣的系统列表。它不是详尽无遗的
动态类型化和编译
iconc
-to-C编译器
为什么?
使用它的50个人喜欢这个图标。完全不寻常的评估模型,是有史以来设计的最具创新性(在我看来也是最好的)字符串处理系统。但这种评估模式确实很昂贵,尤其是在20世纪80年代末的计算机上。通过将Icon编译成C,Icon项目使大图标程序在更少的时间内运行成为可能摘要:解释静态类型的语言是让每个人都能快速掌握实现的好方法。(它在青铜时代的硬件上进行调试也有优势。)但仍然在解释器中运行,因为它不是编译成机器语言,而是编译成特殊的字节码,只能由python虚拟机(也称为解释器)运行,Java、C#和其他.NET语言也是如此。它们仍然被认为是被编译的,即使是字节码。这很有趣。我猜字节码模糊了编译和解释之间的区别。任何语言都可以编译成“删除空白”和“机器码”之间的任何形式,类型系统与之无关。NET字节码不会被解释,它会被编译成更多的代码