2009-04-15 6 views
58

これは疑問な質問かもしれませんが、私はMonoプロジェクトを探していましたが、インストールするセクションはMono on Windowsです。しかし、Windowsは明らかに.NETランタイムを持っているので、誰でもWindows用のMonoを持っている点は何ですか?それはクロスプラットフォーム開発や何かを助けますか?Windows上のMonoのポイント

答えて

62

MonoはMS .NET Frameworkと同じ100%.NETを実装していないため、Linuxで実行することなくMonoをテストすることができます。また、Monoは、MSがサポートしていないGTKでフォームを作成するためのバインディングを持っています。

+0

私はMiguelが抱きしめて拡張するようになることを願っています。しかし、これまでのところ、彼はMSのリードにちょうど従っている。それは偉大な開発者がその方法に従属しているのを見て痛い – Javier

+2

誰が彼は私たちの側にいると言う? *咳* – cgp

+6

MS.NetはGtk#をサポートしていませんが、MonoプロジェクトはGtk#アプリケーションをMonoなしでMS.Net上で実行できるようにするWindows用のインストーラを公開しています。 – jpobst

4

ほとんどの場合、Mono固有のライブラリ用のMonoアプリケーションを開発するために役立ちます。また、Monoを開発するときに開発者が自然環境で作業できるように、原因を事前に助けるためにも使用します。

+1

「自然環境」とは何ですか? Windowsはあなたの自然環境かもしれません。私はいくつかの環境を持っています、それらのすべてがかなり人工的ですが、私にとってはうまくいきます。 :) –

11

C#でクロスプラットフォームアプリケーションを開発したい場合は、他のプラットフォームには完全に互換性のある代替手段がないため、マイクロソフトの実装を使用することは賢明ではありません。

Windows上のMonoを使用してアプリケーションを開発すると、P/Invokeなどの他のピットを避けることができれば、他のOSへの移植はほとんど問題ありません。例えば

23
  • Mono does some things the .Net doesn't.あなたは、構築、コンパイル、および独立したランタイムのインストーラを必要とせずにアプリを配布することができるように、モノは静的リンクをサポートしています。クロスプラットフォームにするためにモノに依存するアプリケーションを構築した場合、いくつかの違いがあります。したがって、Windows上でモノを使用することは、互換性の保証になります。

  • .Net does some things that mono doesn't. BCLにはまだモノに移植されていない場所がいくつかあります。 mac/linuxでも動作するアプリケーションが必要な場合は、Windowsで作業している場合でも、おそらくモノ向けに開発したいと思うかもしれません。

+1

静的リンクは、私がWindows上のMonoが使用されていると聞いた最大のものの1つです。 –

3

ない広範な関心の一方で、モノは標準のMicrosoftランタイムに対する改良を持っているいくつかのケースがあります。 Migelは、今年PDCでこれらのいくつかについて講演を行った。彼らは、インストールが許可されていないため、一部の人々はそれを使用している

7

は、これらの記事を参照してください。 WindowsのPC上の.Netフレームワークは、レジストリとシステムファイルの量が多いために発生します。 (厳密に制御された環境で)

Monoは、Program Filesに含まれていて、実行する必要がないレジストリキーのみを書き込みます。

私はこれはまあまあだと思いますが、それは複数のユーザーが私たちに語ったことです。

68

Monoには、.NETにはない2つの機能があります。

モノはモジュール性が高いです。小さな断片で分解して、正確にの部分だけを展開してください。 System.Xmlは必要ありませんか?さて、それはなくなった。

モノは埋め込み可能です。 C/C++アプリケーション内でホストすることで、ユーザーが安全な管理されたサンドボックス環境からスクリプトを作成できるようになります。これの最も有名な例は、mod_monoです。これは、Apache Webサーバー内のMonoをホストし、ASP.NETがMonoでどのように実装されているかなどです。この機能は、前述のモジュール化といっしょに優れています。

これはすでに言及されています:静的リンク。 また、はモジュール化と一緒に大きくなります。

サービスとしてのコンパイラは別のものです。 Anders Hejlsbergはの時間が長くて時間、の場合はと言っています。ちょうどC#5.0の準備が整いました。まあ、Monoはすでにそれを持っていて、実際にそれを持っていました。

Monoのリード開発者は、 "Embrace and Extend.NET"というイニシアチブを持っており、他のCLI実装(.NETを含む)では可能ではない方法でCLIを拡張しています。これまでのところ、EmbraceとExtend.NETには3つの機能があります。

Mono.Simd。基礎となるCPUのSIMD命令(IntelのSSEやPowerPCのAltiVecなど)に安全かつ制御されたアクセスを提供します。ゲームやグラフィックスに使用されます。

64 ECMA仕様で許可されているビット配列インデックスですが、実際にそれらを提供する唯一のVMはMonoです。スーパーコンピューティングで使用されます。

最近では、続きが続きます。これは、実際には仕様書の範囲外でMonoが最初に逸していることです:長い配列インデックスは仕様に従って完全に有効であり、Mono.SimdはすべてのCLI準拠の実装(ただしは非常にですが)では動作しますが、Mono.Tasklet CLIまたは.NETの一部ではないVMからの特別なサポートが必要です。これは、ゲームロジックに使用されます。セカンドライフで

+1

+1。 Monoが持っている機能の素敵な概要。 – wimvds

+0

静的リンクの場合は+1、埋め込み可能の場合 – fmark

1

私は彼らが主な理由は、それらを比較するためにモノと.NET上で.NETアプリケーションを実行できることだと思います。また、Monoライブラリに依存するいくつかのアプリケーションがあります。 Monoのtechnical FAQから

12

あなたは本物を実行することができたときになぜ、Windowsのをサポートしていますか? Windowsは、私たちがモノを支援することの非ポータブルバージョン、 からモノ のポータブル部分を識別 将来的に、よりポータブルになることができますサポート

は様々な理由があります。

問題をパーティション分割することで、Monoの問題を特定できるため、問題を解決することができます( ランタイム問題またはOSの問題ですか)。

Monoの貢献者の約半数はWindows開発者です。彼らは努力に貢献 ため さまざまな理由を持っている、と私たちはそれらの 、開発者が新しい オペレーティングシステムを使用するように強制することなくWindowsの 上でランタイムを実行してみましょうすることは非常に重要な見つける 。

Monoは、Windowsレジストリを大幅に変更せず、システムDLLを更新しません。 DLLをWindows/System32 パスにインストールします。

これは、Windowsベースの開発者が MonoのコードをLinuxに展開する前にテストするのに役立ちます。

モノとモノが インストーラなしで展開することができます埋め込むアプリケーション(あなたが「xcopyの」.NET ランタイムをインストールすることなく、あなたの アプリケーションと必要なモノ ファイルを展開することができます)。

2

また、プログラムがMonoと動的にリンクしている場合でも、コンパイルされた.exeとMonoランタイムをpendriveで実行し、.NET/Monoがインストールされていない別のコンピュータに移動し、ランタイムインストール。つまり、ポータブルアプリにつながります(特にポータブルUSBペンドライブアプリとして便利です) これは.NETでは不可能です。特定のインストーラの方法で.NETランタイムをインストールする必要があります。つまり、フォルダのコピーと貼り付けができないランタイムは不可能です。

0

その他の回答に記載されているさまざまな理由を追加するには、Windows用のMonoがWineにインストールされている必要があります。