89 votes

Implémentation de C # pour la machine virtuelle Java

Est-ce que quelqu'un tente d'implémenter C # pour la machine virtuelle Java? En tant que développeur Java, j’envie jalousement de C #, mais je ne suis pas disposé à renoncer à la portabilité et à la maturité de la machine virtuelle Java, sans parler de la diversité des outils utilisés.

Je sais qu'il existe des différences importantes entre la JVM et le CLR, mais y a-t-il quelque chose qui constitue un obstacle?

92voto

Jon Skeet Points 692016

Il y a des différences très importantes entre le CLR et la JVM.

Quelques exemples:

  • Java n'a pas de valeur définie par l'utilisateur types
  • Java génériques est complètement différent .NET génériques
  • De nombreux aspects de C# dépendent des éléments du cadre des délégués de etc. Vous auriez besoin de port la bibliothèque ainsi, même pour la langue aspects.
  • Java ne supporte pas les choses comme les propriétés et les événements au niveau de la JVM. Vous pourriez faux une partie de cela, mais ce ne serait pas la même.
  • Je ne crois pas que Java a d'équivalent à passer par des paramètres de référence, même au niveau de la JVM
  • Subtilités à faire avec les différents modèles de mémoire serait très probablement morsure, même si je ne suis pas sûr de combien est dans le C# spec.
  • Le code Unsafe en général n'est probablement pas possible en Java
  • L'interopérabilité avec le code natif est très différent entre la JNI et de P/Invoke. Ce n'est probablement pas un problème pour vous.
  • Vous auriez à faux la surcharge d'opérateur et les conversions définies par l'utilisateur

Vous pourriez probablement le port d'un lot de C# - mais vous pourriez être laissé avec une jolie expérience insatisfaisante, de l'OMI.

Va dans l'autre sens, êtes-vous conscient de IKVM? Il vous permet d'exécuter du code Java .NET.

41voto

Vns Points 331

Visitez le site http://code.google.com/p/stab-language.

Le code ci-dessous si un code de langue Stab pour JVM

 using java.lang;
using stab.query;
public class Test {
   public static void main(String[] args) {
   // Sorts the arguments starting with "-" by length and then using the default   
        // string comparison
        var query = from s in Query.asIterable(args)
                    where s.startsWith("-")
                    orderby s.length(), s
                    select s;
        foreach (var s in query) {
            System.out.println(s);
        }
    }
}
 

9voto

Daniel Earwicker Points 63298

Il pourrait être plus simple d'écrire un convertisseur de IL en bytecode. De cette façon, vous obtiendrez automatiquement une assistance pour n’importe quel langage .NET sur la machine virtuelle Java.

Cependant, c'est une idée tellement évidente que si cela n'a pas déjà été fait, c'est probablement extrêmement difficile, ou difficile à faire correctement / utilement.

7voto

alex Points 12733

Regarde Sauterelle . Il s’agit d’un SDK basé sur Visual Studio et d’un convertisseur .NET vers Java breveté qui vous permet d’exécuter des applications Web et serveur .NET sous Linux® et d’autres plates-formes compatibles Java.

2voto

ferhrosa Points 166

Une option pour le développement multiplate-forme en C # pourrait être mono: http://www.mono-project.com/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X