---.NET Framework 2.0やC# 2.0を開発するに当たって,どのようなことを目標にしていましたか。
Visual Studio 2005と .NET Framework 2.0は,.NET関連開発ツールとしては初めて,必要な機能をほとんど実装できた(full feature)製品であると思っています。.NET Frameworkの初めてのバージョンが登場してからこれまで,ユーザーからいろいろなフィードバックをもらいました。今回の新製品は,このようなユーザーからのフィードバックを反映させた製品になっていると思います。Visual Studio .NET 2003はほとんどバグフィックスのためにリリースした製品とも言えますが,今回の新製品は新機能をふんだんに取り込むことができました。
新機能は数え切れないくらいあります。例えば,.NET Frameworkについては,64ビット環境に対応しました。Visual Studioにはエディット・アンド・コンティニュー機能を追加しました。またC#では,ジェネリクスや,パーシャル・クラス,Nullable型,匿名メソッド,イテレータなど新機能を加えました。全体的な目標は,ユーザーからのフィードバックをいかに反映させていくかという点にあったと言えるでしょう。
また,性能の向上も大切な点です。今回の新しい .NET Frameworkではすべての局面で性能が向上していると言えます。それから,生産性の向上も意識しました。特に,最上位エディションのVisual Studio Team Systemではチーム開発の方法論を意識しながら作りました。その結果,今回の新製品はとても大きなものになりました。自分が関わってきた開発ツールの中でも最も大きな新製品になったと思っています。
--新製品が出たばかりですが,この先,OSや .NET Framework,そしてプログラミング言語としてのC#はどこに向かって進むと思いますか。
ここ2年間,私は「LINQ(Language Integrated Query)」のプロジェクトに関わってきました。LINQはデータベースとオブジェクト指向言語の間にあるミスマッチ(インピーダンス・ミスマッチ)に対処するための仕組みで,将来のC#とVBに実装する予定の機能です。私が聞いた限りでは,75~80%のプログラマがアプリケーション構築にデータベースを使っています。データベース・アプリケーションを作るには,C#やVBなどのプログラミング言語のほかにSQLやT-SQLなどのデータベース・アクセス言語を学ばなければなりません。しかし,プログラミング言語とデータベース・アクセス言語は異質なものです。
LINQの目的は,データベースを使うアプリケーションで,クエリーによる参照や検索の作業を,クラスやオブジェクトからできるようにすることにあります。リレーショナルなデータやXMLデータやオブジェクトに対して統一したプログラミング・モデルを提供するというわけです。SQLやXqueryなどで書いていたデータへアクセスするコードをC#やVBで書けるようにするということです。
--すると,C# 3.0にはデータ・アクセス機能が言語仕様として実装されるということでしょうか。
その通りです。しかし,C# 3.0はまだ最終的な仕様が固まっていません。私たちはTechnology Preview版を提供しています。これは誰でも無料でダウンロードして,Visual Studio 2005にインストールして試すことができます。これにはかなり大規模なドキュメントも付属しています。言語仕様に関するドキュメントから,Standard Query Operators(データ・アクセスのためのAPI),DLinq(リレーショナル・データベースにアクセスするためのAPI),XLinq(XMLデータにアクセスするためのAPI)などの機能の仕様書も入っています。私たちは,プログラマがこのような新機能を試して,いろいろなフィードバックをくれることを期待してTechnology Preview版を提供しています。フィードバックをもらって,適切な形に修正しながら仕様を固めているところです。
--次の .NET Framework,C# 3.0の目標はどこにありますか。それから,どのような機能を実装する予定ですか。
すでに少しお話ししましたが,C# 3.0で試みていることに一つには,データとオブジェクトのインピーダンス・ミスマッチを解消するということですね。技術的な話をすると,私たちには関数型言語(編集部注:Haskellが代表格)に関する研究の蓄積があります。その成果をC# 3.0に取り込もうとしています。オブジェクト指向言語と関数型言語を融合する媒体を作ろうとしているのです。これはとても興味深いことです。関数型言語にはとても魅力的な側面がありますが,数学的な厳しいルールがあるという指摘もあります。私たちは両者の良いところを合わせていこうと考えています。
また,C# 3.0でできることは動的型付け言語(Dynamic Language)でもできるではないかという人もいます。RubyやPythonなどはその代表ですね。しかし,動的言語とC#の間には大きな違いがあります。私たちは型(types)について常に意識しています。動的言語は,物事を簡単にしていますが,型についてはまるで意識していません。そうすると,生産性に問題が生じます。型を意識しないと,コンパイル時の型チェックや,IntelliSenseや分析ツールなどの生産性を高める機能を利用できません。
私たちはC# 3.0において,型を意識した設計を保つように努力しています。そのために型推論(type inference)やジェネリクスといった機能を実装するつもりです。
--コンパイラや開発ツールとはどうあるべきと考えていますか。
それはやはり速くて信頼性があって生産性が高いということにつきるでしょうね(笑)。品質も高くなくてはいけません。品質はいろいろな要素から成り立っているので,一口には言えませんが。
それから,究極的には楽しくプログラミングができるということが大切だと思っています。楽しさはモチベーションを高める重要な要素ですから。例えば,C#でプログラミングをするときにイライラせずに済むとか,楽しくコードを書けるというところが大切だと思っています。
言語の設計とは,芸術(art)と科学(science)の組み合わせだと思います。主観的な側面から見ると,プログラミングをするときに心の中でこれは正しいはずだとか,これは正しく動くはずだと「感じる」点があります。一方で,数学的な規則正しい側面もあります。仕様を決めたり,コンパイラを実装するときなどです。これらの2点が有効に機能したときに,言語として成功するのではないかと考えています。また,そこが言語を設計するうえで面白い点だと思います。
--C#や .NET Frameworkは芸術と科学の組み合わせに成功していると思いますか。
(笑)私が知っている限りでは最も上手くいっているものの一つだと思いますよ。
続きはこちら=「『プログラミング言語はより抽象的になっていく』---C#の開発者が語る(2)」