3

機械語にコンパイルできるにもかかわらず、使用可能な対話型インタプリタを備えたプログラミング言語はありますか?

4

16 に答える 16

14

コンパイルと「解釈」は本質的に実装の問題であり、言語自体ではありません。たとえば、MRI Ruby 1.8は解釈されますが、MacRubyはネイティブマシンコードにコンパイルされます。どちらにもインタラクティブREPLが含まれています。私が知っているすべての言語で、少なくとも1つのマシンコードコンパイラと少なくとも1つのREPLがあります。

  • ルビー
  • Python
  • ほとんどすべてのLisp(Lispはこの技術を開拓した言語、AFAIKでした)
  • OCaml
  • Haskell
  • 前方へ

コンパイルをマシンコードだけでなくバイトコードにも数える場合、一般的なバイトコードコンパイル言語の大部分に当てはまります。

  • Java
  • Scala
  • Groovy
  • Erlang
  • C#
  • F#
  • Smalltalk
于 2010-07-06T23:59:44.340 に答える
12

Haskell、GHCiと呼ばれるインタラクティブな「シェル」を備えたGlasgowHaskellコンパイラを使用。

于 2010-07-06T23:56:02.117 に答える
5

Lispの多くのフレーバーは、Clojureを含む両方のオプションを提供します。

于 2010-07-06T23:33:23.327 に答える
3

ocamlとscala(〜= java)の2つが頭に浮かびますが、もっとたくさんあるはずです。

于 2010-07-06T23:33:38.037 に答える
3

そして、ここにあなたの家を焼き払うためのもう一つがあります:

x86アセンブリ

うん、これにも通訳がいる。

この時点で、あなたは本当にエミュレーターの世界にいますが、それはあなたが述べた要件を満たしています。

誰かが実用的なインタプリタを作成していないコンパイル型言語に名前を付ける方が簡単かどうか疑問に思います。:-)

于 2010-07-07T08:28:13.623 に答える
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 に答える
2

多くの言語が、相互作用してマシンコードにコンパイルする実装を提供していますが、両方を同時に実行することはめったにありません。 ニュージャージーの標準MLは、インタラクティブループはあるが、バイトコードはないものです。メモリ内のマシンコードにコンパイルしてから分岐するだけです。

于 2010-07-07T01:53:51.010 に答える
1

正確にはマシンコードではありませんが、JavaをコンパイルしてBeanShellを介して使用することもできます。

于 2010-07-06T23:32:20.643 に答える
1

私はインタプリタでRubyを使用しましたが、ここにコンパイラがあるようです。

于 2010-07-06T23:33:20.393 に答える
1

アイコンには以前はコンパイラがありましたが、メンテナンスの内外にあります。それでも動作する可能性があります。

于 2010-07-06T23:37:05.687 に答える
1

PythonはWindows実行可能ファイルにコンパイルできます。

于 2010-07-06T23:39:38.960 に答える
1

C#はSnippetCompilerを使用してコンパイルできますが、これはインタラクティブなインタープリターとして機能しますか?

于 2010-07-06T23:55:08.577 に答える
1

あなたの質問は少し曖昧です。Javaでさえそれに適合します:

インタラクティブインタプリタとは、ランタイムでインタラクティブに作業できるシェルのような環境を意味します。

Javaにはこれがあります。たとえば、Eclipseの「スクラップブックページ」では、Java式を入力して、すぐに評価することができます。もちろん、Javaはコンパイル言語でもあります(通常はバイトコードにコンパイルされますが、マシンコードを出力するさまざまなコンパイラがあります)。

そう何を探してるんですか?多分あなたはあなたの問題や興味を説明することができます。

于 2010-07-07T00:08:32.990 に答える
1

mono / .netを少し使ってみたところ、ランダムなGCの一時停止が不快であることがわかりました(少なくとも私の無愛想な古いラップトップでは)。私はgambit-cを使用して、Cにコンパイルできるスキームの実装を検討しましたが、ドキュメントがいくらか制限されていて、パッケージのインストールと使用が非常に簡単ではなかったため、操作が難しいようでした。

私は通常、Pythonなどのインタプリタ言語をC / C ++にバインドすることに固執しますが、これはより苦痛ですが、少なくとも私は自分が何を求めているのかを知っています。

于 2010-07-07T00:11:02.043 に答える