Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Mono <= 1.0 ECMA 標準の利用 : Miguel de Icaza インタビュー Ximian: Gnome Desktopの会社 GNOME: Gtk+でGUIアプリケーションを開発 ↓ Gtk+ (Cライブラリ)のアプリケーションをCで開発するのはしんどい ↓ C#だ! → Gtk# (Win32->WinFormsみたいなもの)

Slide 3

Slide 3 text

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バインディングの話)

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Nugetizer 3000 Xamarin Plugins - 参照はコンパイル時のおとり、実装はplat.別 NuGetパッケージを作るのが面倒 参照アセンブリ、各実装アセンブリを全部構築 ↓ 自動化すれば楽なのでは? 新規Nugetizer 3000プロジェクトに実装アセンブリのプロジェクトを参照として追加 → 参照アセンブリを自動生成 → nupkgも自動生成

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Linker