# Mischsprache aus Java & C#



## Gast2 (23. Mrz 2011)

Moin,

ich suche eine Möglichkeit Java und C# gleichzeitig zu entwickeln ... im Prinzip geht es nur darum das ich intern ein kleines Framework habe - welches den Zugriff auf die "übliche" Hardware beschleunigt ... nun setzt ich je nach Bedarf C# oder Java ein ... die logische Konsequenz daraus sind unterschiedliche DLL bzw JAR Dateien ... was in dem einen gefixt ist, ist in dem anderem noch kaputt ... neue Hardware muss natürlich doppelt implementiert werden

kann mir jemand ein Lösung empfehlen?

hand, mogel


----------



## Tomate_Salat (23. Mrz 2011)

Das hat mich auch bereits schon interessiert. Ich versuche mit JNA C#-libs anzusprechen, bisher hatte ich aber noch nicht die Zeit, etwas lauffähiges zu entwickeln, aber ich denke dass sollte in die Richtung gehen, die du willst.


----------



## Noctarius (23. Mrz 2011)

Alternativ geht es andersherum, Java in .NET -> IKVM.NET Home Page


----------



## Tomate_Salat (23. Mrz 2011)

Ist wahrscheinlich einfacher als C# in Java.
C#-erstellte-DLLs sind der Horror. Ich kriegs einfach nicht hin, diese in Java mittels JNA zu verwenden :-/.


----------



## Gast2 (23. Mrz 2011)

Noctarius hat gesagt.:


> Alternativ geht es andersherum, Java in .NET -> IKVM.NET Home Page


nicht ganz was ich suche ... im Grunde such ich einen "Übersetzer" von einer "wilden" Hochsprache ... der mit daraus Java-Klassen bzw. C#-Klassen erstellt ... diese kann ich ja dann durch die entsprechenden Compiler jagen ... in korregiere dann nur in der "wilden" Hochsprache - übersetze es nach Java & C# - habe in beiden Sprachen den Fehler raus

aber das ist schon genial:

[duke]If you have a Java library that you would like to use in a .NET application,
run 
	
	
	
	





```
ikvmc -target:library mylib.jar
```
 to create mylib.dll. [/duke]
wenn das 100% funktioniert, kann ich in Zukunft ja auch in JAR Files nach Problemlösungen suchen :toll:



Tomate_Salat hat gesagt.:


> Ist wahrscheinlich einfacher als C# in Java.
> C#-erstellte-DLLs sind der Horror. Ich kriegs einfach nicht hin, diese in Java mittels JNA zu verwenden :-/.


weil JNA (auch wie JNI) zum Zugriff auf native DLL gedacht ist ... C# DLL sind aber Assemblies ... das hat mit den nativen DLL erstmal nichts gemeinsam ... eine Assembly kannst Du in nativen Programmen auch erst einbinden, wenn Du sie in COM verfügbar gemacht hast ... dann wirst Du evt. auch erst mit Java zugreifen können ... wenn nicht, dann Java -> native DLL (Wrapper) -> Assembly (COM verfügbar) ... wie man eine Assembly COM verfübar macht weis ich nicht ... ich mache meisten rein .NET - zum Zugriff auf Win-API nutze ich dann C++/CLI


----------



## Noctarius (23. Mrz 2011)

Dann versuche doch mal die "wilde Hochsprache" als DSL zu definieren.


----------



## Gast2 (23. Mrz 2011)

versuchst Du mir gerade zu erklären ich muss mir selber einen Kopf um eine solche Sprache machen :rtfm:


----------



## Noctarius (23. Mrz 2011)

So hätte ich es nciht ausgedrückt, aber ohne die "wilde Hochsprache" zu kennen, kann vermutlich kaum einer einen tollen Tipp geben, also Ja!


----------



## Gast2 (23. Mrz 2011)

da ich die "wilde" Hochsprache genau suche, kann ich sie leider nicht nennen :noe: ... muss ich mir mal in einer ruhigen Minute alles wichtige von beiden Sprachen aufschreiben und anfangen


----------



## Noctarius (23. Mrz 2011)

Achsooooooo die Frage ist also: Gibt es so eine Sprache?

Ich hatte es so verstanden, dass ihr da etwas habt und du es umwandeln sollst.


----------



## Gast2 (23. Mrz 2011)

```
SELECT * FROM sprachen WHERE language LIKE "%C#%" AND language LIKE "%JAVA%"
```
besser ?


----------



## Noctarius (23. Mrz 2011)

Was du suchst ist der Javac(#) *duck*


----------



## Tomate_Salat (23. Mrz 2011)

zu gut :lol:, aber Mogel hats herausgefordert xD.
----
Dachte C# erstellt nur COM, habe ich mich wohl geirrt. Werde mich melden, wenn ichs zum laufen bekomme (oder ist das überhaupt nicht relevant für dich? Kapier den Thread gerade nicht wirklich)


----------



## ice-breaker (23. Mrz 2011)

Hab ich irgendetwas missverstanden, dass C++ nicht als "wilde Hochsprache" (hier wortwörtlich ) für C# und Java nutzbar ist?
Mit JNI könnte man es in Java nutzen und C# kann doch auch irgendwie in einem "Unmanaged Code"-Modus operieren.


----------



## Tomate_Salat (23. Mrz 2011)

Wieso JNI? JNA ist wesentlich einfacher. Ich habe etwas mit Unmanaged Code gefunden, dass reduzierte sich aber auf Felder. Ich suche noch nach dem Irgendwie mit Methoden operieren.


----------



## anonym (25. Mrz 2011)

Scala kann, soweit ich weiß, nach Java- Bytecode ODER nach Bytecode für die .Net- VM kompiliert werden. Ausprobiert hab ich das allerdings noch nicht. Als Sprache ist Scala allerdings ziemlich cool. Scala zu lernen lohnt sich also auf jeden Fall. 

Ansonsten sind .NET und Java sich konzeptionell so ähnlich, dass ein Code- Translator/ Generator, der umwandelt, schaffbar sein sollte. Das größte Problem ist in meinen Augen, dass du Klassen aus der Standard- API einer der beiden Sprachen nur nutzen kannst, wenn sie in der anderen Sprache exakt so existieren. Für mich klingt das so, als müsstest du die gesamte Standard- API neu schreiben. 

Ach so: Die Grundidee, eine Programmiersprache zu schaffen, die sich in andere übersetzen lässt, finde ich ziemlich cool. Am geilsten wäre, wenn das modular wäre, wenn du also zum Beispiel D oder C++ einfügen könntest, indem du ein Modul für den WH (= Wilde Hochsprache)- Compiler schreibst, dass D oder C++ Code erzeugst. Wenn du das wirklich vor hast, sieh dir mal das Interlingua- Modell der maschinellen Übersetzung an.


----------



## Gast2 (25. Mrz 2011)

ice-breaker hat gesagt.:


> Mit JNI könnte man es in Java nutzen und C# kann doch auch irgendwie in einem "Unmanaged Code"-Modus operieren.


das nennt sich P/Invoke (?) - unterm Strich so ähnlich wie JNI/JNA ... die einzige einfache Art & Weise nativen Krempel unter .NET zu verwenden ist C++/CLI ... und dann auch wirklich nur um die Aufrufe und Strukturen umzuleiten - also Wrapper ... bei C++/CLI musst Du eher wissen was Du machst als bei C++, da hier zwei Welten aufeinander prallen die unterschiedlicher nicht sein können



anonym hat gesagt.:


> Ansonsten sind .NET und Java sich konzeptionell so ähnlich, dass ein Code- Translator/ Generator, der umwandelt, schaffbar sein sollte.


in der Richtung kann ich ja auch noch suchen



> Das größte Problem ist in meinen Augen, dass du Klassen aus der Standard- API einer der beiden Sprachen nur nutzen kannst, wenn sie in der anderen Sprache exakt so existieren. Für mich klingt das so, als müsstest du die gesamte Standard- API neu schreiben.


im Prinzip wollte ich GUI ignorieren ... es geht eher um die internen Dinge ... Listen & Maps etc. haben beide Sprachen ... Arrays auch ... den Socket kannst Du soweit abstrahieren das er Sendet bzw. Empfängt ... I/O ist auch nicht das Problem ... damit habe ich eigentlich schon alles was wichtig ist 



> Ach so: Die Grundidee, eine Programmiersprache zu schaffen, die sich in andere übersetzen lässt, finde ich ziemlich cool. Am geilsten wäre, wenn das modular wäre, wenn du also zum Beispiel D oder C++ einfügen könntest, indem du ein Modul für den WH (= Wilde Hochsprache)- Compiler schreibst, dass D oder C++ Code erzeugst. Wenn du das wirklich vor hast, sieh dir mal das Interlingua- Modell der maschinellen Übersetzung an.


mein Prof. (bzw. einer von den tausenden) hat mal erzählt das Compilerbau die hohe Kust der Programmierung ist ... sein Fach (Formale Sprachen & Automatentheorie) habe ich im 3. Versuch bestanden - mit 4  ... also ganz so weit wollte ich eigentlich nicht gehen


----------



## hartzie (25. Mrz 2011)

Wenn du Code generieren willst, dann hilft die so eine Veranstaltung wie Compilerbau etc nicht viel. Das geht eher in die Richtung von model driven development. Davon kannst du dir bestimmte Konzepte zu nutze machen. Es sind ein in diesem Bereich ein paar Schritte die du für deine Zwecke verwenden kannst.
Und zwar wird ein Model in xml-Format geparst und in ein model abstract syntax tree geparst, welches wiederum in ein code-ähnlichen abstract syntax tree übersetzt wird. Dieser kann dann von verschiedenen code-Visitoren in richtigen code übersetzt werden.
In deinem Fall sind die Zielsprachen recht ähnlich, daher könnte man den code-ast recht nah an C# und Java richten.
Wenn du willst kann ich dir ein solchen code-Generator mal schicken. Der ist zwar dafür da aus statemachines C-code zu erzeugen, aber das Prinzip ist leicht verständlich. Wir können auch gemeinsam mal so einen Generator schreiben für dein Anwendungsfall.


----------



## Gast2 (25. Mrz 2011)

hartzie hat gesagt.:


> Wenn du willst kann ich dir ein solchen code-Generator mal schicken. Der ist zwar dafür da aus statemachines C-code zu erzeugen, aber das Prinzip ist leicht verständlich.


das Angebot würde ich gerne annehmen ... dann habe ich da mal rüber schauen und mir weitere Ideen "holen"



> Wir können auch gemeinsam mal so einen Generator schreiben für dein Anwendungsfall.


muss ich leider ablehnen ... nicht weil ich nicht will - sondern weil ich keine Zeit dafür habe ... ein Projekt frisst schon meine gesamte Freizeit (restlichen Projekte habe ich gegen 2 Terroristen eingetauscht) ... daher will ich das eher nebenbei machen, zumal ich zu 90% C# nutze - Rest ist Java & Co.

unterm Strich war es nur der Versuch die Entwicklung des eigenen Frameworks in Java und C# zu vereinheitlichen

hand, mogel


----------



## ice-breaker (25. Mrz 2011)

anonym hat gesagt.:


> Ach so: Die Grundidee, eine Programmiersprache zu schaffen, die sich in andere übersetzen lässt, finde ich ziemlich cool. Am geilsten wäre, wenn das modular wäre, wenn du also zum Beispiel D oder C++ einfügen könntest, indem du ein Modul für den WH (= Wilde Hochsprache)- Compiler schreibst, dass D oder C++ Code erzeugst. Wenn du das wirklich vor hast, sieh dir mal das Interlingua- Modell der maschinellen Übersetzung an.



Na dann würde ich mir mal Dinge wie XMLVM oder LLVM ansehen


----------



## Gast2 (25. Mrz 2011)

Woher bekommst du den Infos zu den gemeinsan genutzen Ressourcen? Gibt doch Frameworks und Templatesprachen wo du deine eigenen Ressourcen generieren kannst. Dann kannst du doch java und c files generieren lassen.


----------



## Wildcard (25. Mrz 2011)

Mit Grasshopper kann man wohl .NET Anwendungen auf einer JVM laufen lassen.
Grasshopper – The Visual Studio Plugin for .NET Java applications


> For most .NET developers, there is simply no substitute for the Visual Studio® IDE, the .NET Framework, and either C# or Visual Basic. With Grasshopper, you can use your favorite development environment from Microsoft® to deploy applications on Java-enabled platforms such as Linux®.


:autsch:


----------



## Noctarius (26. Mrz 2011)

Ja Grasshopper scheint ein Java-Crosscompiler zu sein. Netter Ansatz. Ich frage mich nur gerade, haben die das .NET Classlib nachgebaut oder tauschen die echt die Klassen und Methoden aus? Oo


----------



## schlingel (28. Mrz 2011)

Vielleicht interessanter für dich als da alles neu zu bauen:

Innerhalb des Mono-Projekts gibt es Code der dieses Zusammenspiel umsetzt. Dafür werden die VMs kurzgeschlossen und über Bridge-Objekte Daten ausgetauscht. (Wird z.B. in MonoDroid so gemacht.)

@TomatenSalat
COM ist der Großvater von .Net mit DCOM/COM++ dazwischen. Und managed Code kann zwar unmanaged operieren bleibt aber dennoch managed code. Das einzige was sich anbietet ist mit dem ILASM PE-Files aus den CLI-Files zu erzeugen.

Wie leicht sich das mit dem JNI verwenden lässt steht jedoch auf einem anderen Blatt.


----------

