首页 文章

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

提问于
浏览
36

我想知道是否有一种编程语言编译成机器代码/二进制文件(不是字节码,然后由VM执行,这在考虑打字时完全不同),具有动态和/或弱类型,例如:

想一下编译语言,其中:

  • 不需要声明变量

  • 可以在运行时创建变量

  • Functions can return values of different types

问题:

  • 有这样的编程语言吗?

  • (为什么)不是?

我认为一种动态但强大的类型化编译语言真的能感觉到,但它有可能吗?

9 回答

  • 2

    我相信Lisp符合这种描述 .

    http://en.wikipedia.org/wiki/Common_Lisp

  • 0

    Objective-C可能具有您寻求的一些属性 . 可以在运行时打开和更改类,并且可以向对象发送任何类型的消息,无论它是否通常响应它 . 通过这种方式,您可以实现鸭子类型,就像在Ruby中一样 . 类型 id (大致相当于 void* )可以赋予接口,该接口指定(否则未知)类型将遵守的 Contract .

  • 6

    C#4.0具有许多(如果不是全部)这些特征 . 如果您真的想要本机机器代码,可以使用实用程序compile the bytecode down to machine code .

    特别是, dynamic 关键字的使用允许在运行时动态绑定对象及其成员 .

    查看Anders Hejlsberg的视频,C#的未来,获得一本入门书:

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

  • 4

    Objective-C具有您提到的许多功能:它可以编译为机器代码,并且可以针对对象实例进行有效的动态类型化 . id 类型可以存储任何类实例,而Objective-C使用消息传递而不是成员函数调用 . 可以在运行时创建/添加方法 . Objective-C运行时还可以在运行时合成类实例变量,但仍需要声明局部变量(就像在C中一样) .

    C#4.0具有许多这些功能,除了它被编译为IL(字节码)并使用虚拟机(CLR)进行解释 . 然而,这提出了一个有趣的观点:如果字节码即时编译为机器代码,那还算数吗?如果是这样,它不仅可以打开任何.Net语言,而且可以打开Python(参见PyPyUnladed SwallowIronPython)和Ruby(参见MacRubyIronRuby)以及许多其他动态类型语言,而不是许多LISP变体 .

  • 3

    对的,这是可能的 . 见Julia . 它是一种动态语言(您可以编写没有类型的程序)但它永远不会在VM上运行 . 它在运行时将程序编译为本机代码(JIT编译) .

  • 6

    与Lisp类似,有Factor,默认情况下没有变量的串联*语言,动态类型和灵活的对象系统 . 因子代码可以在交互式解释器中运行,也可以使用 deploy 函数编译为本机可执行文件 .

    *基于无点功能堆栈

  • 31

    VB 6具有大部分功能

  • 4

    我不知道任何具有这些功能的语言 . 我可以想到两个有重要子集的人:

    • D 具有类型推断,垃圾收集和强大的元编程功能,但编译为高效的机器代码 . 但是,它没有动态类型 .

    • C# 可以通过mono项目直接编译为机器代码 . C#具有类似于D的功能,但同样没有动态类型 .

  • 1

    Python到C可能需要这些标准 .

相关问题