是否有一种编程语言,具有可用的交互式解释器,即使它可以编译为机器代码?
16 回答
编译与“解释”本质上是实现问题,而不是语言本身。例如,MRI Ruby 1.8 被解释,而 MacRuby 被编译为本机机器代码。两者都包括一个交互式REPL。我知道的所有语言都至少有一个机器代码编译器和至少一个 REPL:
- 红宝石
- Python
- 几乎所有的 Lisp(Lisp 是开创这种技术的语言,AFAIK)
- OCaml
- 哈斯克尔
- 向前
如果我们将编译计算为字节码和机器码,那么绝大多数流行的字节码编译语言都是如此:
- 爪哇
- 斯卡拉
- 时髦的
- 二郎
- C#
- F#
- 短暂聊天
Haskell,使用Glasgow Haskell 编译器,它有一个名为 GHCi 的交互式“shell”。
许多 Lisp 风格都提供这两种选择,包括 Clojure。
这是另一个烧毁你的房子:
x86 组装
是的,这也有口译员。
在这一点上,你真的在模拟器领域,但它确实满足你陈述的要求。
我想知道是否更容易命名有人没有为其拼凑出工作解释器的编译语言。:-)
我想到了两个:ocaml 和 scala (~= java),但我相信肯定还有更多。
很多语言都提供了一种既可以交互又可以编译为机器代码的实现,但很少同时进行这两种操作。 新泽西州的标准 ML是一种具有交互式循环但没有字节码的机器:它只是在内存中编译为机器码,然后分支到它。
正如其他人提到的那样,OCaml。
如果托管代码 (.NET CLI) 与机器代码足够接近,那么 F# 也将是候选代码。可能还有其他符合要求的 .NET/Mono 语言。
Icon曾经有一个编译器,但它进出维护。它可能仍然有效。
Python 可以编译成 windows 可执行文件。
不完全是机器代码,但可以通过BeanShell编译和使用 Java 。
我使用 Ruby 和解释器,这里似乎有一个编译器。
C# 可以使用SnippetCompiler进行编译,也许这会充当您的交互式解释器?
你的问题有点含糊。甚至 Java 也适合它:
我所说的交互式解释器是指类似 shell 的环境,您可以在其中交互式地在运行时工作。
Java 有这个功能,例如在 Eclipse “剪贴簿页面”中,您可以在其中输入 Java 表达式并立即对它们求值。Java 当然也是一种编译语言(虽然它通常被编译为字节码,但也有各种编译器可以输出机器码)。
你在找什么?也许你可以解释你的问题或兴趣。
我尝试使用 mono/.net 一段时间,发现随机 GC 暂停令人不快(至少在我的旧笔记本电脑上)。我研究了使用 gambit-c 一种可以编译为 C 的方案的实现,但它似乎很难使用,因为文档有些有限,而且软件包不太容易安装和使用。
我通常只坚持使用解释语言,例如绑定到 C/C++ 的 python,这会更痛苦,但至少我知道我在做什么。