これは、Visual Basic Advent Calendar 2014の12/1日の記事。
正式には現時点で「Visual Basic 2015」となることが発表されてなく、内部バージョンのVB14.0となっているですが、現在「Visual Studio 2015 Preview」版がダウンロードされている状態であり、2015年に発売されることと推定されるため、あえてこのタイトルとしました。
新機能を紹介する前に、今までのVBの進化の歴史を整理してみます。
【VB2005(VB8.0)の新機能】参照:VS 2005で新しくなったVisual BasicとC#の新機能を総括
・部分クラス(パーシャル・クラス)
・ジェネリック
・プロパティの個別アクセシビリティ・レベル定義
・My機能
・Usingステートメント
・フォームの既定インスタンス
・Globalキーワード
・演算子のオーバーロード
・Continueステートメント
・XMLドキュメント・コメント
【VB2008(VB9.0)の新機能】参照:Visual Basic 言語の新機能、VBの進化
・.NET Framework 2.0/3.0/3.5 に対応
・LINQ(統合言語クエリ)に対応
・Null 許容型に対応(「As Nullable(Of Integer)」を「As Integer?」と書ける)
・型推論(「Dim a = 10」と書くと「Dim a As Integr = 10」の意味になる)
・オブジェクト初期化子(Dim a As New Point() With {.X = 10, .Y = 20})
・匿名型(「Dim a = New With {.Name = "名無しのV", .Job = "社会人"}」)
・拡張メソッドに対応(ExtensionAttribute 属性)
・ラムダ式に対応(「Dim ave = Function(x As Integer, y As Integer) (x + y) / 2」)
・XML リテラル、XML 軸プロパティ(「Dim a = <abc>xyz</abc>」)
・If 演算子の追加(三項演算子)…If ステートメントとIIf関数を合わせたような物
・部分メソッド「Partial Private Sub」のサポート(VB2005 のPartial Classと併用する)
【VB2010(VB10.0)の新機能】参照:Visual Basic 2010の新機能、VBの進化
・行継続文字「 _」を省略可能になった(分割位置によっては省略できない場合もある)
・コレクション初期化子に対応(「Dim a As New List(Of String)() From {"VB", "C#", "F#"}」)
・自動実装プロパティ(End Property無しの「Public Property Name As String」)
・複数行ラムダ式およびSub のラムダ式に対応
・並列処理の追加
・Parallel.Forメソッド、Parallel.ForEachメソッド
・Taskクラス
・Parallel LINQ (AsParallelメソッド)
・VBランタイムの無効化オプション(/vbruntime オプション)
・動的オブジェクトのサポート(System.Dynamic 名前空間)
・ジェネリックの共変性と反変性
【VB2012(VB11.0)の新機能】参照:C#/VB言語の新機能
・Async / Await キーワードによる非同期コードサポート
・Iterator/Yield キーワードによる反復子
・呼び出し階層
・メソッド情報
・Global Namespaceのサポート
※VB2013は、新機能の追加は一切ありません。
【備考】
Visual Studio 2010以降からVisual Basic 6.0のアプリケーションをアップグレードする機能は組み込まれないようになりました。
VB6からVS2013にアップグレードする方法
手順は「VB6→VS2008→VS2013」となります。
VS2008 Expressは次のサイト等で入手できます。
NonSoft - Visual Studio 2008 Expressのダウンロードとインストール
Visual Basic 6.0 ユーザーのための Visual Basic .NET 移行ガイド
Microsoft.VisualBasic.Compatibility.VB6 名前空間 は、.NET Framework Version 4以降Obsoleteとされるクラスである。
■新機能の概要
Visual Studio 2015から、次世代コンパイラー「Roslyn」(ロズリン)が搭載されます。
Roslynは、Compiler as a Serviceと呼ばれていた言語機能の解析エンジンです。
Roslyn以前は、VBコンパイラーと統合開発環境のVisual Studio上のVBパーサーが一致するように2重のコストをかけて作成してました。2つの異なるコンパイラーを保守するのは容易ではありません。その上、言語も複数あるわけです。
プログラミング言語への新機能の追加には2重の労力がかかります。新機能の追加にも慎重にならざるを得ません。
Roslynによってコンパイラーを1つだけにできるのです。参照:C#たんっ! コンパイラーは2つある
また、これまでC#/Visual Basic間のソースコードを自動変換する場合は文字列置換方式で正常に動作しないこともあったのですが、RoslynによってC#をコンパイル後にVisual Basicに変換されるために、正確にしかも必ず動作するように変換されるわけです。
このように言語間による機能の差をほぼ無くすように努力しているため、今まで新機能でもIDEでもC#に何かと遅れをとってモチベーションが下がっていたVisual Basicユーザーも活気つくかもしれませんね。
【VB2015(VB14.0)の新機能】参照:VBの新しいステートメント、Upcoming Features in Visual Basic
1.Select Caseステートメントの拡張 → 次バージョンにて実装予定
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル → 次バージョンにて実装予定
6.数値区切りリテラル → 次バージョンにて実装予定
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
1.XMLドキュメントコメントの修正
2.TypeOfステートメントでIsNot演算子の利用
3.パーシャルモジュールとパーシャルインターフェイスのサポート
4.#Reagion #End Regionがメソッド内部で定義可能
5.インターフェイスのReadOnly / WriteOnlyプロパティーを自動実装プロパティーで実装可能
6.Overridesキーワードがある場合のOverloadsキーワードの省略を可能に
7.属性の引数でボクシングの変換
9.C# Previewの変更で検討中の機能
1.プライマリーコンストラクターによるインスタンスの初期化
2.Dictonaryの初期化方法の追加(! operatorの追加) → 次バージョンにて実装予定
3.暗黙的に定義される参照引数(Output キーワードの追加) → 次バージョンにて実装予定
4.Catchブロック内でのAwaitキーワードのサポート → 次バージョンにて実装予定
10.その他
1.Null条件演算子
2.#pragmaの追加
3.スマート名前解決
これから、少しずつ新機能について説明していきます。
【追記】2015/12/20
見逃していた新機能をhilaponさんが書いてくれています。
nameof 演算子
文字列の中に式や変数を埋め込む(文字列補完)$を使用