Mono はプライムタイムに対応できる状態ですか? [closed] 質問する

Mono はプライムタイムに対応できる状態ですか? [closed] 質問する

大規模または中規模のプロジェクトでオープン ソースの .NET 実装である Mono を使用したことがある人はいますか? 実際の運用環境で使用できるかどうか疑問に思っています。安定していて、高速で、互換性があり、使用できるほど十分ですか? プロジェクトを Mono ランタイムに移植するには多くの労力が必要ですか? それとも、Microsoft のランタイム用に既に記述されたコードを取得して実行するだけで十分な互換性があるのでしょうか?

ベストアンサー1

考慮すべきシナリオがいくつかあります: (a) 既存のアプリケーションを移植していて、Mono がこのタスクに十分かどうか疑問に思っている場合。(b) 新しいコードを書き始めていて、Mono が十分に成熟しているかどうかを知りたい場合。

最初のケースでは、Mono 移行アナライザー ツール(Moma) を使用して、アプリケーションが Mono 上でどの程度実行できるかを評価します。評価が良好な結果になった場合は、テストと QA を開始して、出荷の準備を整える必要があります。

評価の結果、Mono で欠落している機能やセマンティクスが大きく異なる機能を強調したレポートが返ってきた場合は、コードを適応または書き直すことができるかどうか、あるいは最悪の場合、アプリケーションが機能を減らしても動作できるかどうかを評価する必要があります。

ユーザーの投稿に基づく Moma の統計 (記憶による) によると、アプリケーションの約 50% はそのまま使用でき、約 25% は 1 週間分の作業 (リファクタリング、適応) が必要で、さらに 15% はコードの大部分をやり直すために真剣に取り組む必要があり、残りは Win32 に非常に密接に結びついているため、移植する価値がありません。その時点で、ゼロから始めるか、ビジネス上の決定によってコードを移植可能にする作業が推進されますが、数か月分の作業が必要になります (少なくとも私たちが持っているレポートによると)。

最初から始める場合、状況ははるかに単純です。Mono に存在する API のみを使用するからです。サポートされているスタック (ほぼ .NET 2.0、LINQ および System.Core を含む 3.5 のすべてのコア アップグレード、および Mono クロスプラットフォーム API のいずれか) を使用する限り、問題ありません。

時々 Mono のバグや制限に遭遇し、それを回避しなければならない場合もありますが、それは他のシステムと変わりません。

移植性に関して言えば、ASP.NET アプリケーションは Win32 への依存性がほとんどないかまったくなく、SQL サーバーやその他の一般的なデータベースも使用できるため、移植が容易です (Mono には多数のデータベース プロバイダーがバンドルされています)。

Windows.Forms の移植は、開発者が .NET サンドボックスから抜け出して P/Invoke を使い、wParam 内の BCD 形式でエンコードされた 2 つのベジェ ポイントとして表現されるカーソルの点滅速度を変更するなど、便利な機能を構成するために頭を悩ませることが多いため、難しい場合があります。

おすすめ記事