SlideShare a Scribd company logo
Anders Hejlsberg Q&A:
TypeScript, C#, Roslyn,
and More
(の後半部分。主にC#のところ)
セッション情報
• Anders Hejlsberg Q&A:
TypeScript, C#, Roslyn, and More
• http://channel9.msdn.com/Events/Build/2013/9-006
• 7割くらいがTypeScript
• 後ろ3割くらいで、C#とRoslynの話
関連記事
• 以下の内容が近いといえば近い
• No new VB and C# Language Features in VS 2013
• http://blogs.msdn.com/b/vbteam/archive/2013/07/17/no
-new-vb-and-c-language-features-in-vs-2013.aspx
• Visual Studio 2013+1で新しいC# / VB機能を約束した
• http://www.infoq.com/jp/news/2013/07/vs2013_next
• Mads(C#言語設計・仕様のPM)による火消しと、
C#の方向性の説明
• が、AndersのBuildでの発言の延長線上
• なので、やっぱりAndersの立ち位置重要
おまけ: TypeScriptに関して
• 例えばどんなTypeScript Q&Aがあったかという
と
• Q. async/awaitサポートは?
• A. 考えてはいる
• 実際、チーム内には実装してみた人がいる
• ただ、TypeScriptの仕組み上、生成されるJavaScript
もある程度きれいにしたい
• この要件が現状では満たせない
• ECMA Script 6でイテレーター(ジェネレーター)がサポー
トされたらだいぶきれいになるので考える
ここからが本題
• Build中、C#の将来性に関してはこのQ&A後半
がほぼ唯一の情報
• 理由: ほんとに話せる新しいことがない
• でかい機能(async/await)を入れた直後
• 将来への投資(Roslyn)してて、機能的には変わってない
↓
• 投資が落ち着いて戻ってきた直後
• なので、形には全くなっていないものの、方向性を知る
意味では面白い時期
• 何もないことを不安がる人への火消し的意味合いあると
思う
VS 2013のさらに次
• Visual Studio 2013
• 2012のリリースから非常に短期間で開発
• そのため、今回はRoslynを含めない決定をくだす
• Roslyn
• C#/VBコンパイラーの完全置き替え
• マネージ化、内部構造のホワイトボックス化
• 整理されたことで、言語に新機能を追加しやすく
• IDE連携もとりやすく
Roslyn提供時期
• Roslynの新しいCTPも、VS 2013のローンチ後だ
ろう
• VSIX(拡張機能パッケージ)提供
• 機能のオン/オフが自由にできるので、
VS本体と別タイミングのリリースでも問題ない
予想以上に時間がかかった
• 意地でも既存コンパイラーと互換性を保つ必要
がある
• 何百万と(下手すると何十億)という既存コード資
産がある
• バグや仕様上の問題も含めて再現が必要
• 明らかにおかしい挙動であっても直すわけにはいかない
ビルドのパフォーマンスは?
• 目標としては、既存コンパイラーの2倍の時間
以内に収めることで、これは達成している
• モダンな作りになったことで恩恵もある
• Immutableなデータ構造で作っていて、並列実行し
やすい
• プロジェクト単位ではなく、もっと細かい単位(メ
ソッドごととか)で並列実行できる
• プロジェクトが大規模になるほど恩恵が大きいだろ
う
TypeScriptのせいか?
• 違う。Andersの本業は、今だなお、絶対的に
C#/.NETの方
• 去年は確かにTypeScriptに関わる時間が長かっ
たが…
• 本業の方がRoslynやってて仕様的には変化がなかっ
た
• 「いい機会」だった
TypeScriptで得るものはあった
か
• Dynamism、dynamic typingのよさを改めて認識
するよい機会だった
• 薄い型定義についても
dynamic
• C# 4.0のdynamicは少し大げさ
• 多くの要件では過剰スペック
• 例えば、「Jsonを読みたいだけ」みたいな時に使いたい機
能ではない
• 注釈:
• 動的コード生成の機能として、パフォーマンス等考
えると非常に優秀なものの
• リフレクションがネック
• 今は、Xamarin.iOSみたいにスマホでも.NETが動くが… こう
いう環境ではリフレクションは使えない、あるいは、使
いたくない
薄い型定義
• 例えばF#だと型定義が短く書けたりするが…
type Point(x : int, y : int) = class
member this.X = x
member this.Y = y
end
例
public class Point
{
public Point(int x, int y) { X = x; Y = y; }
public int X { get; private set; }
public int Y { get; private set; }
}
今のC#だと
この辺りが野暮った
い
現状
• Roslynが落ち着いた
• Just-do-it(とにかくやれよ)な要望が多く溜
まっている
• Roslynの後には我々はjust-do(やるよ)
• TypeScriptがC#の進化を遅らせたとかはない
• Roslynがあるからこそ、今後の機能実装が簡単
に
他に
• 言語をまたいだコミュニティも大事
• TypeScriptやC++や
• 例えばC++にもasync/awaitが(たぶん、C++/CXのこと)
まとめ
• Roslyn落ち着いて、そろそろC#にも新機能
• ただ、動くのはこれから
• おそらく、細々したのがたくさん
• just-do-it(いいからやれよ)という口ぶりから…
• 軽量なdynamic
• 薄い型定義
参考: just-do-it
• (MS製品全般)UserVoiceの要望が結構通るの
で…
Visual Studioの要望からC#関連を抜きだすと
( 5ページ目くらいまで)
• ?. 演算子
• 複数の例外を1個のcatch句で拾いたい
• 非null参照型
• SIMD命令/GPUサポート
• 文字列中への式の展開
• INotifyPropertyChanged

More Related Content

Viewers also liked

.NET vNext
.NET vNext.NET vNext
.NET vNext
信之 岩永
 
Interaction channel
Interaction channelInteraction channel
Interaction channel
信之 岩永
 
広がる .Net
広がる .Net広がる .Net
広がる .Net
信之 岩永
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014
信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
信之 岩永
 
MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門
MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門
MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門
yuki maeta
 

Viewers also liked (7)

.NET vNext
.NET vNext.NET vNext
.NET vNext
 
Interaction channel
Interaction channelInteraction channel
Interaction channel
 
広がる .Net
広がる .Net広がる .Net
広がる .Net
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門
MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門
MessagePack-CSharpってシャープなの?@激突! Aiming x CloverLab [クライアント対決]部門
 

More from 信之 岩永

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
信之 岩永
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
信之 岩永
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
信之 岩永
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
信之 岩永
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
信之 岩永
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
信之 岩永
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
信之 岩永
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に
信之 岩永
 
Modern .NET
Modern .NETModern .NET
Modern .NET
信之 岩永
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
信之 岩永
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
 

More from 信之 岩永 (20)

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に
 
Modern .NET
Modern .NETModern .NET
Modern .NET
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
 

Anders Hejlsberg Q & A