Frage

Gibt es eine Programmiersprache, verwendbar interaktive Interpreter mit, auch wenn es in Maschinencode kompiliert werden kann?

War es hilfreich?

Lösung

Compilation vs. „Interpretation“ ist im Wesentlichen eine Frage der Umsetzung, nicht die Sprache selbst. Zum Beispiel MRI Ruby 1.8 wird so interpretiert, während MacRuby zu nativen Maschinencode kompiliert wird. Beide enthalten eine interaktive REPL . Alle Sprachen, die ich kenne, die mindestens einen Maschinencode-Compiler und mindestens eine REPL:

  • Rubin
  • Python
  • Fast alle Lisps (Lisp war die Sprache, die diese Technik Pionierarbeit geleistet, AFAIK)
  • OCaml
  • Haskell
  • Forth

Wenn wir zählen Kompilierung Bytecode sowie Maschinencode, es ist wahr, von der überwiegenden Mehrheit der populären Bytecode-kompilierten Sprachen:

  • Java
  • Scala
  • Groovy
  • Erlang
  • C #
  • F #
  • Smalltalk

Andere Tipps

Haskell, mit dem Glasgow Haskell Compiler , die hat eine interaktive "Schale" genannt GHCi.

Viele Aromen von Lisp bieten beide Optionen, einschließlich Clojure.

Zwei meiner Meinung nach kommen. Ocaml und scala (~ = Java), aber ich bin sicher, es muss viel mehr da draußen

Und hier ist ein anderer Ihr Haus abbrennen:

x86 Assembly

Yup, gibt es Dolmetscher für diese auch.

An diesem Punkt sind Sie wirklich in Emulator Land, aber es erfüllt die Anforderungen, die Sie Zustand.

Ich frage mich, ob es einfacher ist, kompilierten Sprachen zu nennen, dass jemand nicht einen Arbeits Dolmetscher für gepflasterten auf. : -)

Lua hat einen interaktiven Modus für Einzeiler und Experimentieren. Es kompiliert normalerweise Bytecode für seine VM zur Ausführung. luajit ist eine unabhängige Implementierung einer Lua VM, die Kompilierung auch 32-Bit-x86-just-in-time tut. Unterstützung für 64-Bit ist im Gang, und die Unterstützung für ARM wird häufig gefordert.

Compilation zu einem Bytecode ist oft ein vernünftiger Kompromiss zwischen einem reinen Dolmetscher und einem reinen Compiler. Die VM kann auf die Bedürfnisse der Sprache abgestimmt werden, und JIT-Techniken können die VM-Code analysieren, wie es auf häufig ausgeführte Codepfade und inneren Schleifen ausführt und zu konzentrieren.

Wie andere erwähnt haben, OCaml.

Wenn verwalteten Code (.NET CLI) ist nahe genug, um Maschinencode, F # ein Kandidat als gut. Es gibt wahrscheinlich auch andere .NET / Mono Sprachen, die die Anforderung auch gerecht werden.

Sie können bedauern Sie gefragt:

C und C ++.

Warum?

und es gibt wahrscheinlich noch andere da draußen auch.

Viele Sprachen bieten eine Implementierung, dass beide zusammenwirkt und compiliert in Maschinencode, aber es ist selten beide auf einmal zu tun. Standard ML von New Jersey ein, die eine interaktive Schleife hat, ist aber keine Bytecode: kompiliert es einfach zu Maschinencode in Speicher und verzweigt dann zu.

Nicht gerade Maschinencode, sondern Java können über Beanshell zusammengestellt und auch verwendet werden.

habe ich Rubin mit einem Dolmetscher verwendet, und es scheint ein Compiler hier .

Icon verwendet, um einen Compiler zu haben, aber es fällt in die und aus der Instandhaltung. Es kann immer noch arbeiten.

Python kann ausführbare Windows-Dateien kompiliert werden.

C # kann mit SnippetCompiler kompiliert werden, vielleicht würde dies tun, als einen interaktiven Interpreter für Sie?

Ihre Frage ist ein wenig vage. Auch Java würde es passen:

Mit dem interaktiven Interpreter, ich meine Shell-ähnliche Umgebung, wo Sie Arbeit in der Laufzeit interaktiv.

Java hat dies beispiels in dem Eclipse „Einklebebuchseiten“, wo man Java-Ausdrücke eingeben und hat sie sofort ausgewertet. Java ist natürlich auch eine kompilierte Sprache (und während es in der Regel zu Bytecode kompiliert, gibt es verschiedene Compiler, dass der Ausgangsmaschinencode).

Also, was suchen Sie? Vielleicht könnten Sie Ihr Problem oder Interesse erklären.

Ich habe versucht, mit Mono / .net für ein wenig und fand zufällig GC Pausen unangenehm zu sein (zumindest auf meinem verkrusteten alten Laptop). Ich sah Gambit-c eine Implementierung der Regelung bei Verwendung, die C kompilieren können, aber es schien schwierig, die Arbeit mit, weil die Dokumente wurden etwas eingeschränkt und die Pakete, wo nicht sehr einfach zu installieren und zu verwenden.

ich in der Regel nur halten Sie sich an, die eine interpretierte Sprache wie Python, gebunden an C / C ++, die schmerzhafter ist, aber zumindest weiß ich, was ich bin in für.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top