有编译的*编程语言是否具有动态,甚至是弱类型?

Is there a compiled* programming language with dynamic, maybe even weak typing?

我想知道是否有一种编程语言可以编译为机器代码/二进制(而不是由虚拟机执行的字节码,在考虑输入时完全不同),它具有动态和/或弱类型,例如:

想想一种编译语言,其中:

  • 变量不需要声明
  • 可以在运行时创建变量
  • 函数可以返回不同类型的值

问题:

  • 有这样的编程语言吗?
  • 为什么不呢?

我认为一种动态的、强类型的、编译好的语言确实有意义,但它是可能的吗?


我相信Lisp符合这种描述。

http://en.wikipedia.org/wiki/common-lisp


C 4.0有许多,如果不是所有这些特征的话。如果您真的想要本机代码,可以使用一个实用程序将字节码编译成机器代码。

特别是,使用dynamic关键字可以在运行时动态绑定对象及其成员。

查看Anders Hejlsberg的视频《C的未来》,了解以下内容:

http://channel9.msdn.com/pdc2008/tl16/


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拥有大部分


我不知道哪种语言有这些能力。我可以想到两个有一个重要的子集,尽管:

  • D具有类型推断、垃圾收集和强大的元编程功能,但可以编译成高效的机器代码。但是,它没有动态类型。
  • C可以通过Mono项目直接编译为机器代码。C有一个类似的特性设置为D,但同样没有动态类型。

python到c可能需要这些标准。

  • 用python编写。

  • 将python编译为可执行文件。请参阅将简单的python脚本转换为Windows可执行文件的过程。另请参见将代码转换器从python编写为c?