JVMにC#を実装しようとしている人はいますか?Java開発者として、私はC#を羨望の念を抱いて見つめてきましたが、JVMの移植性と成熟度を放棄するつもりはありません。JVMのためのさまざまなツールは言うまでもありません。
JVMとCLRの間にいくつかの重要な違いがあることは知っていますが、ショートッパーであるものはありますか?
JVMにC#を実装しようとしている人はいますか?Java開発者として、私はC#を羨望の念を抱いて見つめてきましたが、JVMの移植性と成熟度を放棄するつもりはありません。JVMのためのさまざまなツールは言うまでもありません。
JVMとCLRの間にいくつかの重要な違いがあることは知っていますが、ショートッパーであるものはありますか?
回答:
CLRとJVMの間には非常に大きな違いがあります。
いくつかの例:
おそらく多くのC#を移植できますが、IMOはかなり満足のいくエクスペリエンスが得られません。
逆に、あなたはIKVMを知っていますか?.NETでJavaコードを実行できます。
http://code.google.com/p/stab-languageにアクセスします
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);
}
}
}
GrasshopperはCLRバイトコードを取得して、JVM用にトランスパイルできます。主にWebアプリを対象としており、WindowsフォームクラスのJVM実装などは提供していません。ただし、多少日付が古いようです。WebはASP.NET 2.0、Visual Studio 2008などについて話します。@alexによって最初に言及されました
XMLVMは、CLRまたはJVMバイトコードを入力として受け取り、出力として生成できます。さらに、JavascriptまたはObjective-Cを出力できます。まだリリースはなく、Subversionのみです。「実稼働環境では使用されない実験的開発バージョン。」
IKVMはOPが望む方向とは逆の方向に進みます。これは、CLRで実行されるJVM実装、JVMからCLRへのバイトコードトランスパイラー、およびJava用のCLRライブラリメソッドスタブジェネレーターを提供します。http://www.ikvm.net/uses.html @Jon Skeetによる言及
CLRとJVMを一緒に実行して、通信を可能な限りスムーズにしないのはなぜですか?これはOPが望んでいることではありませんが、他のいくつかの回答はさまざまな方法ですでにかなり話題から外れているので、それをカバーしましょう。
RabbitMQには無料のオプションがあり、C#、JavaなどのAPIライブラリを備えたErlangで記述されたRPCサーバーです。
jnBridgeは、一部の見込みユーザーにとってライセンスが高すぎる可能性があります。
gRPCおよび同様の最新のRPCライブラリは、幅広い言語サポート、これらの言語でのクライアントライブラリのコード生成、データ用の言語非依存のワイヤ形式、カスケードコールキャンセルなどの高度な機能を提供します。
一度書いて、どこでも実行;)
Haxe、C#/ CLR、Java / JVM、Javascript、Flash、Pythonなどにコンパイルして、各ターゲット言語の相互運用メカニズムを提供します。ある程度ActionScript3の後継と考えることができます。少なくとも1つの会社が実際にそれに依存している、かなり堅実なもののようです。次に説明するStabよりもはるかに信頼できる。
StabはいくつかのC#機能とJavaの相互運用性をもたらします。あまり役に立ちませんが、いくつかのC#機能を利用できますが、やり取りするのはそれらを使用しないJavaコードです。https://softwareengineering.stackexchange.com/a/132080/45826言語は比較的あいまいで、おそらく見捨てられ、改善される見込みはほとんどありません。ここで最初に@Vnsによって言及されました。
JVMプラットフォームの新鮮な空気の突風;)
Scala、Kotlin、その他は、JVM上で実行されるかなり良い言語であり、C#プログラマーがJavaで見逃す可能性のある機能をもたらします。特にKotlinは、JVMの世界ではC#の合理的な代替手段のように感じられます。Scalaは、プログラマーが短時間で慣れるには少し大きすぎる言語かもしれません。
それも確かにオプションです。Monoがそのまま実行できるのに、なぜJVMにトランスパイルするのか。@ferhrosaが最初に言及
ニューヨーク— 2014年11月12日 —水曜日、Microsoft Corp.は、サーバーサイドの.NETスタック全体をオープンソース化し、.NETを拡張してLinuxおよびMac OSプラットフォームで実行できるようにすることで、クロスプラットフォームの開発者エクスペリエンスへの取り組みを強化しました。
引用元となったこのプレスリリースによると、Visual Studio 2015はサポートされているプラットフォームとしてLinux / Monoを追加します。
これは、Monoプロジェクトの人々が反対側から書いたブログです。.NETソースコードの統合(2014年11月)。
Microsoftが管理する.Net(の一部)のWindows / Linuxマルチプラットフォームバージョン。'nuffはhttps://github.com/dotnet/coreと述べました。
これらのツール/フレームワークを試して、どの程度の摩擦があるかを確認する必要があります。OPは、実際にはGrasshopperを使用すると非常にうまく機能するJVM用のC#で記述したいと考えています。
C#とJavaのワールドライブラリを単一のコードベースに混在させることを目的としてこれを行うと、うまく機能しない場合があります。
出典
http://blog.pluralsight.com/new-course-making-java-and-c-work-together-jvm-and-net-clr-interop
Grasshopperを見てください。これはVisual StudioベースのSDKであり、Linux®およびその他のJava対応プラットフォームで.NET Webおよびサーバーアプリケーションを実行できるようにする特許取得済みの.NETからJavaへのコンバーターです。
C#でのクロスプラットフォーム開発のオプションはモノである可能性があります:http : //www.mono-project.com/
ソースツーソースコンパイラーを使用して、C#をJVMで実行する言語よりも言語に変換できます。たとえば、Javaに変換された後、C#アプリケーションをJVM上で実行できるようにするC#からJavaへのコンバーターがいくつかあります。
これがあまり熱狂的でない理由は2つあります。
言語の実際の機能に関して言えば、C#とJavaは非常に近いということを最初に理解する必要があります。C#とJavaは近いだけでなく、同様の方向に向かっています。JVMがそのままではサポートしていない機能がいくつかありますが、それは本当の問題ではありません。不足しているものはいつでも偽造できます。Almost-Javaをゼロから作成するよりも、Javaが砂糖を手に入れるのを待つ方が好きだと思います。移植の準備ができるまでに、Javaは追いつくことに決めているかもしれません。
第2に、開発者がC#を好む理由は、言語そのものではなく、その周辺のツール、C#との双方向の関係、およびMicrosoftがすべてをサポートする方法にあります。たとえば、C#とXAMLは互いにハッキングされているため(たとえば、C#の部分クラス、XAMLのバインディングなど)、C#-XAMLコンボはJavaFXよりも使いやすいです。JavaFXでC#を使用しても、それほど改善されません。JVMでC#エクスペリエンスを得るには、ツールも移植する必要がありますが、これははるかに大きなプロジェクトです。モノでもない気になり。
だから、慣れ親しんだツールの上でより洗練された言語を使用したいJava開発者への私のアドバイスは、既存のJVM言語をチェックすることです。
Monoもオプションですが、私は常にそれについて懐疑的でした。C#-。NETであり、クロスプラットフォームですが、Microsoftのツールで構築されたものは、通常Monoでは機能しません。それは本質的に独自のものです。マイクロソフトが協力すると発表したことで、今何が起こるかがわかります。