SlideShare a Scribd company logo
1 of 17
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

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# コンパイラーの書き換え作業の話
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信之 岩永
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に信之 岩永
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
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