Is there a compiled* programming language with dynamic, maybe even weak typing?
我想知道是否有一种编程语言可以编译为机器代码/二进制(而不是由虚拟机执行的字节码,在考虑输入时完全不同),它具有动态和/或弱类型,例如:
想想一种编译语言,其中:
- 变量不需要声明
- 可以在运行时创建变量
- 函数可以返回不同类型的值
问题:
我认为一种动态的、强类型的、编译好的语言确实有意义,但它是可能的吗?
- 一个# 4.0,C?……
- "罗伯特哈维:这是已编译的机器码?我认为这是对第一个编译字节码。
- "你可以把机器码铂:利用NGEN。
- "罗伯特哈维:噢,不是吧,伯爵。这是不是固有的语言。(这是索赔率可以编译Java文件也有语言,因为它可用于包装好。脚本语言而不是和为什么我在这,一定有转换程序,将生成的二进制和脚本的好吗?
- "我不知道白金:让你的点。机器代码从C和你得到的可能是真的# NGEN质量不高,有些直接到本地机器代码的编译器的代码有。的能力,某些明显的抖动是一optimizations漂亮。脚本黑客甚至到EXE文件不能被视为是同一件事阿。
- "罗伯特哈维:他妈的?汇编语言是不确定如何优化利用他们,但他们是否正在执行的机器代码转换后直接由机。这一定义不适合# C",它将编译后的字节码"的中间,这是一interpreted),然后,是的,JIT编译器。但它仍然是interpreted代码。同样的程序。不同于C或C++或其他语言,目前的编译器。
- @铂:我认为操作系统。在一读上NGEN / /图书馆/ ht8ecch6.aspx在美国。produces NGEN是执行代码可以直接由处理器。在字节码解释程序是必需的。
- "罗伯特哈维:我伤害了你,我的小稻草人样本。仔细阅读:I didn’t说NGEN没有生成机器代码。这就是我的问题不是反正。我的问题是,你要使用它在一个多步骤的所有要求,以# C代码到机器语言。C # compiles到中间语言。本机代码编译是不是固有的语言。正是在这样的脚本,它是对hackish exe的工具,这些工具的可能。
- "Azure的铂每编程语言需要编译从源到多个执行步骤,但真正的问题是与你的第二语句使用Word的"interpreted"。编程语言中的"interpreted"社区,这是有意义的有效性的早期版本的Java,但已经没有了任何的C #版本有效。c语言编的#无论是传球,也让它有相通。
我相信Lisp符合这种描述。
http://en.wikipedia.org/wiki/common-lisp
C 4.0有许多,如果不是所有这些特征的话。如果您真的想要本机代码,可以使用一个实用程序将字节码编译成机器代码。
特别是,使用dynamic关键字可以在运行时动态绑定对象及其成员。
查看Anders Hejlsberg的视频《C的未来》,了解以下内容:
http://channel9.msdn.com/pdc2008/tl16/
- 从技术上讲,这是错误的。C dynamic所做的就是提供语法上的优势,而不是使用对象作为类型。
Objective-C可能具有您所寻求的一些特性。类可以在运行时打开和更改,您可以向对象发送任何类型的消息,无论对象通常是否响应它。这样,您就可以实现duck类型,就像在Ruby中一样。类型id,大致相当于void*,可以被赋予指定类型(否则未知)将遵循的协定的接口。
是的,这是可能的。见朱丽亚。它是一种动态语言(您可以编写没有类型的程序),但它从不在虚拟机上运行。它在运行时将程序编译为本机代码(JIT编译)。
Objective-C有许多您提到的特性:它编译为机器代码,并针对对象实例有效地动态类型化。id类型可以存储任何类实例,而objective-c使用消息传递而不是成员函数调用。方法可以在运行时创建/添加。Objective-C运行时也可以在运行时合成类实例变量,但是仍然需要声明局部变量(就像在C中一样)。
C 4.0有许多这样的特性,除了编译成IL(字节码)并使用虚拟机(clr)解释之外。然而,这带来了一个有趣的观点:如果字节码只是及时编译为机器代码,那么这算不算?如果是这样,它不仅可以打开任何.NET语言的大门,还可以打开python(请参阅pypypy或unloaded sworn或ironpython)和ruby(请参阅macruby或ironruby)以及许多其他动态类型的语言,更不用说Lisp变体了。
与Lisp类似,它有factor、默认情况下不带变量的连接*语言、动态类型和灵活的对象系统。因子代码可以在交互式解释器中运行,也可以使用其deploy函数编译为本机可执行文件。
*基于无点函数栈
vb 6拥有大部分
- …但不能真正编译为机器代码(编译为P代码)。
- 默认设置是编译为本机代码。(您可以在项目属性中更改此设置。)
我不知道哪种语言有这些能力。我可以想到两个有一个重要的子集,尽管:
- D具有类型推断、垃圾收集和强大的元编程功能,但可以编译成高效的机器代码。但是,它没有动态类型。
- C可以通过Mono项目直接编译为机器代码。C有一个类似的特性设置为D,但同样没有动态类型。
python到c可能需要这些标准。
用python编写。
将python编译为可执行文件。请参阅将简单的python脚本转换为Windows可执行文件的过程。另请参见将代码转换器从python编写为c?
- 你不是在说这些"编译器"链接器只是把Python二进制文件和脚本打包在一个可执行文件中吗?
- @Sub:如何"打包二进制文件…"在一个可执行文件中,"不是编译器?请提供一些不包括从源代码创建一个可执行文件的定义。有些在编译二进制文件fwiw之前会转换成c。
- 不,不是。编译器将代码转换为计算机可读的二进制文件。py2exe(和其他系统)只将python可执行文件与python脚本一起发送,因此原始代码仍然是python,并且只由python可执行文件执行。但是存在着允许编译为C的Python语言的variations,但它从来不是原始的Python(如cython)。
- @manux:在运行py2exe之后,我有一个.exe,它可以由Windows直接执行。对的?这如何不符合问题中所述的标准?重要的不是你对编译的理解。重要的是,这个问题是模糊的,很多解决方案是可能的。