SlideShare a Scribd company logo
20141129-dotNet2015
仕事 
個人活動 http://tanaka733.net
1.はじめに 
2.Compilers 
1..NET Language Platform “Roslyn” 
2.Language Innovationin C# 6.0 
3.Runtime 
1.Next gen JIT “RyuJIT” 
2.SIMD
http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014
20141129-dotNet2015
http://www.hanselman.com/blog/AnnouncingNET2015NETasOpenSourceNETonMacandLinuxandVisualStudioCommunity.aspx
言語仕様はまだ変わる可能性があります 
実際、すでに変更予定も公表されています 
仕様は変わらずとも用語が変わる可能性もあります 
日本語訳も当然確定していないため、 英語のまま紹介しています
VisualStudio2015 Preview を使いましょう 
http://www.microsoft.com/ja-jp/dev/products/visual-studio- 2015.aspx 
本日の内容は基本的にこのPreview時点の情報です 
Go Live でないので、製品開発には使えません 
(自己責任ですが)以前のVSとSide-by-sideで使えます 
Azureの仮想マシンギャラリーからも利用できます
20141129-dotNet2015
https://roslyn.codeplex.com/
Code Refactoring 
Diagnostic with Code Fix
http://www.visualstudio.com/downloads/visual-studio-2015-downloads-vshttps://visualstudiogallery.msdn.microsoft.com/849f3ab1-05cf-4682-b4af- ef995e2aa1a5 
https://visualstudiogallery.msdn.microsoft.com/70e184da-9b3a-402f-b210- d62a898e2887
20141129-dotNet2015
publicclassPerson1{ publicstringFirst { get; set; } = "Taro"; publicstringLast { get; set; } = "Tanaka"; } 
プロパティの初期化は インスタンスフィールドの初期化と同じタイミング 
従ってthis 参照はできない
publicclassPerson2B{ privatereadonlystringfirst = "Taro"; publicstringFirst{ get{ returnfirst; } } privatereadonlystringlast = "Tanaka"; publicstringLast{ get{ returnlast; } } publicPerson2B(stringfirst, stringlast) { this.first= first; this.last= last; } } 
C#5.0風の書き方 
readonlyなプロパティのために、 フィールドを用意する必要があった
publicclassPerson2A{ publicstringFirst { get; } = "Taro"; publicstringLast { get; } = "Tanaka"; publicPerson2A(stringfirst, stringlast) { First = first; Last = last; } } 
Getterのみの自動プロパティは、 
自動的にprivate readonlyなSetterを持つ 自動プロパティの初期化、 
もしくは明示的に宣言したコンストラクタ内で代入可能
publicdoubleDistance(Pointp) => Math.Sqrt((p.X -X) * (p.X -X) + (p.Y -Y) * (p.Y -Y)); publicstaticPointoperator+(Pointa, Pointb) => newPoint(a.X+ b.X, a.Y+ b.Y); //この例はあまり適切ではないが、型変換演算子にも適用可 publicstaticimplicitoperatorstring(Pointp) => string.Format("({0},{1})", p.X, p.Y); 
メソッドの実装を1行の式で記述することができる。 演算子オーバーロードでも記述可能
publicdoubleLength => Math.Sqrt(X * X + Y * Y); publicPersonthis[longid] => store[id]; 
Getter Only なプロパティやプロパティインデクサも 式形式で実装できる。 Get 修飾子は記述不要(自動的にGetter-only扱い)
usingSystem.Console; usingSystem.Math; classProgram{ staticvoidMain() { WriteLine(Sqrt(3 * 3 + 4 * 4)); } } 
クラスを指定してstaticメソッドをクラス指定せずに記述可能
http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new- features-in-c-6.aspxusingSystem.Linq.Enumerable; // Just the type, not the whole namespaceclassProgram{ staticvoidMain() { varodd = Where(range, i=> i% 2 == 1); // Errorになる予定 } }
IList<Person> persons = null; int? count = persons?.Count(); Personfirst = persons?[0]; intcountWithDefault= persons?.Count() ?? 0; 
null の場合、nullを返す。 
null合算演算子と組み合わせても便利。 
※名称はNull-propagating operators という記述も多い
int? first1 = persons?[0].Freinds.Count(); //同じ int? first2 = (persons != null) ? (int?)persons[0].Freinds.Count() : null; 
短絡評価(ショートサーキット)するため、 
nullと評価された時点で、後続の式は評価されない。
if(predicate?.Invoke(arg) ?? false) { } propertyChanged?.Invoke(sender, newPropertyChangedEventArgs("Property")); //同じ varhandler = propertyChanged; if(handler != null) handler(sender, newPropertyChangedEventArgs("Property")) 
Delegate に対しては、Invokeメソッドを通して呼び出し可能。 
これは一度、ローカル変数に格納するため、スレッドセーフ
//今までの書き方 vars1 = string.Format("{0}: {1}", Name, Price); //プロパティを参照できる vars2 = "¥{Name}: ¥{Price}"; //左右揃えと書式指定の指定 vars3 = "¥{Name,20}: ¥{Price:C}"; //式も書ける vars4 = "¥{Name,20}: ¥{Price: C} (¥{(Stock==0? "":"SoldOut")})"; 
string.Formatではフォーマット文字列と変数が離れており、 間違えやすかったため導入された。 
コンパイラがString.Formatへ置き換えるが、 String.Concatへの最適化はしない
syntax の変更や機能追加が検討されている vars = $"{Name, 20}: {Price : C} {{-}}"; publicstaticstringINV(IFormattableformattable) { returnformattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture); } stringcoordinates = INV("longitude={longitude}; latitude={latitude}"); 
InvariantなCulture を使いたい場合はこのように書ける
if(arg== null) thrownewArgumentNullException(nameof(arg)); //メソッドを指定 Console.WriteLine(nameof(Dump)); //enumを指定 varmethod = nameof(HttpMethod.Get); //Genericsクラスのメソッドも指定できる Console.WriteLine(nameof(IList<>.Add)); Console.WriteLine(nameof(Tuple<,,,,,,,>.GetHashCode)); //型名を指定 Console.WriteLine(nameof(Int32)); //intがだめなのは仕様 //Console.WriteLine(nameof(int)); 
プロパティ名などを文字列で指定すべきところを、 
変更に強いコードにするために導入
//以前の記法 vardict2 = newDictionary<string, string> { {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"}, }; //新しい記法(同じ初期化子内で以前の記法と混ぜるのは不可) vardict= newDictionary<string, string> { ["key1"] = "value1", ["key2"] = "value2", ["key3"] = "value3" };
try{ DoSomeHttpRequest(); } catch(WebExceptione) if(e.Status== WebExceptionStatus.NameResolutionFailure) { Console.WriteLine("名前解決できませんでした"); } catch(WebExceptione) if(e.Status== WebExceptionStatus.RequestCanceled) { Console.WriteLine("リクエストがキャンセルされました"); } catch{ Console.WriteLine("そのほかのエラー"); } 
catch節に条件を付けることが可能に
MyRequestreq= null; try{ req= newMyRequest(); varres = awaitreq.SendAsync(); } catch(Exceptione) { awaitreq.RetryAsync(); } finally{ if(req!= null) awaitreq.CloseAsync(); } 
catch節、およびfinally節でawaitすることが可能に
structPerson{ publicstringName { get; } publicintAge { get; } publicPerson(stringname, intage) { Name = name; Age = age; } publicPerson() : this("Taro Tanaka", 10) { } } 
default(Person) とかnew Person[3] と宣言したときは このコンストラクタは実行されない。 あくまで明示的にnew Person() と呼び出したときのみ。
varlist = newQueue<string> { "item1", "item2", "item3" }; publicstaticclassExtensions{ publicstaticvoidAdd<T>(thisQueue<T> source, Titem) { source.Enqueue(item); } } 
Addを拡張メソッドとして定義した場合でも 
コレクション初期化子が利用できるようになった
20141129-dotNet2015
20141129-dotNet2015
http://aka.ms/ryujit
http://blogs.msdn.com/b/dotnet/archive/2013/09/30/ryujit-the-next-generation-jit-compiler.aspx
http://blogs.msdn.com/b/clrcodegeneration/archive/2014/10/31/ryujit-ctp5-getting-closer-to-shipping-and-with-better-simd-support.aspx 
http://blogs.msdn.com/b/clrcodegeneration/archive/2014/02/26/lies-damn-lies-and-benchmarks.aspx
https://code.msdn.microsoft.com/SIMD-Sample-f2c8c35a
staticvoidDemo() { // Array of 2 * Vector<int>.Length valuesint[] values = CreateValues(); // Multiply the first N values with the second// N values (N, being Vector<int>.Length). varx = newVector<int>(values, 0); vary = newVector<int>(values, Vector<int>.Length); varz = x * y; // Store the result in the array where x came fromz.CopyTo(values, 0); }
20141129-dotNet2015

More Related Content

PDF
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
PDF
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
PPTX
2014 03-15 業務アプリinsider ソフトウェア方面の先進テクノロジー
PPTX
ASP.NETからASP.NET Coreに移行した話
PDF
OWIN って何?
PDF
ASP.NET WEB API 開発体験
PPTX
Aspnet mvc 6の今を紹介
PDF
Asp Net Mvc 基礎のキソ
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
2014 03-15 業務アプリinsider ソフトウェア方面の先進テクノロジー
ASP.NETからASP.NET Coreに移行した話
OWIN って何?
ASP.NET WEB API 開発体験
Aspnet mvc 6の今を紹介
Asp Net Mvc 基礎のキソ

What's hot (20)

PPTX
ASP.NET習得の最短経路を考察する
PDF
Web開発の最新トレンド ~1から知るASP.NET~
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PPTX
ASP.NET MVC プログラミング入門の入門
PDF
ASP.NETの進化とASP.NET Core Blazorの凄さ
PDF
はじめての ASP.NET MVC
PPTX
はじめてのASP.NET MVC5
PDF
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
PDF
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
PPTX
20140322
PDF
One ASP.NET の今とこれから
PDF
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
PDF
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
PDF
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
PDF
~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション
PDF
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
PDF
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
PDF
2016/05/01 Visual Studio with Cordova
PDF
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
ASP.NET習得の最短経路を考察する
Web開発の最新トレンド ~1から知るASP.NET~
今から始める、Windows 10&新.NETへの移行戦略
ASP.NET MVC プログラミング入門の入門
ASP.NETの進化とASP.NET Core Blazorの凄さ
はじめての ASP.NET MVC
はじめてのASP.NET MVC5
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
50分で掴み取る ASP.NET Web API パターン&テクニック
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
20140322
One ASP.NET の今とこれから
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
2016/05/01 Visual Studio with Cordova
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Ad

Viewers also liked (15)

PDF
2011年マイクロソフト テクノロジー振り返り~開発編~
PDF
エンジニア勉強会20140424
PDF
アプリ開発も出来るイマドキのWeb技術入門(エンジニア適職フェアWeb技術入門セミナー)
PDF
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
PDF
第5回業開中心会議
PDF
最近のASP.NET事情2013Winter
PDF
ASP.NET "NOW" and "NEXT"
PPTX
ASP.NETの今とこれから
PDF
マイクロソフトWeb開発の今と今後
PPTX
第5回 業開中心会議 チャレンジングな業務アプリ開発者を目指そう
PDF
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
PDF
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
業務アプリケーション開発を支える.NET技術 #ngtnet
PPTX
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
2011年マイクロソフト テクノロジー振り返り~開発編~
エンジニア勉強会20140424
アプリ開発も出来るイマドキのWeb技術入門(エンジニア適職フェアWeb技術入門セミナー)
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
第5回業開中心会議
最近のASP.NET事情2013Winter
ASP.NET "NOW" and "NEXT"
ASP.NETの今とこれから
マイクロソフトWeb開発の今と今後
第5回 業開中心会議 チャレンジングな業務アプリ開発者を目指そう
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
今から始める、Windows 10&新.NETへの移行戦略
業務アプリケーション開発を支える.NET技術 #ngtnet
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
Ad

Similar to 20141129-dotNet2015 (20)

KEY
Google App Engine for Java
PPTX
復習も兼ねて!C#6.0-7.0
PDF
emc++ chapter32
PDF
Groovyで楽にSQLを実行してみよう
PPT
クラウド時代の並列分散処理技術
PDF
TypeScript 言語処理系ことはじめ
PDF
Groovy Shell Scripting 2015
PDF
React.jsでクライアントサイドなWebアプリ入門
PDF
社内勉強会資料(Varnish Module)
PDF
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
PPTX
エンタープライズ分野での実践AngularJS
PDF
Rx java x retrofit
PDF
Form libraries
PDF
Form libraries
PDF
ちょっと詳しくJavaScript 特別編【悪霊の神々】
KEY
Ll xcode
PDF
ソーシャルアプリ勉強会(第一回資料)配布用
PDF
MoteMote Compiler Plugin
PPTX
(ゲームじゃない方の)switchで遊びたい話
PPTX
T sql の parse と generator
Google App Engine for Java
復習も兼ねて!C#6.0-7.0
emc++ chapter32
Groovyで楽にSQLを実行してみよう
クラウド時代の並列分散処理技術
TypeScript 言語処理系ことはじめ
Groovy Shell Scripting 2015
React.jsでクライアントサイドなWebアプリ入門
社内勉強会資料(Varnish Module)
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
エンタープライズ分野での実践AngularJS
Rx java x retrofit
Form libraries
Form libraries
ちょっと詳しくJavaScript 特別編【悪霊の神々】
Ll xcode
ソーシャルアプリ勉強会(第一回資料)配布用
MoteMote Compiler Plugin
(ゲームじゃない方の)switchで遊びたい話
T sql の parse と generator

More from Takayoshi Tanaka (20)

PDF
deep dive distributed tracing
PPTX
202202 open telemetry .net handson
PPTX
202109-New_Relic-for-csharp-engineers
PDF
20210129 azure webapplogging
PDF
20201127 .NET 5
PPTX
Unity(再)入門
PPTX
最近のQ#について
PDF
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
PDF
20191024 Get Start gRPC with ASP.NET
PDF
New Relicで始める、.NET Applications on AWSのObservability
PPTX
C#エンジニアのためのdocker kubernetesハンズオン (再)
PPTX
20190806 Q# Measurements
PPTX
C#エンジニアのためのdocker kubernetesハンズオン
PDF
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
PDF
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
PDF
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
PDF
Try! Visual Studio 209 git feature
PDF
Q#基礎 ver1.1
PDF
(過去バージョン) Q#基礎 ver1.0
PDF
ゼロから始めるQ#
deep dive distributed tracing
202202 open telemetry .net handson
202109-New_Relic-for-csharp-engineers
20210129 azure webapplogging
20201127 .NET 5
Unity(再)入門
最近のQ#について
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
20191024 Get Start gRPC with ASP.NET
New Relicで始める、.NET Applications on AWSのObservability
C#エンジニアのためのdocker kubernetesハンズオン (再)
20190806 Q# Measurements
C#エンジニアのためのdocker kubernetesハンズオン
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
Try! Visual Studio 209 git feature
Q#基礎 ver1.1
(過去バージョン) Q#基礎 ver1.0
ゼロから始めるQ#

20141129-dotNet2015