Download presentation
Presentation is loading. Please wait.
1
<Session>
2
魅せます、Monoの実力。 Atsushi Enomoto Novell, Inc.
最初にatokとbansheeを起動. SL,unityのsshots, simdのtextを展開 paintdotnet, MoMA, gsharp, remixtokyo, rubyclock using System.IO; from f in Directory.GetFiles ("/etc") where f.EndsWith ("rc") select f; gsharp with Banshee using Banshee.ServiceStack; using Banshee.Sources; Describe (typeof (SourceManager)); var engine = ServiceManager.PlayerEngine; engine; Describe (engine); engine.IsPlaying (); engine.Pause(); engine.CurrentTrack; Describe (engine.CurrentTrack); engine.Play(); Atsushi Enomoto Novell, Inc.
3
はじめに About this session first public mono/moonlight session
at Microsoft the best of PDC2008 About me mono contributor since 0.17 (2002) sys.xml, and random stuff
4
Topics Mono introduction Mono and .NET interop
PDC 2008 Mono session highlights Moonlight
5
The Mono Project Mono - .NET everywhere
Moonlight - silverlight on Linux (so far) .NET Mono Windows x86 Mac x86,ppc Linux etc. x86,ppc,arm ... Silverlight Moonlight
6
Mono: Introduction
7
2001: the bootstrap Miguel de Icaza: GNOMEプロジェクト創始者 ※Ximian
でもMicrosoft技術が大好き COM → “Unixをもう少しマシなものにしよう” .NET → “ECMA標準の利用” Mono rationale: .NETの生産性をLinux/GNOME環境で実現 .NETアプリケーションをcross platformに オープンソース.NET環境の実現
8
Mono: .NET everywhere できること .NETアプリケーションのビルドと実行 everywhere! 再ビルドは原則不要
主な開発内容 mono: CLI ランタイム (VES) mcs: C# コンパイラ, 各種ツール クラスライブラリ xsp: ASP.NETサーバ $ mono [options] xsp2.exe [options]
9
Mono: GNOME dev. platform
GTK#: C# binding for gtk+ GTK#アプリケーション: banshee, f-spot, beagle, tomboy, gnome do ... MonoDevelop IDE (Gtk# GUIデザイナ)
10
Mono in games Second Life (Linden Lab) オブジェクト - Linden scriptで記述
ILにコンパイルしてmonoで実行 Unity (Unity3D) Mac OS X上で動作する統合ゲーム開発実行環境 Nintendo WiiやiPhoneでも実行可能 ※ Mono on Wii, Mono on iPhone FusionFall (Cartoon Network)
11
Mono for .NET Interoperability
12
Demo Windows Forms on Linux [paint-mono] ASP.NET on Linux
14
Mono does not support ... .NET 3.0: 未実装
Windows依存: COM, MSMQ, WMI, ACL etc. 一部のランタイム機能 世代別GC コード アクセス セキュリティ ※ClickOnce
15
クラスライブラリの互換性 互換性の実現と現状の把握 未実装のAPI MonoTODOAttribute
throw new NotImplementedException(); アセンブリから公開APIを取得して比較 API status page ( テストケースの作成と.NET上での動作確認 …といっても、目で確認してはいられない
16
MoMA MoMA (Mono Migration Analyzer)
ユーザ アプリケーションから、未実装のAPIや存 在しないAPI、P/Invokeの利用をチェック 大まかな互換性チェックに有用 DEMO
17
MoMA MoMA (Mono Migration Analyzer)
ユーザ アプリケーションから、未実装のAPIや存 在しないAPI、P/Invokeの利用をチェック 大まかな互換性チェックに有用 DEMO ※アプリケーションがMonoで動くかどうかは、 やってみないと分からない。でも完全には 動かないということを事前に知ることは可能。
18
more porting blockers ※Monoは.NET互換性実現のためだけに存在しているわ けではない
プラットフォーム毎の相違は尊重する ファイルシステムの相違 ドライブ、大文字・小文字、slash/backslash → MONO_IOMAP環境変数 デフォルト文字コード (特にASP.NET) → web.config, gmcs -codepage:932
19
more porting blockers ランタイム シリアライゼーション private実装に依存
→レポートがあれば簡単なものは修正される P/Invoke [DllImport (“user32.dll”)] ANSI文字列マーシャリング (monoはutf-8) → FooBarW() / <dllmap> in *.config / pray … and bugs (please report!)
20
ここまでのまとめ Mono: .NET everywhere, rich GNOME, embedded
Mono 2.0 ≒ .NET NET 3.5の一部 no .NET 3.0, no Windows-ism MoMAで移植NGコードをチェック 移植には障害も多いが、解決できることが多い
21
The Root of Mono Framework
22
Mono Runtime (VES) written in C (組み込みAPIも公開) VESの機能はほぼサポート
ガベージコレクション ※古典的 アセンブリローダ、GAC、side-by-side P/Invoke (*.so on Linux, *.dylib on OS X) (未) コード アクセス セキュリティ ※(済)coreclr IL verifier (Mono 2.4) Win32 I/Oエミュレーション
23
付論: native code interop
P/Invoke - [DllImport (“gdiplus”)] static extern Status GdipCreateLineBrushI(...); icall - [MethodImpl (MethodImplOptions.InternalCall)] static extern bool CreateDirectory(...); Win32 I/Oエミュレーション ves_icall_System_IO_MonoIO_CreateDirectory(...); Sys.Drawing, Windows.Forms libgdiplus
24
付論: 多様な実行方式 実行方式 インタープリタ [deprecated], JIT (Just In Time),
AOT (Ahead Of Time), full AOT (2.2) full AOTは組み込みに有用 実行方式 ネイティブコード生成 処理できるIL 速度 移植性 interp しない(VESが解釈・実行) 全て 遅 易 JIT 実行中随時 速 難 AOT 実行前 一部JIT実行 full AOT 一部エラー
25
Build your own runtime mkbundle ランタイム、ライブラリ、アプリケーションの一 本化 mono linker
独自のランタイムを作成可能 ※.NET CF linker + mkbundle: minimal deployment mscorlib Hello.exe Console mscorlib Hello.exe
26
Mono 2.2 highlight: Mono.Simd
Mono.Simd.dll managed codeでSIMDの活用が可能 C#/IL上は単なるメソッド/演算子の呼び出し JIT最適化モジュールsimd Mono.Simdの利用を検知して、SIMD命令に変換 mono --optimize=[simd|-simd] -v -v -v -v test.exe
27
mcs: Mono C# Compiler C#で書かれたC#コンパイラ 当初は.NET上で開発
Mono.CSharp.dll: C# Evaluator C# compiler as a service (API) mcs net1_1.cs gmcs net_2_0_or_3_5.cs smcs net_2_1.cs (silverlight)
28
Demo: gsharp Mono.Attach 他のMonoプロセスをinjectして操作できるAPI
gsharp: C# shell with VM attach API
29
ここまでのまとめ monoランタイム: いろいろな可能性 Mono.Simd: カスタムJIT最適化の好例
C# Evaluatorはおもしろい。gsharpで試せる
30
Moonlight
31
Moonlight brief history
2007/5: MS, Mix '07でSilverlightの公表 これに参加したMiguelが短期間での実装を計画 2007/6: ReMix '07 Franceでデモ成功 2007/9: MS/Novell提携 test cases / media codec 2008/3: Moonlight at Mix '08 ( John Lam ) 2009/1: Moonlight 1.0公開
32
Moonlight technology layers
[1.0] User contents (HTML, JavaScript) silverlight.js media codec mozilla plugin (C++) libmoon (C++) User MS OS Mono
33
Moonlight technology layers
XAP package App DLLs SDK DLLs [2.0] User contents (HTML, JavaScript) silverlight.js CoreCLR DLR言語 media codec mozilla plugin (C++) Silverlight Controls (dll) DLR libmoon (C++) System.Windows .Browser.dll mscorlib.dll, System.dll, System.*.dll DO/DP System.Windows.dll mono runtime (VES) User MS OS Mono
34
Microsoft helps Moonlight
DLR (, IronPython, IronRuby): MS-PL Silverlight Controls: MS-PL testcases media codec その他メール等でのヘルプ
35
Try Moonlight 1.0 2009/1/20リリース Silverlight 1.0相当
数十件のSL 1.0サイトで確認 (see mono website) 数か月間のバグ修正
36
Moonlight 2.0 work (ongoing)
Silverlight managed codeが利用可能 Moonlightでも2.0から CoreCLRの実装 ランタイム: IL verifier, CoreCLRセキュリティ (monoランタイムで未実装だった) クラスライブラリ - linker, tunerで互換APIを実現 Mono.Cecil: CILを操作するライブラリ full CLRライブラリのDLLを加工 存在しないメンバをinternalにするなどして隠蔽 不要なコードは削除
37
Demo Moonlight 1.0 Moonlight 2.0
38
</Session> Mono resources: website: http://mono-project.com
blogs: Contact: search atsushieno mono meeting
Similar presentations
© 2025 slidesplayer.net Inc.
All rights reserved.