Ausführen/Interpretieren von C auf der JVM?

Lesezeit: 3 Minuten

Benutzer-Avatar
amitkaz

Gibt es eine Möglichkeit, einfachen C-Code auf der JVM auszuführen?
Keine Verbindung über JNI, ausgeführt, wie Sie Ruby-Code über JRuby oder Javascript über Rhino ausführen können.

Wenn es keine aktuelle Lösung gibt, was würden Sie mir empfehlen?
Natürlich möchte ich so viele Teillösungen wie möglich verwenden, um dies zu erreichen.

ANTLR scheint ein guter Ausgangspunkt zu sein, da es eine vollständige “ANSI C” -Grammatikimplementierung hat …
sollte ich mithilfe von ANTLR-generiertem Code eine „Spielzeug“-VM über die JVM erstellen?

  • Das ist interessant. Ich versuche, einige zu machen tragbar C-Code?

    – Carlos Rendon

    7. Januar 2009 um 20:41 Uhr

  • Der Versuch, verschiedene Codes (aus verschiedenen Sprachen) über eine gemeinsame Grundlage (die JVM) zu interagieren

    – amitkas

    7. Januar 2009 um 21:05 Uhr

  • Es ist lange her, dass ich mir die JVM-Spezifikationen angesehen habe, aber IIRC hat versucht, zu verhindern, dass Datentypkonvertierungen zu schnell und locker werden. Wenn dies immer noch der Fall ist, gibt es C-Programme, die Sie einfach nicht auf der JVM ausführen können.

    – David Thornley

    7. Januar 2009 um 22:10 Uhr

  • Nicht wirklich. Der Compiler könnte unsichtbare Datenkonvertierungen für Sie einfügen.

    – Zan Luchs

    7. Januar 2009 um 22:57 Uhr

Benutzer-Avatar
joel.neely

Aktualisiert 2012-01-26: Laut diese Seite auf der Website des Unternehmens Das Produkt wurde ausverkauft und ist nicht mehr verfügbar.

Ja.

Hier ist ein kommerzieller C-Compiler, der JVM-Bytecode erzeugt.

  • Link ist zum Zeitpunkt der Überprüfung defekt.

    – Audrius Meškauskas

    25. Januar 2013 um 7:31 Uhr


  • Ja; laut der Seite unter axiomsol.com/ampc-acquired-by-private-company Das Produkt wurde von einem Privatunternehmen gekauft und ist nicht mehr auf dem Markt.

    – joel.neely

    26. Januar 2013 um 12:50 Uhr

  • Neuer Link ist auch kaputt

    – Neoexperte

    5. Dezember 2019 um 15:50 Uhr

Benutzer-Avatar
rasjidw

Es gibt zwei weitere Möglichkeiten, beide Open Source:

JPC emuliert einen vollständigen x86-PC innerhalb der JVM und kann sowohl DOS als auch Linux ausführen.

Verschachtelte VM bietet eine binäre Übersetzung für Java-Bytecode. Dies geschieht, indem GCC in eine MIPS-Binärdatei kompiliert wird, die dann in eine Java-Klassendatei übersetzt wird. Daher kann jede Anwendung, die in C, C++, Fortran oder einer anderen von GCC unterstützten Sprache geschrieben wurde, in 100 % reinem Java ohne Quelländerungen ausgeführt werden.

  • Ab 4/2013 sind JPC und NestedVM gültige Lösungen auf Kosten der Geschwindigkeit (wie sie innerhalb der JavaVM emuliert werden). Die kommerzielle Lösung axiomsol.com wurde ohne weitere Informationen auf ihrer Website verkauft.

    – Michaelt

    6. April 2013 um 23:08 Uhr


  • über JPC, es ist nett, aber wie könnte man mit dem x86-Code interagieren?

    – KIC

    13. Juni 2016 um 12:45 Uhr

Es scheint, dass LLJVM kann auch Ihre Anforderung erfüllen.

LLJVM: Der Quellcode wird zunächst von einem Frontend wie llvm-gcc oder clang in die LLVM-Zwischendarstellung (IR) kompiliert. LLVM IR wird dann in Jasmin-Assemblercode übersetzt, mit anderen Java-Klassen verknüpft und dann in JVM-Bytecode assembliert.

Benutzer-Avatar
KIC

Ab 2016 gibt es eine junge, aber vielversprechende Option namens gcc-Brücke. Seine Absicht ist es, die JVM-Implementierung von R zu nutzen. Das Ziel ist die Verwendung von R-Bibliotheken, die in C oder Fortran geschrieben sind. gcc-bridge kann jedoch unabhängig als reguläres Maven-Plugin verwendet werden. Siehe auch die gcc-Bridge-Beispiel.

1370890cookie-checkAusführen/Interpretieren von C auf der JVM?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy