1. ホーム
  2. .net

[解決済み】Monoはプライムタイムに間に合うか?[クローズド]

2022-03-28 09:52:02

質問

オープンソースの.NET実装であるMonoを大規模または中規模のプロジェクトで使用したことのある方はいらっしゃいますか?私は、それが現実の生産環境に対応できるものなのかどうか、疑問に思っています。安定性、高速性、互換性、......どれをとっても、使うに足るものでしょうか?Monoランタイムにプロジェクトを移植するのは大変な作業ですか、それとも本当にそうですか? 本当に Microsoftのランタイム用に既に書かれたコードをそのまま引き継いで実行できるほど互換性があるのでしょうか?

解決方法は?

いくつかのシナリオを検討する必要があります。(a) 既存のアプリケーションを移植しようとしていて、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 を使って、カーソルの点滅速度を 2 つのベジェポイントで表現し、wParam に BCD 形式でエンコードするというような便利な設定をしたがるため、時にやっかいです。 あるいは、そのようなジャンク。