3

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

4

16 回答 16

14

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

  • 红宝石
  • Python
  • 几乎所有的 Lisp(Lisp 是开创这种技术的语言,AFAIK)
  • OCaml
  • 哈斯克尔
  • 向前

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

  • 爪哇
  • 斯卡拉
  • 时髦的
  • 二郎
  • C#
  • F#
  • 短暂聊天
于 2010-07-06T23:59:44.340 回答
12

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

于 2010-07-06T23:56:02.117 回答
5

许多 Lisp 风格都提供这两种选择,包括 Clojure。

于 2010-07-06T23:33:23.327 回答
3

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

x86 组装

是的,这也有口译员。

在这一点上,你真的在​​模拟器领域,但它确实满足你陈述的要求。

我想知道是否更容易命名有人没有为其拼凑出工作解释器的编译语言。:-)

于 2010-07-07T08:28:13.623 回答
3

我想到了两个:ocaml 和 scala (~= java),但我相信肯定还有更多。

于 2010-07-06T23:33:38.037 回答
2

很多语言都提供了一种既可以交互又可以编译为机器代码的实现,但很少同时进行这两种操作。 新泽西州的标准 ML是一种具有交互式循环但没有字节码的机器:它只是在内存中编译为机器码,然后分支到它。

于 2010-07-07T01:53:51.010 回答
2

Lua有一种用于单行和实验的交互模式。它通常编译为其 VM 的字节码以供执行。LuaJIT是 Lua VM 的独立实现,它还可以对 32 位 x86 进行即时编译。对 64 位的支持正在进行中,并且经常请求对 ARM 的支持。

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

于 2010-07-07T00:03:00.757 回答
2

正如其他人提到的那样,OCaml。

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

于 2010-07-07T00:20:00.873 回答
2

你可能会后悔问:

C 和 C++。

为什么?

可能还有其他人在那里。

于 2010-07-07T00:30:51.563 回答
1

Icon曾经有一个编译器,但它进出维护。它可能仍然有效。

于 2010-07-06T23:37:05.687 回答
1

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

于 2010-07-06T23:39:38.960 回答
1

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

于 2010-07-06T23:32:20.643 回答
1

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

于 2010-07-06T23:33:20.393 回答
1

C# 可以使用SnippetCompiler进行编译,也许这会充当您的交互式解释器?

于 2010-07-06T23:55:08.577 回答
1

你的问题有点含糊。甚至 Java 也适合它:

我所说的交互式解释器是指类似 shell 的环境,您可以在其中交互式地在运行时工作。

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

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

于 2010-07-07T00:08:32.990 回答
1

我尝试使用 mono/.net 一段时间,发现随机 GC 暂停令人不快(至少在我的旧笔记本电脑上)。我研究了使用 gambit-c 一种可以编译为 C 的方案的实现,但它似乎很难使用,因为文档有些有限,而且软件包不太容易安装和使用。

我通常只坚持使用解释语言,例如绑定到 C/C++ 的 python,这会更痛苦,但至少我知道我在做什么。

于 2010-07-07T00:11:02.043 回答