【发布时间】:2011-02-03 01:07:09
【问题描述】:
我想知道是否有一种编程语言可以编译成机器码/二进制文件(不是字节码,然后由 VM 执行,在考虑打字时这是完全不同的东西),具有动态和/或弱类型,例如:
想象一种编译语言,其中:
- 变量不需要声明
- 可以在运行时创建变量
- 函数可以返回不同类型的值
问题:
- 有这样的编程语言吗?
- (为什么)不是?
我认为动态但强类型的编译语言会很有意义,但有可能吗?
【问题讨论】:
-
@Platinum:您可以使用 NGen 获取机器码。
-
@Robert Harvey:噢,来吧,这不算数。这不是语言所固有的。按照这个速度,我可以声称 Java 也是一种编译语言,因为它也有 .exe 包装器可用。为什么不是脚本语言,而我正在使用它,肯定有转换程序可以接受脚本并生成二进制文件?
-
@Platinum:不确定我明白你的意思。您从 C# 和 NGen 获得的机器代码实际上可能比那里的一些直接到机器代码的本机代码编译器质量更高。抖动能够进行一些相当大的优化。执行 hack 的脚本甚至不能被远程认为是同一件事。
-
@Robert Harvey:我有点受伤,你会这样骗我。仔细阅读:我没有说 NGen 不生成机器码。无论如何,这不是我的问题。我的问题是你必须使用它,因为需要多个步骤之一才能将 C# 代码转换为机器语言。 C# 编译为中间语言。编译的机器代码不是该语言固有的。从这个意义上说,它完全像一个脚本到 .exe 工具,就像那些工具一样,很老套。
-
@Platinum Azure - 每种编译的编程语言都需要从源代码到可执行文件的多个步骤,但您的第二个语句的真正问题是使用了“解释”一词。在编程语言社区中,“解释”具有特定的含义,它对 Java 的早期版本有效,但从未对任何版本的 C# 有效。 C# 是一种编译型语言,无论它经过什么阶段才能到达那里。
标签: programming-languages typing static-typing dynamic-typing