编译的解释语言

时间:2010-07-06 23:28:42

标签: programming-languages compilation interpreter read-eval-print-loop

是否有编程语言,具有可用的交互式解释器,即使它可以编译为机器代码?

16 个答案:

答案 0 :(得分:14)

编译与“解释”本质上是一个实现问题,而不是语言本身。例如,MRI Ruby 1.8被解释,而MacRuby被编译为本机机器代码。两者都包含互动REPL。我知道的所有语言至少有一个机器代码编译器和至少一个REPL:

  • 红宝石
  • 的Python
  • 几乎所有Lisps(Lisp是开创这项技术的语言,AFAIK)
  • OCaml的
  • 的Haskell
  • 第四

如果我们将编译计算为字节码以及机器代码,那么绝大多数流行的字节码编译语言都是如此:

  • 爪哇
  • Scala的
  • Groovy的
  • 二郎
  • C#
  • F#
  • Smalltalk中

答案 1 :(得分:12)

Haskell,使用Glasgow Haskell Compiler,它有一个名为GHCi的交互式“shell”。

答案 2 :(得分:5)

Lisp的许多版本都提供了两种选择,包括Clojure。

答案 3 :(得分:3)

我想到了两个:ocaml和scala(〜= java),但我确信那里肯定会有很多。

答案 4 :(得分:3)

这是另一个烧毁你房子的人:

x86汇编

是的,还有解释器。

此时你真的处于模拟器领域,但它确实符合你所说的要求。

我想知道是否更容易命名编译语言,某人没有拼凑出一个有效的翻译。 : - )

答案 5 :(得分:2)

Lua具有单线和实验的交互模式。它通常编译为其VM的字节码以供执行。 LuaJIT是Lua VM的独立实现,也可以及时编译为32位x86。目前正在支持64位,并经常要求支持ARM。

编译为字节码通常是纯解释器和纯编译器之间的合理折衷。 VM可以根据语言的需要进行调整,JIT技术可以在执行时分析VM代码,并专注于频繁执行的代码路径和内部循环。

答案 6 :(得分:2)

正如其他人所提到的,OCaml。

如果托管代码(.NET CLI)足够接近机器代码,F#也将成为候选代码。可能还有其他.NET / Mono语言也符合要求。

答案 7 :(得分:2)

你可能会后悔问:

C和C ++。

为什么?

并且可能还有其他人。

答案 8 :(得分:2)

许多语言提供了一种实现,它既可以与机器代码进行交互,也可以编译,但是很少能同时执行这两种语言。 Standard ML of New Jersey是一个具有交互循环但没有字节码的东西:它只是编译到内存中的机器代码然后分支到它。

答案 9 :(得分:1)

不完全是机器代码,但Java可以编译并通过BeanShell使用。

答案 10 :(得分:1)

我使用Ruby和解释器,似乎有一个编译器here

答案 11 :(得分:1)

用于拥有编译器的图标,但它不属于维护范围。它可能仍然有用。

答案 12 :(得分:1)

Python可以编译为windows可执行文件。

答案 13 :(得分:1)

可以使用SnippetCompiler编译C#,也许这可以作为您的交互式解释器?

答案 14 :(得分:1)

你的问题有点模糊。即便是Java也适合它:

  我的意思是交互式口译员   贝壳般的环境,你可以在哪里   以交互方式在运行时中工作。

Java有这个,例如在Eclipse“剪贴簿页面”中,您可以在其中输入Java表达式并立即对其进行评估。 Java当然也是一种编译语言(虽然它通常编译为字节码,但有各种编译器输出机器代码)。

那你在找什么?也许你可以解释一下你的问题或兴趣。

答案 15 :(得分:1)

我尝试使用mono / .net一点,发现随机的GC暂停令人不愉快(至少在我硬的旧笔记本电脑上)。我看着使用gambit-c一个可以编译为C的方案的实现,但它似乎很难处理,因为文档有些限制,并且包不容易安装和使用。

我通常只是坚持使用像C / C ++这样的python这样的解释性语言,这更痛苦,但至少我知道我在做什么。