Pourquoi ne pas Soleil faire un C# Java byte code du compilateur?
, Nous Voulons lancer Notre Code C# sur la JVM
Mon entreprise a un grand C# code de base. Plus de la moitié de ce code, c'est notre moteur pour la création, lecture, modification, le calcul et l'écriture des classeurs Excel. Nous avons souvent des questions provenant des clients et des clients potentiels en leur demandant si nous allons construire une version Java de notre moteur de - beaucoup d'entre eux ne sont pas du tout intéressés par l'INTERFACE utilisateur. Nous avons même quelques clients qui ont pris la peine d'utiliser notre .NET de la bibliothèque à partir de leurs applications Java.
Donc, nous souhaitons construire une version Java de notre moteur de base, idéalement sans entretien d'un code source Java de base.
Eric Évier décrit ce problème très bien. Je suis dans une situation similaire, sauf pour le fait que la licence de notre logiciel comprend libres de droits de déploiement de, faire Eric est le choix de Mainsoft un nonstarter pour nous.
J'ai été Googler les goûts de "c# pour jvm" tous les quelques mois depuis plusieurs années maintenant avec pas de joie. Après avoir passé ~7 ans en développement logiciel semblable pour Java, je suis convaincu que l' .NET Api que nous utilisons dans notre moteur de base pourrait facilement être encapsulés et nous avons pu accomplir tout ce que nous avons besoin de l'aide de l'bibliothèques Java. Donc, si nous n'avions que C# -> JVM compilateur nous avons pu construire notre moteur de base de Java et on n'ait plus à détourner les développeurs Java qui souhaitent l'utiliser.
Je ne demande pas pour les raisons techniques pour lesquelles le Soleil ne fait pas un compilateur C#. Je reconnais que Java n'a pas de propriétés ou d'un entier non signé de 64 bits de long, etc... Pour le plaisir de l'argument, il suffit de supposer que tous ces problèmes techniques ont pu être traitées par l'extension de la JVM et /ou par d'autres moyens.
Et je ne demande pas à un débat sur le pourquoi d'une langue /pile peut-être mieux que les autres. La réalité de notre entreprise est que il ya beaucoup de clients potentiels à l'aide de chacun.
Pourquoi le Soleil ne un Compilateur C#? (OMI bien sûr)
Ce qui facilite l'exécution de code C# sur la plateforme Java signifie plus de développeurs et de logiciels pour la plate-forme. Est-il rien de plus important pour le succès d'une plate-forme? Jonathan Schwartz est un logiciel de guy. Je laisse à d'autres plus intelligents que moi de décider si oui ou non il a pris sur une tâche impossible en tant que Président et chef de la direction du Soleil, mais ayant rencontré Jonathan, peu de temps après, il rejoint le Soleil j'ai l'impression qu'il comprend le logiciel et le besoin d'une large base de développeurs.
Alors Pourquoi Ne pas Soleil faire un Compilateur C#?
- NIH syndrome?
- Le fantôme de Scott McNealy?
- De trop nombreux développeurs Java de l'aversion ou de la méfiance de tout ce qui est lié à Microsoft?
- Ils ont convenu de ne pas dans le cadre de la prise de le gros lot?
- ???
Il doit y avoir une bonne raison. Je ne peux pas pour la vie de me comprendre ce que c'est...
- ce n'est pas une question technique, il nous demande de lire dans les pensées de Soleil cadres - mes Kreskin programme dit qu'ils n'aiment pas, C#, ils aiment la Java, et que vous voulez les deux à rester distincts, sinon ils ne peuvent pas justifier leur existence
- Mon #1 et #2 des suggestions ci-dessus vont de pair avec votre perspicacité Étonnante. Avec le courant Pres du Soleil est un logiciel de guy, qui sait, peut-être que nous allons obtenir une Incroyable réponse de la haut?
- Si Sun "d'adopter et d'extension" de C# au lieu de prétendre qu'elle n'existe pas. J'ai été dans les entreprises de développement de logiciels pour les autres développeurs depuis avant Gosling remarqué son Chêne et il me semble qu'apprendre le C# serait une bonne chose - mais peut-être que je bois trop de Microsoft Koolaid?
- Il y avait un projet il y a un moment dans le Soleil pour exécuter le code VB sur la JVM. Ils ont perdu de l'intérêt, mais - probablement en raison du manque de développeurs. Le soleil ont bien assez à faire avec tous les langages Dynamiques, ils sont à l'appui: JRuby, JPython etc
- Vous pouvez simplement le port de Java et de la baisse de la minorité de la plateforme.
- Tom - j'ai fait la Java chose à partir de 1996 jusqu'en 2002. Ma raison officielle pour laisser Actionner? Microsoft a compris la nécessité pour les choses de base comme les types énumérés (depuis ajoutée à Java, mais il a fallu beaucoup trop de temps) et de l'excellente INTERFACE utilisateur Windows de soutien et d'Actionner n'avait aucun intérêt dans le bâtiment .NET des produits.
- Fortyrunner - Pas de doute que Ruby, Python et tels sont chaud ces jours-ci. J'ai été trop occupé à lancer une société pour jouer avec une nouvelle langue pendant un certain temps, donc je n'ai pas eu le temps de jouer avec la nouvelle Dynamique des langues...peut-être qu'il prend un obsédé avocat à l'intérieur du Soleil pour tout réussir.
- Il peut être un long shot, mais avez-vous regardé en tirant parti de la Stab langage de programmation? Essentiellement, il s'AGIT de C# pour la JVM. Me semble que vous pourriez à peine écrire la classe Java wrappers, essayez de compiler votre code de lame et de près de sortir avec elle? Bien sûr, je n'ai jamais tenté une telle chose pour que je puisse être mis en place.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord le Soleil a zéro incitation à mettre en œuvre un compilateur C# sur la JVM parce qu'ils ont quelque chose de très similaire appelé le langage de programmation Java.
Son n'est pas vraiment aussi simple que juste de la mise en œuvre d'un compilateur Java standard des bibliothèques de classe ne sont pas les mêmes que les .net Bibliothèques de classes de Base. Vous allez finir par avoir à modifier tous la .NET des appels API pour Java appels d'API.
Micrsoft a un produit appelé J#, qui était destinée à être pour que Java .NET de la conversion, mais à la fin, personne ne l'a utilisé que l'API a été limitée à pré Java 2 API de sorte qu'il était presque inutile. Il en serait de même si le Soleil mis en œuvre certaines parties de l' .NET BCL, que seul le cœur des morceaux sont standardisés et libre de droit. Des pièces comme ASP.NET et WPF, WCF, etc ne font pas partie des normes ECMA et donc Soleil aurait besoin de Microsoft autorisation de mise en œuvre de ceux de l'API.
Si suffisamment de clients veulent une version de java pour faire des affaires pour le port de votre application java puis le faire, vous juste ne jamais obtenir toute aide de la part du Soleil par l'intermédiaire d'un C# pour la JVM compilateur.
C'est une fausse déclaration. L'exécution de code C# sur la JVM ne pas créer des programmeurs Java, il crée C#, programmeurs qui peuvent s'exécuter sur une machine virtuelle java. Il ne fait qu'élargir la portée de C#, en supposant que la JVM se traduit également tout microsoft appels spécifiques (c'est à dire win32) en quelque chose qui est plate-forme neutre. Donc, si le Soleil se traduit par de IL de Bytecode Java, le seul groupe il aide, c'est: Microsoft. Et, compte tenu de Soleil de l'histoire avec Microsoft au cours de l'original en C#Java schisme/Visual J++ poursuites...
De Plus, vous avez à faire face à la technique infaisabilité, que vous le vouliez ou non. Il existe des différences fondamentales dans la façon dont le bytecode sont exécutées et qui sont de loin les questions les plus importantes que de savoir si ou non il y a un entier non signé de type de données long.
Si vous devez être en C# sur un non-Microsoft, plate-forme, Mono
Pourquoi ne pas Microsoft faire un C# Java byte code du compilateur? Pourquoi ne pas vous le faire? Il y a des specs de chaque côté...
"Donc, nous souhaitons construire une version Java de notre moteur de base, idéalement sans entretien d'un code source Java de base."
Fondamentalement, vous voulez compiler votre code C# non modifié, et l'exécuter dans une application Java-seulement de l'environnement.
IKVM n'est pas ce que vous voulez. IKVM est trois choses principales.
un. ikvm - CLI de la mise en œuvre d'une machine virtuelle Java (à noter que il utilise
Classpath(maintenant OpenJDK) pour la classe Java library).b. ikvmc - Compile le bytecode java à la CLI du bytecode.
c. ikvmstub - Génère java stub classes d'appel de la CLI de code.
Noter que l'ensemble de ces outils dépend de la CLI à l'exécution. Ce que vous voulez, c'est exactement le contraire de IKVM, ce qui est évidemment MVKI (le Plus Vénérable Kompiler Intermédiaire) :):
un. mvki - Java mise en œuvre d'une CLI de la machine virtuelle (sans doute cela Mono ou DotGNU pour la bibliothèque de classe).
b. mvkic - Compile CLI bytecode Java bytecode.
c. mvkistub - Génère de la CLI de stub classes d'appel Java
Noter qu'aucun de ces nécessiterait une implémentation de l' .NET Framework lors de l'exécution, de sorte qu'ils devraient être satisfaisante à votre Java-seuls les clients.
Malheureusement, pour autant que je sais MVKI n'existe pas, vous feriez donc mieux de faire un manuel de port (ce qui ne manquera pas d'être plus propre, mais plus de travail).
Edit: sur la Base des la description de Mainsoft, il semble être similaire à MVKI, même si je ne suis pas sûr de ce qu'ils font pour la bibliothèque de classe, et à la différence de IKVM ce n'est pas les logiciels libres.
http://jsc.sourceforge.net/ c# cross compilateur qui peut convertir .NET code pour Java (entre autres choses).
Exposer votre .NET API de services web ASMX et vous devriez être bon d'aller.
EDIT: Pour les plus lourds des scénarios d'utilisation, il serait intéressant de regarder dans Windows Communication Foundation (WCF). Ce qui a intégré, support configurable pour la sécurité, streaming, différents scénarios de transport (HTTP, TCP/IP, local canaux nommés). Vous n'êtes pas limité à du SAVON de codage des messages, mais ce serait sans doute le moyen le plus facile pour l'interopérabilité avec Java.
Je ne suis pas trop sûr au sujet de votre scénario exact, mais si vous travaillez avec des fichiers de grande taille et l' .NET code de code Java et sont en cours localement, vous pouvez enregistrer le fichier sur le disque dur de l'utilisateur à l'aide .NET, puis le récupérer à partir de votre application Java.
Il est facile de croire que les entreprises sont des organisations à but non lucratif qui a vos intérêts à cœur. Il est facile d'oublier que le seulement but pour une entreprise cotée en bourse est de faire de l'argent pour elle détenteurs d'actions. C'est une obligation juridique et directeurs/cadres ont été licenciés/poursuivi en justice si des détenteurs d'actions ne croient pas qu'ils n'ont pas réussi à le faire.
Sun Java libre, car il permet de vendre leur matériel, qui, comment on fait de l'argent à partir de Java. IBM fait Java libre, car il leur permet de faire plus d'argent sur leur consultation.
Si le Soleil ont à dépenser de l'argent sur un C# converter comment serait-il que de l'argent et faire un profit. Imaginez que vous avez à les convaincre du Soleil détenteurs d'actions. Si vous le pouvez, Soleil fera un C# converter.
Je me demande si le Mono projet pourrait avoir fait moins de travail pour eux-mêmes par le ciblage de la JVM au lieu de développer et de maintenir leur propre machine virtuelle à partir de zéro. L'effort de développement pourrait ont mis l'accent sur une C# cross-compilateur et le portage de salles blanches, les implémentations de la .Bibliothèques NET à la JVM. Un peu comme une version open-source de ce Mainsoft a fait. Vous pourrez alors activer inter-langue des appels entre Java et C# code dans la même JVM, et de déployer des Applets et des applications Java Web Start écrit en C#.
Je sais que cela peut ne pas être ce que vous cherchez, mais voici quelques solutions de rechange possibles qui (si ce n'est pour vous) pourrait être utile à d'autres.
C: Vous pourriez port, autant que possible, à C. Maintenant, vous pouvez faire un wrapper en C# et en Java (et toute autre langue qui peut communiquer avec C) qui donne l'impression de natifs de leur langue lors de la programmation. Le problème maintenant est que vous (ou eux, en fonction de votre licence) a construire la partie C et pour chaque plate-forme.
Fantom*: Un langage de programmation qui, conformément à leur page d'accueil,
est:
Haxe*: (prononcé hex) est une plate-forme de langage qui se compile en d'autres langues. Bientôt, C# et Java seront pris en charge. Il prend actuellement en charge:
Haxe De La Communauté. (2011, 11 Mars). Haxe Introduction. Extrait le 29 janvier 2011, à partir de http://old.haxe.org/doc/intro
Vous pouvez en apprendre plus sur les raisons de Haxe est utile ici.
*Je n'ai jamais utilisé cette langue et je ne sais pas comment cela fonctionnerait.
Avoir du plaisir.
Vous peut exécuter votre .NET code de code Java et dans le même interprète! Voir la IKVM .NET-basé sur la JVM, et la Boo et Java page wiki pour obtenir un exemple de cas d'utilisation (à l'aide de l' .NET-basé Boo langage pour écrire des applications à l'aide de bibliothèques Java).
Joe, je vous suggère de enquêter sur IKVM. Vous pourriez trouver quelque chose que les griffes de votre démangeaisons
Si je faisais quelque chose comme de la croix de la croix-plate-forme support de la langue, je voudrais créer une api commune " puisque les langues sont similaires dans la syntaxe, vous pourriez faire un traducteur assez facile. Alors au lieu d'appeler ou java .net api directement à partir de la base, vous appelez votre "api commune" qui permettrait de mettre en œuvre le java et .net api dont vous avez besoin. De cette façon, vous pouvez créer une croix langue sandbox si vous voulez. Depuis les principales différences entre java et c# sont des définitions d'objet, je voudrais obtenir de ceux qui, en reflétant la C# dll, puis reconstruire les constructions, alors il serait facile d'avoir un interprète et de mettre en œuvre la fonction des organes et de convertir des propriétés de getters poseurs de déjà connaître la structure des fichiers. Bien sûr, cela est de l'assumer .net 2.0, certaines des fonctionnalités dans la version 3.0 et 3.5 devenir très difficile "d'interpréter'
Il serait complexe, mais probablement pas aussi complexe que la reconstruction d'une base en java par la main, et le fait de devoir avoir 2 équipes de travail sur les separemment. Si cette idée des étincelles un peu d'inspiration, je pourrais en créer un. Je préférerais voir un simple stable mono installation pour mac.
Fondamentalement, je pense à un niveau de code interprète basés sur un ensemble commun de classes de l'api est quelque chose de tout à fait possible d'écrire avec une équipe dans une semaine ou deux.
Simple. Parce que le Soleil serait plutôt de ne pas être poursuivi en justice par Microsoft. Et tandis que nous, en tant que programmeurs pourraient vois pas de raison valable pour un costume, gardez à l'esprit que Microsoft est tout à fait une entreprise plus grande que le Soleil et a le pouvoir de patron autour de.
Soleil, heureusement, est dans la position d'être bien plus ouvert que Microsoft cependant. Si une telle demande existe, que ce soit open source ou un tiers pourrait faire de ce compilateur Java et Sun n'aurait pas à supporter la chaleur.
JACIL est apparemment un projet mort qui tente de faire l'inverse de IKVM. Peut-être certains motivés gens pourraient l'utiliser comme un point de départ pour une solution viable .Net à la JVM du compilateur.
Je suppose que la meilleure question est, pourquoi ne pas vous écrire un C# Java byte code du compilateur, si vous en voulez un pour exister. D'attente pour les professionnels de l'suzerains de faire quelque chose est une mauvaise idée.
Une suggestion pour la création d'une telle mise en œuvre: prendre Mono ou .GNU C# avant la fin. Ne vous embêtez pas à écrire votre propre.
J'ai fait un commentaire qui devrait vraiment avoir été une réponse:
Il n'est pas techniquement possible à ce stade de mettre en œuvre le C# spec sur la JVM. C# prend en charge les pointeurs, non signé types, définis par l'utilisateur des types de valeur, vrai génériques, le passage par référence, et des tas d'autres choses. Pour une très C#-comme la JVM de la langue, découvrez Stab.
Mainsoft faux il. Je suis sûr qu'il prend d'énormes effort de leur part.
Je pense que vous trouverez que la Mainsoft, Enterprise Edition outil vous permet d'exécuter la plupart des/peut-être tous vos .NET code Java JVM... Semble être plus axé sur l'ASP.NET mais permettra à la C#. Il a été disponible pendant un certain temps, dommage qu'ils ne publiez pas mieux!
Avertissement blurb suit....