可编译的最高级语言是什么?

时间:2010-06-22 06:48:22

标签: compiler-construction programming-languages language-design

可编译为可执行文件的最高级语言是什么?当我说编译成可执行文件时,我不是指字节码,而是像C,C ++意义上的本机汇编代码。

编辑:我遇到的一个问题是客户端在限制访问权限中对我的服务器具有ssh访问权限。他们需要运行我的一些脚本,但我不希望他们看到源代码。如果没有读取权限,则无法执行Python脚本(或任何其他脚本),这与仅需要执行权限的本机编译程序不同。

4 个答案:

答案 0 :(得分:2)

任何语言可能都可以编译。 .net包含一个本机代码生成器(NGEN),它将字节码转换为本机代码,并可能用于创建本机二进制文件。实际上,任何编译为字节码的语言都可以具有相同的功能。

当你进入脚本语言(Python,PHP,Perl等)时,它开始变得棘手。在那些中,通常更容易将脚本与解释器捆绑在一个可执行文件中。但是没有什么能阻止某人编写PHP或Perl编译器,除了两种语言的“eval”函数几乎都需要能够解析和执行文本 - 这意味着你最终会得到一个至少与程序相关的解释器反正。

更大的问题是,“在什么级别上它不值得编译?”。对此,我会回答“当你运行必须能够解释自己的代码时”。 IE:我不打算尝试编译任何具有“eval”语句/函数的语言,除非我被允许删除语句/函数。

答案 1 :(得分:1)

我的投票将是Java + GCJ。有关GCJ的更多信息,请访问:

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

它可以跳过字节码并直接编译为机器码。

答案 2 :(得分:1)

许多Lisp方言都有本机代码编译器,Haskell,OCaml和Standard ML也是如此。

答案 3 :(得分:0)

你很困惑。计算机编程语言的关键在于它们可以自动执行,最终总是意味着编译到机器指令。因此,根据定义,每种语言的程序原则上可以变成可执行文件。有些人实际上没有采取这一步骤并且满足于解释的字节代码,但是大多数语言都有本机代码的翻译器(例如,甚至Java,具有生成特定于处理器的操作码而不是字节代码的JIT编译器)。

唯一的区别是更高的语言需要更多的编译器基础结构包含在可执行文件中;没有编译器可以摆脱垃圾收集机制,或运行时类型信息,或者它不再是同一个程序。但是,一种无法自动转换为可运行的计算机编程语言将毫无意义。

除了故意功能失调的语言,如Malbolge或课程,写“Hello world”是一项多年的努力......