Movatterモバイル変換


[0]ホーム

URL:


信之 岩永, profile picture
Uploaded by信之 岩永
PPTX, PDF36,132 views

.NET Compiler Platform

2015/6/25 C#UG&codeseek 勉強会「2015世代のC#」にて

Embed presentation

Downloaded 16 times
Compiler Platformコード解析とC#の未来C# とともに祝15周年岩永信之
今日話すこと• 2015世代でC#チームが提供するもの• C# 6.0• .NET Compiler Platform• それがもたらす影響• 独自のアナイライザー作成• Code-Aware Library• 課題• C# 7.0以降にどうつながるか
C# 6.0.NET Compiler Platform.NETチーム、C#チームが提供する“現状”
C# 6.0• 自動プロパティの改善• expression-bodied関数メンバー• 文字列補間• nameof演算子• null条件演算子• using static• 例外フィルター• catch/finally句内でのawait 等々正直なところ華はない• 機能追加よりも優先すべきことがあった• 限られた時間の中で“2015”に間に合うもの
C# 6.0• 自動プロパティの改善• expression-bodied関数メンバー• 文字列補間• nameof演算子• null条件演算子• using static• 例外フィルター• catch/finally句内でのawait 等々正直なところ華はない• 機能追加よりも優先すべきことがあった• 限られた時間の中で“2015”に間に合うものC# 6.0の話は今日はほぼしません既存資料※をご覧ください※ http://ufcpp.net/study/csharp/ap_ver6.htmlhttp://www.slideshare.net/ufcpp/csharp6IDE前提の機能 .NET Compiler Platform
IDE前提の機能• nameof演算子• 識別子名を文字列として取得できる機能• 識別子でないものはnameofの中に書けない• 修正漏れとかをコンパイル エラーにできる• IDEの中で真価を発揮• 修正漏れがあればリアルタイムに気付ける• リファクタリングの対象になる• 識別子のリネームに追従するnameof(x) == "x" コンパイルするだけならほぼただの文字列リテラル
Demohttps://github.com/ufcpp/UfcppSample/tree/master/Demo/2015/CompilerPlatform/NameofDemo
プログラミング言語のIDE連携• C# = IDEの恩恵を強く受けれる言語• (今までも)リアルタイム解析常にバックグラウンドで解析走ってる• 「ビルド」操作した時のコンパイル時間短い• コンパイル時よりももっと早い段階で、常にどこに問題があるかわかる• (今、さらに)nameof演算子でこの傾向が強まる"x" : 文字列の中の意味をコンパイラーは知らない実行してみて初めて問題がわかるnameof(x) : ()の中の意味をコンパイラーが知ってるリアルタイム解析の対象
.NET Compiler Platform• C#コンパイラーを1から作り直した• コードネーム“Roslyn”、製品名“.NET Compiler Platform”• 単なるコンパイラーではなく、プラットフォーム化旧source executable新source executableブラックボックス出力しか取れないホワイトボックス化中間データを取れるように• 抽象構文木の取得・書き換え• 拡張性の提供誰でもIDEと連携できる
プラットフォーム化が最優先• C# 6.0(機能追加) < 作り直し(プラットフォーム化)• 作り直しで手いっぱいで大きいことまでできない• (作り直して保守が楽になったからこそ細かいことができる)• C# 6.0• 悪く言えば、おまけ、華がない• 良く言えば、そんな大変な中よく新機能を2015に間に合わせた実はおまけ
Compiler Platform誰でもコンパイラーの中身に触れられる誰でもIDE連携できるまず、「作る側」の話
コード解析(Visual Studio標準)コンパイルはできるんだけど、人的ミスっぽいものを警告アイテム テンプレートには多めに出しておいて、最後に整理して消す人それぞれで流儀が違うけど、プロジェクト内ではそろえたい
コード解析(Visual Studio標準)緑の下線(警告):可能な限り直すべきもの半透明(情報):問題はないけども、直しようがあるものusing System
コード解析(Visual Studio標準)• クイック アクション直しようがあるものには直し方も提示、自動修正電球マークが目印)一斉修正ドキュメント内全部プロジェクト内全部ソリューション内全部(
デモ
プラットフォーム化• こういうコード解析を誰でも作れるように• 作れるもの:• アナライザー(analyzer)• シンボル追加、メソッド追加、コンパイル時などのタイミングで• コードを解析して、エラー/警告/情報 を出す• コード修正(code fix)• 特定の エラー/警告/情報 に反応して• 修正方法を提示して• その場限り、ファイル内全部、プロジェクト内全部、ソリューション内全部などをまとめて修正
コード解析の自作に必要なもの(1)• Visual Studio 2015 SDK• 「Visual Studio SDK」とかで検索、ダウンロードhttps://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx
コード解析の自作に必要なもの(2)• .NET Compiler Platform SDK Template• 「拡張機能と更新プログラム」で「.NET Compiler」とかで検索
コード解析の自作• テンプレート → Extensibility → Analyzer with Code Fix
デモコード解析本体テストVisual Studio拡張(NuGetパッケージが作られる)(F5実行でVisual Studioをデバッグ起動)テンプレ通りの状態でアナライザーとコード修正が1つずつ
配布• VSIX (Visual Studio Extension※)形式• Visual Studioにインストール• 全プロジェクトから使う• Visual Studio Galleryで検索・ダウンロード可能†• NuGet形式• プロジェクト単位で参照• 使う・使わないをプロジェクトごとに切り替え• ライブラリと同梱で配布可能• NuGet Galleryで検索・ダウンロード可能†※ VSI (Visual Studio Installer)の流れを組んでるからVSIXと言うみたいファイル構造的には必要なファイルをZIPで固めただけ† もちろん、VSIX/NuGetパッケージをファイル配布してもOK
配布: Visual Studio GalleryWebサイト Visual Studio上から検索
配布: NuGet GalleryWebサイト Visual Studio上から検索
拡張である意味• Visual Studio/C#コンパイラー標準でない意味• 特定分野の限定機能も提供できる ⇔ 汎用• 実装方法をカスタマイズできる ⇔ 汎用性と利便性は両立しにくい• 時代遅れになったら辞めればいい ⇔ 足すより減らす方が難しい• 経験則的な機能※も提供できる ⇔ 確実な機能しか提供できない• 嫌なら使わなければいい ⇔ 嫌でも使わされる• ライブラリ固有事情を汲める ⇔ ライブラリのことは知らないコンパイラーは…拡張なら…※ 端的にいうと誤判定・判定漏れもあり得る
拡張である意味• Visual Studio/C#コンパイラー標準でない意味• 特定分野の限定機能も提供できる ⇔ 汎用• 実装方法をカスタマイズできる ⇔ 汎用性と利便性は両立しにくい• 時代遅れになったら辞めればいい ⇔ 足すより減らす方が難しい• 経験則的な機能※も提供できる ⇔ 確実な機能しか提供できない• 嫌なら使わなければいい ⇔ 嫌でも使わされる• ライブラリ固有事情を汲める ⇔ ライブラリのことは知らないコンパイラーは…拡張なら…※ 端的にいうと誤判定・判定漏れもあり得るCode-AwareライブラリCode-Aware:(ライブラリ利用側の)「コードまで理解する」「コードを意識した」• ライブラリ固有の事情にそったアナライザーを• ライブラリ本体と同梱して配布
プラットフォーム化の可能性「作る側」になる人は多くない一般開発者への恩恵は何か「使う側」の話
作る人 <<[壁]<< 使う人• 「誰でも作れる」≠「誰もが作る」• 実際とのところ、作る人は少数• だいたい、作るの結構大変• 一度作ったらしばらく手を入れずに使い続けれる• 誰かが作って、みんなが使う• プラットフォームには上モノが乗って初めて価値が出る• 「PCはアプリがなければただの箱」と同じ理屈作りやすくなる → 作られる → 使う人が便利にここまで揃って初めて「目玉機能」になる
いくつか紹介• 「ただの箱」でないところを紹介• 現時点での話• まだまだスタート地点に立ったばかり• CTPまでは変更が多くて追いにくかったし、RCが出てまだ1・2ヶ月• たまに、Galleryを検索してみるといいと思う• おおまかに分類• コード解析系• Code-Awareライブラリ系• メタプログラミング系
いくつか紹介What 何をしてくれるものかWhy どうしてC#コンパイラー/VSの標準機能にならないのかどうしてライブラリ+アナライザーなのかOwner 拡張ツールの作者(中心人物、会社、チーム)
コード解析系• 単純に静的コード解析+リファクタリング
C# EssentialsWhat C# 5.0を6.0化するのをガイドしてくれる主に ?. と =>Why C# 5.0→6.0の移行期にしか要らない古い形式のままで使いたい人もいるOwner Dustin Campbell(C#/VBチームのプログラム マネジャー)https://github.com/DustinCampbell/CSharpEssentials
C# EssentialsWhat C# 5.0を6.0化するのをガイドしてくれる主に ?. と =>Why C# 5.0→6.0の移行期にしか要らない古い形式のままで使いたい人もいるOwner Dustin Campbell(C#/VBチームのプログラム マネジャー)https://github.com/DustinCampbell/CSharpEssentials
StyleCop AnalyzerWhat StyleCopが提供していたコード解析機能をVS拡張にWhy 趣味を選ぶ(人によって流儀が違う)指示が細かすぎるOwner Sam HarwellCoverity (静的解析ツール ベンダー)社員、MS MVPhttps://github.com/DotNetAnalyzers/StyleCopAnalyzers
NRefactory 6What NRefactory (SharpDevelopのコード解析)がRoslyn実装に(MonoDevelopのコード解析もNRefactory)Why SharpDevelopチームが主導VS標準よりも細かい指示多めOwner SharpDevelopチームhttps://visualstudiogallery.msdn.microsoft.com/68c1575b-e0bf-420d-a94b-1b0f4bcdcbcc
Code CrackerWhat コミュニティ ベースでいくつかの便利機能を実装var強制、Regexの静的解析などWhy コミュニティを中心に開発趣味を選ぶOwner 数名のMS MVPhttps://github.com/code-cracker/code-cracker
Code-Awareライブラリ系• ライブラリ固有事情を汲み取り• そのライブラリ以外にとっては役に立たないコード解析• 現状、あんまりいいのが見つからなかったので自作のを紹介
(デモ用) FluentArithmeticWhat デモ用に、最低限の機能に絞ったCode-Awareライブラリ1.Add(2).Mul(3)みたいな書き方で整数四則演算Why .Dive(0)を認めないとか1.Add(2)を3に修正したりとかこのライブラリ以外でまったく役に立たないOwner 自作https://github.com/ufcpp/UfcppSample/tree/master/Chapters/DevEnv/CodeAwareLibrarySample
(デモ用) FluentArithmeticWhat デモ用に、最低限の機能に絞ったCode-Awareライブラリ1.Add(2).Mul(3)みたいな書き方で整数四則演算Why .Dive(0)を認めないとか1.Add(2)を3に修正したりとかこのライブラリ以外でまったく役に立たないOwner 自作https://github.com/ufcpp/UfcppSample/tree/master/Chapters/DevEnv/CodeAwareLibrarySample0割りエラーリテラル同士の演算を短縮
LazyMixinWhat 構造体を他の型に埋め込んで使うhas-aな実装で、is-a的な体験を提供Why ライブラリだけで縛れない規約が多すぎるダメな書き方をエラーに、推奨の書き方をコード生成Owner 自作https://github.com/ufcpp/LazyMixinもっと汎用的な仕組みに書き換え中: https://github.com/ufcpp/MixinGenerator
LazyMixinWhat 構造体を他の型に埋め込んで使うhas-aな実装で、is-a的な体験を提供Why ライブラリだけで縛れない規約が多すぎるダメな書き方をエラーに、推奨の書き方をコード生成Owner 自作https://github.com/ufcpp/LazyMixinもっと汎用的な仕組みに書き換え中: https://github.com/ufcpp/MixinGeneratorreadonlyがついていると意図しない動作になるのでエラーにする推奨の使い方をコード生成
他にこんな使い方できそう• JSONライブラリで、文字列リテラル中のJSON解析を同梱• LINQ Providerに「使える式は何」警告機能を付ける。
メタプログラミング系• コード修正というより、コード生成• アナライザー実装にすることで• コード生成元もC# ⇔ T4テンプレート: 元がキモイ• コード生成結果が見える ⇔ PostSharpなど: 生成結果が見えない• 現状、あんまりいいのが見つからなかったので自作等を紹介わかりやすさ大事。特に、継続的に保守する場合見えないとデバッグが大変。何が原因か追えない
NotifyPropertyChangedGeneratorWhat INotifyPropertyChanged実装をコード生成Why 特定用途すぎるし、実装方法にバリエーションがある手書きがむちゃくちゃ大変Owner neuecc (MS MVP)https://github.com/neuecc/NotifyPropertyChangedGenerator
NotifyPropertyChangedGeneratorWhat INotifyPropertyChanged実装をコード生成Why 特定用途すぎるし、実装方法にバリエーションがある手書きがむちゃくちゃ大変Owner neuecc (MS MVP)https://github.com/neuecc/NotifyPropertyChangedGenerator
RecordConstructorGeneratorWhat immutableな型のコンストラクターを書くのだるいのでコード生成するようにしたWhy C#ができた当初(15年前)には考慮に欠けてたC# 7.0で状況改善しそうだけども、それまでのつなぎにOwner 自作https://github.com/ufcpp/RecordConstructorGenerator
RecordConstructorGeneratorWhat immutableな型のコンストラクターを書くのだるいのでコード生成するようにしたWhy C#ができた当初(15年前)には考慮に欠けてたC# 7.0で状況改善しそうだけども、それまでのつなぎにOwner 自作https://github.com/ufcpp/RecordConstructorGenerator
将来の話まだまだ始まったばかりで課題だらけこれから充実させていってほしいものもあるC# 7.0
IDE連携 ≠ Visual Studio連携• Q. で、Visual Studio以外で使えるの?• A. Roslynオープンソース化の意味がここで強く効いてくる• 現状、Visual Studioのみだけど• Xamarin Studio : 対応中みたい• OmniSharp : Roslyn化フォークがある、作業中• ATOM, Emacs, Sublime Text, Vim, ...• Visual Studio Code : ATOM実装(コード解析はOmniSharp任せ)
難易度: 「可能にはなった」程度• コンパイラーの中身に触れるようになっただけvar props = propertyNames.Select(p => new Property(p)).ToArray();var docComment = GenerateDocComment(props.Select(p => p.Name));var parameterList = ParameterList().AddParameters(props.Select(p => p.ToParameter()).ToArrvar body = Block().AddStatements(props.Select(p => p.ToAssignment()).ToArray());return ConstructorDeclaration(typeName).WithModifiers(SyntaxTokenList.Create(PublicToken)).WithParameterList(parameterList).WithLeadingTrivia(docComment).WithBody(body).WithAdditionalAnnotations(Formatter.Annotation);• 読めた代物じゃない• 書くのも大変/// <summary>Record Constructor</summary>/// <param name="name"><see cref="Name"/></param>/// <param name="x"><see cref="X"/></param>/// <param name="y"><see cref="Y"/></param>public Point(string name = default(string), int x = default(int), int y = default(int)){Name = name;X = x;Y = y;}
解析用の新構文が欲しい• 型のパターン マッチング構文が欲しい• C# 7.0で入りそう(確度高め)• ぶっちゃけ、“内需”だと思うvar id = statement.Left as IdentifierNameSyntax;if (id == null) continue;if (id.Identifier.Text == p.Name)return;特定の型の場合だけ処理アナライザーを書いているとこういうコードだらけにif (statement.Left is IdentifierNameSyntax id&& id.Identifier.Text == p.Name)return;C# 7.0 提案パターン マッチis演算子の拡張
構文欲しい 修正用 式ツリー• 組み換え可能な、Roslyn版式ツリーが求められる• 要望としては出ているものの、構文の具体案なしAssignmentExpression(SyntaxKind.SimpleAssignmentExpression,IdentifierName(Name.Upper),IdentifierName(Name.Lower))); 「X = x」みたいなものを作るだけでこの大変さ`${Name.Upper} = ${Name.Lower};`こういう類のメタプログラミング構文が欲しい(この構文は適当)
参照がめんどくさい• 普通のライブラリの参照方法• アナライザーの参照ファイルを参照プロジェクトを参照NuGetパッケージを参照※※ NuGet参照するには、NuGetのstartupスクリプトに参照設定を書かなきゃ行けない(アナライザー作成テンプレートには最初からそういう設定スクリプトが書かれてる)ファイルを参照プロジェクトを参照NuGetパッケージを参照
メタプログラミングはまだ妥協的• メタプログラミングでは• 生成元・生成結果両方見えてほしい• ただ、元と結果は明確に分離したいpublic class Sample1{public string Name { get; set; }public int X { get; set; }public int Y { get; set; }}public class Sample1 : INotifyPropertyChanged{public int X { get { return x; } set { SetProperty(ref x, value, xPropertyChangedEventApublic int Y { get { return y; } set { SetProperty(ref y, value, yPropertyChangedEventA#region NotifyPropertyChangedGeneratorpublic event PropertyChangedEventHandler PropertyChanged;private int x;private static readonly PropertyChangedEventArgs xPropertyChangedEventArgs = new Properprivate int y;private static readonly PropertyChangedEventArgs yPropertyChangedEventArgs = new Proper元情報生成結果• デバッグのためだけに見たい• コードを書く上ではノイズ
コンパイラーの負の遺産• Visual Studio/C#コンパイラー標準でない意味(再掲、抜粋)• 時代遅れになったら辞めればいい ⇔ 足すより減らす方が難しい• 経験則的な機能※も提供できる ⇔ 確実な機能しか提供できない• C# 7.0 提案• null非許容参照型• メソッド コントラクトコンパイラーは…拡張なら…この辺りの制限がきつくて足せない機能がある• 互換性を崩さないのが無理• 100%確実な判定が無理
null非許容参照型• 今のC#に欠けているもの値型 参照型許容 T? T非許容 T これがないstatic void F(string s){if (s == null)throw new ArgumentNullException(nameof(s));}現状の書き方メソッドのシグネチャだけ見てnull許容かどうか判定できない煩雑
null非許容参照型• 今のC#に欠けているもの値型 参照型許容 T? T?非許容 T T! null非許容参照型static void F(string! s){}C# 7.0 提案の書き方• 誰が見てもnull非許容• nullチェックはコンパイラー生成
null非許容参照型と互換性問題• F(string s) を F(string! s) に変えると、利用側を壊す• 今までnullチェックをサボっていた人がいたら• 例外catchで済ませている人がいたら• 標準ライブラリにちゃんと ! が付いてないと利便性半減互換性と利便性にトレードオフ
null非許容参照型と確実性• 一時的にnullになっていないといけない場面がある• 配列とか• 特に、コレクションの実装とかで• List<T>• HashSet<T>• この性質と、マルチスレッド動作が合わさると判定不能var array = new string[N];for (var i = 0; i < N; i++){array[i] = "";}この間は絶対にnull最初に大きめの配列をとっておいて、そのうちNマスだけ使う
null非許容参照型のアナライザー実装• アナライザーでなら実装簡単• 互換性が必要な場面では使わなければいい• 誤判定のリスク<ないことによる不便• 事実、実装がある• 今でも、ReSharperとかの静的解析ツールはやってる• C#チームも、一度アナライザーで実装してみてる• 実装: https://github.com/mattwar/nullaby• その報告: https://github.com/dotnet/roslyn/issues/2119• もしかしたら、C# 7.0はこのまま、一部アナライザー実装になるかも
言語機能のアナライザー実装の課題• 一部分だけアナライザー?• string! ←こういう書き方を解釈するのはコンパイラー機能• string! の非nullを解析するのはアナライザー• 機能がon/offできるコンパイラー機能?• 同じバージョンのC#を使っているはずでも、コンパイルできる環境とできない環境ができる挙動的にはかなりキモい
まとめ
まとめ• C# 6.0、Compiler Platform• IDEとの連携性が実は主役、C# 6.0はちょい役• Platform化の恩恵• 皆が作れる• Code-Awareである• ライブラリ固有の事情をくめる• 経験則• 特定文脈によった解析とか、誤判定(判定漏れ)が許容されうる• C#公式機能ですらアナライザーベースになるかも• null非許容参照型 (あとたぶん、メソッド コントラクトも)

Recommended

PPTX
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
PDF
Kotlinアンチパターン
PDF
Dockerfile を書くためのベストプラクティス解説編
PPTX
MVVM入門
ODP
xrdpで変える!社内のPC環境
PPTX
MLOpsはバズワード
PDF
Salesforce 開発入門
PDF
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
PPTX
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
PDF
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
PDF
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
PDF
Cloud runのオートスケールを検証してみる
PPTX
Effective Modern C++勉強会#4 Item 17, 18資料
PDF
(文献紹介)Depth Completionの最新動向
PDF
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
C#/WPFで作るデスクトップマスコット入門
PDF
Android/iOS端末におけるエッジ推論のチューニング
PPTX
世界一わかりやすいClean Architecture
PPTX
Effective Modern C++ 勉強会 Item 22
PDF
会社でClojure使ってみて分かったこと
PPTX
CNN-SLAMざっくり
PDF
tf,tf2完全理解
PDF
Introduction to YOLO detection model
PDF
Point net
PPTX
カルマンフィルタ入門
PDF
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
PPTX
C#とILとネイティブと
PPTX
Orange Cube 自社フレームワーク 2015/3

More Related Content

PPTX
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
PDF
Kotlinアンチパターン
PDF
Dockerfile を書くためのベストプラクティス解説編
PPTX
MVVM入門
ODP
xrdpで変える!社内のPC環境
PPTX
MLOpsはバズワード
PDF
Salesforce 開発入門
PDF
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
Kotlinアンチパターン
Dockerfile を書くためのベストプラクティス解説編
MVVM入門
xrdpで変える!社内のPC環境
MLOpsはバズワード
Salesforce 開発入門
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理

What's hot

PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
PPTX
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
PDF
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
PDF
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
PDF
Cloud runのオートスケールを検証してみる
PPTX
Effective Modern C++勉強会#4 Item 17, 18資料
PDF
(文献紹介)Depth Completionの最新動向
PDF
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
C#/WPFで作るデスクトップマスコット入門
PDF
Android/iOS端末におけるエッジ推論のチューニング
PPTX
世界一わかりやすいClean Architecture
PPTX
Effective Modern C++ 勉強会 Item 22
PDF
会社でClojure使ってみて分かったこと
PPTX
CNN-SLAMざっくり
PDF
tf,tf2完全理解
PDF
Introduction to YOLO detection model
PDF
Point net
PPTX
カルマンフィルタ入門
PDF
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Cloud runのオートスケールを検証してみる
Effective Modern C++勉強会#4 Item 17, 18資料
(文献紹介)Depth Completionの最新動向
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
C#/WPFで作るデスクトップマスコット入門
Android/iOS端末におけるエッジ推論のチューニング
世界一わかりやすいClean Architecture
Effective Modern C++ 勉強会 Item 22
会社でClojure使ってみて分かったこと
CNN-SLAMざっくり
tf,tf2完全理解
Introduction to YOLO detection model
Point net
カルマンフィルタ入門
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018

Viewers also liked

PPTX
C#とILとネイティブと
PPTX
Orange Cube 自社フレームワーク 2015/3
PPTX
C# design note sep 2014
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PPTX
新しい Visual Studio & .NET と新時代のアーキテクチャ
PDF
Visual Studio + xamarin で始めるモバイル アプリ開発
PDF
Open棟梁ロードマップ v01-72リリース時
PPTX
Keep yourself up to date
PPTX
Deep Dive C# 6.0
PPTX
.NET vNext
PDF
Visual Studio 2017 RC C# まわり
PPTX
Modern .NET
PDF
One ASP.NET, OWIN & Katana
PPTX
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
PDF
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
PPTX
Code Contracts in .NET 4
PDF
Rust v1.0 release celebration party
PDF
Rust 1.0 Release記念祝賀 - Rustのドキュメントを少し訳してみた
PPTX
それっぽく、適当に
PPTX
Cしゃーぷができるまで
C#とILとネイティブと
Orange Cube 自社フレームワーク 2015/3
C# design note sep 2014
今から始める、Windows 10&新.NETへの移行戦略
新しい Visual Studio & .NET と新時代のアーキテクチャ
Visual Studio + xamarin で始めるモバイル アプリ開発
Open棟梁ロードマップ v01-72リリース時
Keep yourself up to date
Deep Dive C# 6.0
.NET vNext
Visual Studio 2017 RC C# まわり
Modern .NET
One ASP.NET, OWIN & Katana
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
Code Contracts in .NET 4
Rust v1.0 release celebration party
Rust 1.0 Release記念祝賀 - Rustのドキュメントを少し訳してみた
それっぽく、適当に
Cしゃーぷができるまで

Similar to .NET Compiler Platform

PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PPTX
C# 9.0 / .NET 5.0
PPTX
C#言語機能の作り方
PPTX
C# 8.0 Preview in Visual Studio 2019 (16.0)
PDF
C#勉強会 ~ C#9の新機能 ~
PPTX
メタな感じのプログラミング(プロ生 + わんくま 071118)
PDF
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
PDF
Introduction to Roslyn
PDF
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
PDF
Visual studio 14 CTP2 概要
PDF
今からでも遅くないC#開発
PPTX
2014 08-30 life with roslyn
PPTX
Visual basic14 の話
PDF
C#勉強会
PPTX
.NET Core 2.x 時代の C#
PPTX
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
PDF
20141129-dotNet2015
PPTX
Unity C#3からC#6に向けて
PPTX
C#6.0の新機能紹介
PPTX
C# 7 Current Status
【Unite Tokyo 2019】Understanding C# Struct All Things
C# 9.0 / .NET 5.0
C#言語機能の作り方
C# 8.0 Preview in Visual Studio 2019 (16.0)
C#勉強会 ~ C#9の新機能 ~
メタな感じのプログラミング(プロ生 + わんくま 071118)
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
Introduction to Roslyn
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
Visual studio 14 CTP2 概要
今からでも遅くないC#開発
2014 08-30 life with roslyn
Visual basic14 の話
C#勉強会
.NET Core 2.x 時代の C#
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
20141129-dotNet2015
Unity C#3からC#6に向けて
C#6.0の新機能紹介
C# 7 Current Status

More from 信之 岩永

PPTX
C#や.NET Frameworkがやっていること
PPTX
async/await のしくみ
PPTX
C#/.NETがやっていること 第二版
PPTX
C# 8.0 非同期ストリーム
PPTX
C# 8.0 null許容参照型
PPTX
非同期処理の基礎
PPTX
Unityで使える C# 6.0~と .NET 4.6
PPTX
広がる .Net
PPTX
Unicode文字列処理
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PPTX
C# 7.2 with .NET Core 2.1
PPTX
C# コンパイラーの書き換え作業の話
PPTX
プログラミング .NET Framework 第4版
PPTX
Coding Interview
PPTX
C#マスコット(公開用)
PPTX
Anders Hejlsberg Q & A
PPTX
YouTube ライブ配信するようになった話
C#や.NET Frameworkがやっていること
async/await のしくみ
C#/.NETがやっていること 第二版
C# 8.0 非同期ストリーム
C# 8.0 null許容参照型
非同期処理の基礎
Unityで使える C# 6.0~と .NET 4.6
広がる .Net
Unicode文字列処理
今から始める、Windows 10&新.NETへの移行戦略
C# 7.2 with .NET Core 2.1
C# コンパイラーの書き換え作業の話
プログラミング .NET Framework 第4版
Coding Interview
C#マスコット(公開用)
Anders Hejlsberg Q & A
YouTube ライブ配信するようになった話

.NET Compiler Platform

Editor's Notes

  • #2 https://github.com/ufcpp/UfcppSample/
  • #7 こういう機能が今までなかったのも、コンパイラー単品で見たらそんなに意味のある機能じゃないから。一方で、ないことに不満を感じられるのはIDEの恩恵を受けてコード書いてきてるから。IDE使わない文化の人だと、grep置換が割りかし当たり前に行われてる = リテラル中かどうかはあんまり関係ない
  • #9 今まで実行時だったエラーがコンパイル時にわかるって意味では、$"" (string interpolation)も同様。C# 6.0はIDE連携度が上がってる。
  • #11 まあ、「プラットフォーム化」の着手は実は2008(C# 4.0)とかの世代にはもう始まっていたので、悪く言えば、「2015年まで待たされた」「やっと来た」だったりはする。
  • #13 プラットフォーム化(誰でも触れるようにする化)以前の問題として、こういう処理のためにコンパイラー(とVisual Studioが使うコード解析)で二重開発してたという問題(負担)もあった。二重開発は、保守コストが上がるという問題もあるし、「コンパイラー的には動くはずなのに、IDE上ではエラーに見える」みたいなことも起こりえる(C#/Visual Studioではユーザーに見えたことないけど、Java/Eclipseとかでは普通にあった話)。
  • #14 未使用変数警告は昔からある (全体的に、警告出るまでのリアルタイム度合いは上がった気がする。昔は結構コンパイルするまで出なかった)using整理は2013にもあるんだけど、未使用なものが半透明になるのは2015で初。 Resharperとか入れてるとResharperが色変えてた気もする。一斉修正も初。this整理は完全に初。
  • #15 Ctrl+.とりあえずドット打っとけ
  • #16 2015で初めてのもの:「情報」で半透明表示this. の簡略化警告出るまでのラグが減ってる気はする。前はビルドするまで出なかったり。
  • #21 正直、VSのデバッグ起動(もう1インスタンス立ち上がって、元のVSからアタッチ)、ものすごい遅いんでストレスフル。可能な限り「テスト」でなんとかして、DLLとかNuGetパッケージを作ったのを参照するほうが楽かも。ついでだから、NuGetパッケージをローカルのフォルダーに置いて、それを参照する方法もデモしとこう。
  • #29 まあ、問題もあって。アナライザーに絞って検索するすべがないんで、増えてるんだか増えてないんだかわかんない。
  • #44 クライアントUIエンジニアはほんとに困ってるんだけど、逆に、サーバー側エンジニアにとっては無用。この温度感の差も結構問題になる。バリエーションは、「値が変化」の判定をどうするかで、EqulityComparer使う、ReferenceEquals使う、そもそも比較とかせず常にイベント飛ばすとかある。ちゃんと、NotifyPropertyChangedGeneratorではオプション指定できる作りにした(ノイエさんとこはEqualityComparerだったらしく、元はそれ固定だった。うちはReferenceEqualsか、比較なしか。なので、直してpull-req送るなど)。
  • #45 クライアントUIエンジニアはほんとに困ってるんだけど、逆に、サーバー側エンジニアにとっては無用。この温度感の差も結構問題になる。バリエーションは、「値が変化」の判定をどうするかで、EqulityComparer使う、ReferenceEquals使う、そもそも比較とかせず常にイベント飛ばすとかある。ちゃんと、NotifyPropertyChangedGeneratorではオプション指定できる作りにした(ノイエさんとこはEqualityComparerだったらしく、元はそれ固定だった。うちはReferenceEqualsか、比較なしか。なので、直してpull-req送るなど)。

[8]ページ先頭

©2009-2025 Movatter.jp