Warum macht Sun keinen C # to Java-Bytecode-Compiler?
Wollen wir Laufen Unseren C# - Code an die JVM
Meine Firma hat eine große C# - code-Basis. Weit über die Hälfte dieser code ist unser Kern-engine zum erstellen, Lesen, ändern, rechnen und schreiben in Excel-Arbeitsmappen. Wir erhalten Häufig Fragen von Kunden und potenziellen Kunden zu Fragen, ob wir zum Aufbau einer Java-version unserer engine - viele von Ihnen sind überhaupt nicht interessiert an der UI. Wir haben sogar ein paar Kunden, die sich die Mühe gemacht, die Nutzung unseres .NET-Bibliothek von Ihrer Java-Anwendungen.
So, wir bauen möchte eine Java-version des Kern-engine, im Idealfall ohne die Verwendung einer separaten Java-source-code-Basis.
Eric Waschbecken beschrieben dieses problem sehr gut. Ich bin in einer ähnlichen position, außer für die Tatsache, dass unsere software-Lizenz beinhaltet gebührenfreie Bereitstellung, so dass Eric die Wahl von Mainsoft ein nonstarter für uns.
Habe ich schon Googeln, die gerne von "c# jvm" alle paar Monate für mehrere Jahre jetzt mit keine Freude. Ich habe ~7 Jahre Entwicklung ähnlicher software für Java, aber ich bin zuversichtlich, dass die .NET-APIs verwenden wir in unseren core-engine kann leicht gekapselt werden und wir könnten alles erreichen, brauchen wir die mithilfe der Java-Bibliotheken. Also, wenn wir nur eine C# -> JVM-compiler könnten wir bauen unsere core engine für Java, und wir würden nicht mehr abwenden Java Entwickler, die es nutzen möchten.
Ich bin nicht zu Fragen, für die technische Gründe, warum Sun nicht ein C# - compiler. Mir ist klar, dass Java keine Eigenschaften oder eine vorzeichenlose 64 bit lang, etc... um des Arguments Willen, einfach davon ausgehen, dass diese technischen Probleme gelöst werden könnten durch die Erweiterung der JVM und /oder anderen Mitteln.
Und ich bin nicht zu Fragen, für eine weitere Debatte, warum eine Sprache /stack könnte besser sein, als die anderen. Die Realität in unserem Geschäft ist, dass es viele potenzielle Kunden mit jedem.
Warum Sollte die Sonne tun ein C# - Compiler? (IMO natürlich)
Wodurch es leichter zu führen Sie C# - code für die Java-Plattform bedeutet, dass mehr und mehr software-Entwickler für die Plattform. Ist es etwas, das wichtiger für den Erfolg einer Plattform? Jonathan Schwartz ist ein software-Mann. Ich überlasse es anderen, schlauer als ich zu entscheiden, ob oder nicht er hat eine Unmögliche Aufgabe als Präsident und CEO von Sun, aber er traf sich mit Jonathan kurz danach trat er in die Sonne mein Eindruck ist, dass er versteht, die software und die Notwendigkeit für eine große Basis von Entwicklern.
Warum also nicht die Sonne tun ein C# - Compiler?
- NIH - Syndrom?
- Der Geist von Scott McNealy?
- Zu viele Java-Entwickler Abneigung oder Misstrauen, alles, was mit Microsoft?
- Sie vereinbart, nicht als Teil der Einnahme das große Geld?
- ???
Muss es einen guten Grund. Ich kann einfach nicht für das Leben von mir herauszufinden, was es ist...
InformationsquelleAutor der Frage Joe Erickson | 2009-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens die Sonne hat null Anreiz zur Implementierung einer C# - compiler für die JVM, da haben Sie etwas sehr ähnliches namens der Java-Programmiersprache.
Ihr auch nicht wirklich so einfach, wie einfach die Implementierung eines compiler als Java-standard-Klassenbibliotheken sind nicht die gleichen wie die .net Base Class Libraries. Sie würde am Ende mit zu wechseln .NET-API-Aufrufe der Java-API-Aufrufe.
Micrsoft hatte ein Produkt namens J#, die gemeint war für Java .NETTO-Umwandlung aber am Ende niemand es verwendet als die API beschränkt sich auf die pre Java 2 API so war es meist nutzlos. Es wäre das gleiche, wenn die Sonne implementierten Teile des .NET BCL, als nur die core-Teile sind standardisiert und lizenzfrei. Teile wie ASP.NET und WPF, WCF, etc. sind nicht Teil des ECMA-standards und-also so müsste Microsoft die Erlaubnis, diese zu implementieren API.
Wenn genug Kunden wünschen sich eine java-version zu machen, geschäftlichen Sinne-port Ihrer Anwendung auf java-dann tun Sie es, Sie einfach nicht immer zu bekommen jede Hilfe, die von der Sonne über eine C# JVM-compiler.
InformationsquelleAutor der Antwort Tim
Dies ist eine falsche Aussage. Ausführen von C# - code an die JVM nicht erstellen Java-Programmierer, schafft es C# - Programmierern, die ausgeführt werden können, die auf einer JVM. Es erweitert nur die Reichweite von C#, vorausgesetzt, die JVM übersetzt auch jede microsoft-spezifische Aufrufe (also win32) in etwas, das ist Plattform-neutral. Also, wenn Sun-IL übersetzt, um Java-Bytecode, die einzige Gruppe, die es hilft, ist: Microsoft. Und angesichts der Sonne die Geschichte mit Microsoft während der ursprüngliche C#-Java-Spaltung/Visual J++ - Klagen...
Plus, Sie haben zu Gesicht die technische Undurchführbarkeit, ob Sie wollen oder nicht. Es gibt fundamentale Unterschiede in der Art und Weise der Bytecode ausgeführt werden, sind weit wichtigere Probleme als die Frage, ob oder nicht es gibt einen unsigned long-Datentyp.
Wenn Sie C# auf einem nicht-Microsoft-Plattform verwenden Mono
InformationsquelleAutor der Antwort Randolpho
Warum nicht Microsoft tun C# zu Java-byte-code-compiler? Warum nicht Sie es tun? Es sind offene Spezifikationen, die auf jeder Seite...
InformationsquelleAutor der Antwort Chase Seibert
"So, wir bauen möchte eine Java-version des Kern-engine, im Idealfall ohne die Verwendung einer separaten Java-source-code-Basis."
Im Grunde wollen Sie die Kompilierung der C# - code unverändert, und es laufen in einer Java-Umgebung.
IKVM ist nichtwas Sie wollen. IKVM ist drei wichtigsten Dinge, die.
ein. ikvm - CLI-Implementierung einer Java virtual machine (beachten Sie, dass dies nutzt die
- Classpath(jetzt OpenJDK) für die Java-Klassenbibliothek).b. ikvmc - Kompiliert java bytecode zu CLI-bytecode.
c. ikvmstub - Generierung der java-stub-Klassen, die den Aufruf CLI-code.
Beachten Sie, dass all diese Werkzeuge, die davon abhängen, CLI zur Laufzeit. Was Sie wollen, ist genau das Gegenteil von dem IKVM, was natürlich MVKI (die Meisten Ehrwürdigen Kompiler Vermittler) :):
ein. mvki - Java-Implementierung des CLI-virtual-machine (vermutlich wäre dies verwenden Mono oder DotGNU für die Bibliothek-Klasse).
b. mvkic - Kompiliert CLI-bytecode Java-bytecode.
c. mvkistub - Erzeugt CLI-stub-Klassen, die zum Aufruf von Java -
Beachten Sie, dass keiner von Ihnen würde erfordern eine vorhandene Implementierung der .NET Framework zur Laufzeit, so dass Sie sollte befriedigend sein, um Ihre Java-only-Kunden.
Leider, soweit ich weiß, MVKI nicht vorhanden, so sind Sie am besten aus, machst einen manuellen port (das würde zwangsläufig sauberer, wenn auch mehr Arbeit).
Edit: Basierend auf die Beschreibung von Mainsoft, es scheint ähnlich zu sein, MVKI, aber ich bin mir nicht sicher, was Sie tun, für die Bibliothek-Klasse, und im Gegensatz zu den IKVM-es ist nicht FOSS.
InformationsquelleAutor der Antwort Matthew Flaschen
http://jsc.sourceforge.net/ ist ein c# - cross-compiler, die konvertieren kann .NET-code zu Java (unter anderem).
InformationsquelleAutor der Antwort mcintyre321
Aussetzen .NET-API, wie ASMX-Dienste, und Sie sollten gut zu gehen.
EDIT: Für mehr heavy-usage-Szenarien, wäre es lohnt ein Blick in die Windows Communication Foundation (WCF). Diese verfügt über integrierte, konfigurierbare Unterstützung für security, streaming, verschiedene verkehrsszenarien (HTTP, TCP/IP, named pipes). Sie sind nicht beschränkt auf SOAP-Nachricht Kodieren, aber das wäre wahrscheinlich der einfachste Weg, um interop mit Java.
Bin ich mir auch nicht sicher über Ihre genaue Szenario, aber wenn Sie sind den Umgang mit großen Dateien und die .NET-code und Java-code sowohl lokal läuft, können Sie einfach speichern Sie die Datei auf der Festplatte des Benutzers zu verwenden .NET und dann Holen Sie aus Ihrer Java-Anwendung.
InformationsquelleAutor der Antwort davogones
Ist es leicht zu glauben, dass die Unternehmen non-profit-Organisationen, die Ihre Interessen am Herzen. Es ist leicht zu vergessen, dass die nur Zweck, für ein börsennotiertes Unternehmen ist, um Geld für it-Anteil-Inhaber. Dies ist eine gesetzliche Verpflichtung und Geschäftsführer/Führungskräfte wurden entlassen/verklagt werden, wenn Aktionäre nicht glauben, dass Sie versagt haben, dies zu tun.
Sun macht Java kostenlos, weil es hilft, die verkaufen Ihre hardware, die, wie es macht Geld von Java. IBM macht Java kostenlos, weil es Ihnen hilft, machen Sie mehr Geld für Ihre Beratung.
Wenn Sonne waren, um Geld für einen C# - Konverter wie würden Sie es machen, Geld zurück und einen Gewinn machen. Stellen Sie sich vor Sie haben zu überzeugen, Sun-Aktionäre. Wenn Sie können, die Sonne macht ein C# - Konverter.
InformationsquelleAutor der Antwort Peter Lawrey
Frage ich mich, ob das Mono-Projekt gemacht haben könnte, weniger für sich selbst arbeiten, indem Sie auf die JVM anstelle der Entwicklung und Erhaltung Ihrer eigenen virtuellen Maschine von Grund auf neu. Entwicklungsaufwand konnte, haben sich auf eine C# - cross-compiler und die Portierung sauber-Zimmer-Implementierungen .NET-Bibliotheken, um die JVM. Sowas wie ein open-source-version von dem, was Mainsoft getan hat. Sie könnte dann ermöglichen, inter-language-Aufrufe zwischen Java-und C# - code in der gleichen JVM und die Bereitstellung von Applets und Java-Web-Start-Anwendungen in C# geschrieben.
InformationsquelleAutor der Antwort Bruce
Ich weiß, das kann nicht sein, was Ihr sucht, aber hier sind einige mögliche alternativen, die (wenn nicht Sie) könnte nützlich sein für andere.
C: Sie können den port so weit wie möglich zu C. Nun können Sie einen wrapper in C# und Java (und jede andere Sprache, kommunizieren kann, mit C), dass macht Sie fühlen sich einheimische Ihre Sprache während der Programmierung. Das problem ist jetzt, dass du (oder Sie, je nach Lizenz) zu bauen, der C-Teil für jede Plattform.
Fantom*: Eine Programmiersprache, die laut Ihrer Homepage,
ist:
Haxe*: (sprich hex) ist cross-Plattform-Sprache, die compiliert zu anderen Sprachen. Bald C# und Java werden unterstützt. Es unterstützt derzeit:
Haxe Gemeinschaft. (2011, März 11). Haxe Einführung. Abgerufen Januar 29, 2011, von http://old.haxe.org/doc/intro
Erfahren Sie mehr darüber, warum Haxe ist nützlich,hier.
*Ich habe noch nie verwendet diese Sprache, und ich weiß nicht, wie gut das funktionieren würde.
InformationsquelleAutor der Antwort apokaliptis
Spaß haben.
InformationsquelleAutor der Antwort Joshua
Du kann führen Sie Ihre .NET-code und Java-code in der gleichen Dolmetscher! Finden Sie die IKVM .NET-basierte JVM, und die Boo und Java wiki-Seite für ein Anwendungsbeispiel (unter Verwendung der .NET-basierte Boo Sprache zum schreiben von Anwendungen mithilfe von Java-Bibliotheken).
InformationsquelleAutor der Antwort Charles Duffy
Joe, ich schlage vor, Sie untersuchen IKVM. Vielleicht finden Sie dort etwas, dass Kratzer Ihr Jucken
InformationsquelleAutor der Antwort Rad
Wenn ich dabei war so etwas wie cross-Plattform-cross-language-support, ich würde eine "common api", denn die Sprachen sind ähnlich in der syntax könnte man ein übersetzer einfach genug. Dann anstelle des Aufrufs von java-oder .net-apis direkt aus dem Kern, Sie nennen würde, Ihre "common api", die den re-implementieren Sie die java-und .net-apis, die Sie brauchen würde. Auf diese Weise könnte man ein cross-Sprache-sandbox, wenn man so will. Da die Hauptunterschiede in java und c# sind Objekt-Definitionen, die ich bekommen würde, diese durch reflektion der C# - dlls, und rekonstruieren Sie dann die Konstrukte, dann wäre es leicht, einen Dolmetscher führen Sie durch und implementieren Sie die Funktion Körper und konvertieren von Eigenschaften Getter-setter bereits die Kenntnis der Struktur der Dateien. Dies ist natürlich vorausgesetzt .net 2.0, einige der features in 3.0 und 3.5 sehr schwierig geworden, zu 'interpretieren'
Wäre es Komplex, aber vermutlich nicht so Komplex wie die Rekonstruktion eines Kerns in java von hand, und haben 2 teams, die an Ihnen arbeiten separat. Wenn diese Idee, die den Funken inspiration, ich könnte eines erstellen. Ich würde es wirklich lieber sehen, ein einfacher, stabiler mono-installation für mac.
Grundsätzlich finde ich eine code-interpreter basierend auf einem common-api-Klassen ist etwas, was sehr möglich ist, schreiben Sie mit einem team in einer Woche oder zwei.
InformationsquelleAutor der Antwort
Einfach. Weil die Sonne lieber nicht verklagt werden von Microsoft. Und während wir als Programmierer vielleicht sehen keinen tragfähigen Grund für eine Klage, im Hinterkopf behalten, dass Microsoft durchaus ein größeres Unternehmen als Sonne und die Kraft hat, zum Chef Sie herum.
Sonne zum Glück ist in der Lage viel mehr öffnen als Microsoft jedoch. Wenn ein solcher Bedarf vorhanden ist, entweder open-source oder einer Dritten Partei machen konnte, die diese Java-compiler und die Sonne wäre nicht die Hitze.
InformationsquelleAutor der Antwort Overflown
JACIL ist ein scheinbar Totes Projekt, das versucht zu tun, die das Gegenteil von IKVM. Vielleicht haben einige motivierte Leute könnten verwenden Sie es als Ausgangspunkt für einen lebensfähigen .Net, JVM-compiler.
InformationsquelleAutor der Antwort Todd Stout
Ich denke, die bessere Frage ist, warum nicht Sie schreiben Sie eine C# zu Java-byte-code-compiler, wenn Sie möchten, eine zu existieren. Warten für corporate overlords, etwas zu tun, ist eine schlechte Idee.
Einen Vorschlag für die Schaffung einer solchen Implementierung: nehmen Sie Mono oder .GNU-C# - front-end. Nicht die Mühe, schreiben Ihre eigenen.
InformationsquelleAutor der Antwort
Ich machte eine Bemerkung, dass sollte eigentlich schon eine Antwort:
Es ist einfach technisch nicht möglich, an dieser Stelle zu implementieren, die C# - Spezifikation der JVM. C# unterstützt Pointer, vorzeichenlose Datentypen, benutzerdefinierte Datentypen, true generics, durch Verweis übergeben wird, und viele andere Dinge. Für eine sehr C#-wie JVM-Sprache, check-out Stab.
Mainsoft fakes. Ich bin sicher, es braucht eine enorme Anstrengung auf Ihrem Teil.
InformationsquelleAutor der Antwort Justin
Ich denke, Sie werden feststellen, dass die Mainsoft, Enterprise Edition tool ermöglicht Ihnen das ausführen der meisten/vielleicht allen Ihren .NET-code unter Java JVM... Scheint sich eher auf ASP.NET aber C#. Es hat schon vor einiger Zeit, schade, dass Sie nicht veröffentlichen, ist es besser!
Warnung Klappentext folgt....
InformationsquelleAutor der Antwort AnthonyLambert