Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Xamarinの新しい話とMonoの深い話 atsushieno版

Xamarinの新しい話とMonoの深い話 atsushieno版

Atsushi Eno

July 09, 2016
Tweet

More Decks by Atsushi Eno

Other Decks in Programming

Transcript

  1. You shouldn't see this page...!!
    you'll be cursed
    つなぎこみだからねー

    View Slide

  2. Mono <= 1.0
    ECMA 標準の利用 : Miguel de Icaza インタビュー
    Ximian: Gnome Desktopの会社
    GNOME: Gtk+でGUIアプリケーションを開発

    Gtk+ (Cライブラリ)のアプリケーションをCで開発するのはしんどい

    C#だ!
    → Gtk# (Win32->WinFormsみたいなもの)

    View Slide

  3. Roslyn
    "Language Service" - IDEの機能を実現
    ● コード補完
    ● 文法エラーのレポートと修正
    ● 定義に移動
    ● 利用箇所の検索
    ● 名前の変更
    ● コードの自動フォーマット
    C#コンパイラ
    ● ついでに、C#ソースコードがコンパイルでき

    どう使われているの ?
    ● VS2015 - Roslynがソース解析その他の機
    能と、実際のコンパイルの両方を担当できる
    ○ 従来はコンパイルだけ.NET Framework
    (csc)
    ● MonoDevelop - NRefactoryから移行
    ○ VSと一貫性のある機能
    ○ XS(MD)チームの開発コストが下がる
    ● OmniSharp (used by VSCode)
    ○ これをサポートするエディタ拡張を作るだけで
    エディタがC# IDEになる
    http://atsushieno.hatenablog.com/entry/2012/12/19/162038
    (MonoDevelop C#バインディングについて (ついでにtypescriptバインディングの話)

    View Slide

  4. Debug Engine
    Debugger = debugger client + debugger service
    開発者がブレークポイントをセットする

    IDEがdebugger clientに「xxx.csのx行目にブレーク
    ポイントを設定しろ」と伝える

    debugger clientがdebugger serverにブレークポイ
    ントの追加命令を送る
    debugger server: ランタイムの一部
    コードを1命令ずつ実行する前に、そこにブレーク
    ポイントが設定されていないかチェック

    ブレークポイントがあったら、 debugger clientに
    コールバック呼び出しをかける

    debugger clientは、コールバックに応じて、 IDEに
    コールバック呼び出しをかける
    https://github.com/mono/debugger-libs/
    https://github.com/mono/mono/blob/master/mono/mini/debugger-agent.c
    https://github.com/mono/monodevelop/tree/master/main/src/addins/MonoDevelop.Debugger.Soft

    View Slide

  5. Debug Engine
    VSCode: デバッガー クライアントとデバッガー サーバーの通信プロトコルを決めた
    ● 同じプロトコルをサポートしていれば、クライアントとサーバーは別のデバッガー実
    装でも通信できる
    ● 同じプロトコルで別の言語のデバッガーも実現できる
    同じプロトコルをXSがサポートすれば、VSCode用のデバッガーを使いまわせる
    Debugger Protocol

    View Slide

  6. Language Service
    IDEとコンパイラ(パーサー、セマンティッ
    ク アナライザー、リファクター)間の APIは、
    ある程度は言語を問わず共通している
    共通化してしまえば、 IDEがそのプロトコル
    を実装するだけで、複数言語をサポートで
    きる
    https://github.com/Microsoft/language-server-protocol

    View Slide

  7. Nugetizer 3000
    Xamarin Plugins
    - 参照はコンパイル時のおとり、実装はplat.別
    NuGetパッケージを作るのが面倒
    参照アセンブリ、各実装アセンブリを全部構築

    自動化すれば楽なのでは?
    新規Nugetizer 3000プロジェクトに実装アセンブリのプロジェクトを参照として追加
    → 参照アセンブリを自動生成 → nupkgも自動生成

    View Slide

  8. Linker
    基本 - GCライク
    設定ファイル(XML)で調整可能
    Linker = marking steps + sweep
    カスタマイズ可能
    iOS、Androidは大量のカスタマイズステップで構成

    View Slide

  9. Linker

    View Slide