matarillo.com

The best days are ahead of us.

3 背景:言語、Microsoftでのプログラム可能性、そして.NETの創造

2021-09-25 00:00:21

1970年代から80年代にかけて、トランジスタの設計やチップの製造からソフトウェアの開発やアプリケーションに至るまで、コンピューター業界は急速に拡大し続けていました。 BASIC、PASCAL、Prolog、Modula 2、Cなど、さまざまなプログラミングパラダイムや言語の開発と採用に伴い、ソフトウェア開発ツールも急成長し、統合されました。 それぞれの変種が市販されていました(Visual Basic、Turbo Pascal、Borland Cなど)。 Logoのような言語は、プログラミングが「他と異なる」1ことがあり、大胆な新時代の「第4世代言語」が約束されているという新世代の想像力を刺激するのに役立ちました。

同時期に、Microsoftもまた、オペレーティングシステムとアプリケーションの会社として大規模な拡大を経験しました。 Microsoftは1975年にプログラミングツールを構築することから始めました。 プログラミングできることの重要性 – 商業的・技術的な取り組みの両方で – が、同社とそのCEOであるBill Gatesの「骨の中」にありました[Wikipedia 2020b]。 1980年代を通じて、プログラミング性に関する彼の主な関心事は、商業的なものでした。 つまり、DOSおよびWindowsエコシステム用のアプリケーションおよび独立系ソフトウェアベンダー(ISV)の商用エコシステムの作成を支援する方法です。 最も重要だったのは、これらのプラットフォームを使用している開発者の数が非常に多いことでした。開発者がこれらのエコシステムの成長に貢献するからです。 同社は、マスデベロッパー市場を満足させるVisual Basicや、よりハードコアな開発者向けのCのバージョンなどのツールを開発しました。 この2つの違いは、後に “Mort” (Visual Basic)と “Einstein” (C++)のためのツール、として特徴付けられました[Wikipedia 2019d]2。 そのようなツールはHyperCard[Wikipedia 2019b]やToolBook[Wikipedia 2019e]などの無数のRAD環境に対抗したもので、Microsoftはハンズダウンに成功し、 世界中のアプリケーション開発を支配し、オペレーティングシステムでは独占的地位を獲得しました。 MicrosoftはFoxPro[Wikipedia 2000]やFORTRANコンパイラーなど、他にも数多くのプログラミングツールを製造していましたが、後に製造中止となりました[WinWorld 2016]。

1980年代後半には、新しい考え方の波が「オブジェクト指向」プログラミングに結実し、これがアプリケーションソフトウェア開発や学術界でますます影響力を帯びてきました。 確かに、オブジェクト指向はソフトウェア開発の概念化の周辺領域から中心となる方向へと移行しました。 市販のツールチェーンを持つ言語というパターンが繰り返されました。 例としては、1985年の最初のC++ 商用コンパイラー、1992年のBorland C++ 、1993年のIBM Smalltalkなどがあります。 OOを推進する要因の中で最も重要なものは、ソフトウェアにおけるユーザーインターフェース要素の普及です。 アプリケーションはインタラクティブになり、「ボタン」やその他の「ウィジェット」でできていました。 これらのウィジェットは、状態と動作を組み合わせた「オブジェクト」として概念化するのが簡単で、これらのウィジェットは階層的に分類できました。 手続き指向言語ではそのような抽象化をコードで直接表現することができず、サブタイピングのない言語ではウィジェット間の必要な関係を表現することは困難であることがわかりました。 人々は新しい言語を評価するときに必ず2つの質問をしました:「それは継承をサポートしますか?」と「すべてはオブジェクトですか?」です。 これらの基準を満たさなかった言語は、すぐに主流から取り残され忘れ去られるようになりました。

ソフトウェア開発方法論のこの新しい波と、あるオペレーティングシステム会社が、だんだんと近づいてきて、両社の結びつきが業界を変えてしまうという見込みが興味をそそるようになりました。 たとえば、1993年のNEXTStep 3.0の発売では、NEXTStep OSが何らかの形でサポートしているという概念として「オブジェクト」に重点が置かれ(実際のところは、NeXTStepのアプリケーション開発がObjective Cをベースにするというものでした – OS自体はCで書かれていました)、 Jobsはそれを用いてOSの洗練さと技術的な成熟度をデモしました。 Javaが1991年から95年に開発され、1996年にリリースされたとき、それは少なくとも6つの点でMicrosoftにとって大きな挑戦でした。

  • Javaはオブジェクト指向で「現代的」でした。
  • Javaは、理論上は特定のオペレーティングシステムへの依存を減らすことができる、Write Once Run Anywhereソフトウェア開発を約束しました。
  • Javaは、高性能オペレーティングシステム市場の直接のライバルによって開発されました。
  • Javaは、エンドユーザーにブラウザーを介してアプリケーションを提供する能力があり、Webの黎明期におけるWebテクノロジーとして位置付けられました。
  • Javaは仮想マシン(VM)やガベージコレクション(GC)3などの一連の技術的なデバイスを使用していました。そして
  • Javaは応用学術コンピューターサイエンスへの貢献として認められ4、Microsoftではほとんど無視されてきた層を迎え入れました。 その結果、Javaは型付きオブジェクト指向の事実上の標準として受け入れられるようになりました。

Microsoftは当初、対応が遅れました。 社内では、同社は主力製品を実装するためにCにコミットしていましたが、同様にたくさんのアセンブリコードも持っていました。 ターゲットハードウェアの仕様を考えると、Javaのようにヒープを割り当てる「おもちゃ」の言語でWindowsやMicrosoft Wordを書くのは現実的ではなかったので、JavaはすぐにはMicrosoftの内部で利用される主要言語になりませんでした。 さらに、Visual Basicのような外部向けのRAD環境は、クラス指向言語で見られるOOへの構造化アプローチからすぐには恩恵を受けませんでした。 Javaの大流行が業界を襲ったため、Microsoftは1996年にSunからライセンスを受けたJava(Microsoft J++)を採用することで対応しましたが、その後言語を拡張したため法的措置に直面しました。 これは、米国対Microsoft社の、1998年から2001年まで正式に行われた訴訟の背景の一部を形成しましたが、その根源は過去の行動にありました。 この時の訴訟で米国政府は、NetscapeやJavaといった、インターネットブラウザーソフトウェアやその他のプログラムに関連するPCメーカーへ制限を加えることで、MicrosoftがPC市場で独占的地位を不法に維持していると非難しました。 初回対審での勧告は、Microsoftを会社として解散させることでしたが、その後、より小さな救済策に落ち着きました。

1997年、Microsoftは取り組みを変更し、Javaの根本的な課題を解決できると同時にWindowsプログラミングに固有のニーズも解決できる新しいプログラミングプラットフォームの内部開発を開始しました。 当初はCOM+ 2.0やLightningと呼ばれていて、最終的には.NETと呼ばれるようになりましたが、ランタイム環境の基本原則は次のとおりです。

  • Visual Basic、C++ およびJavaを含む複数のプログラミング言語をサポートするでしょう。 さらに、Anders Hejlsbergの設計のもと、最初はCOOL、その後C# と呼ばれる新しい言語の開発が始まりました。
  • バイトコード、ガベージコレクション、JITコンパイル、そしてスタックベースのセキュリティチェックやリモート処理などの「ミドルウェア」機能をサポートするでしょう。 さらに、ランタイムは符号なし整数、ボックス化されていない表現、そしてインストール時のコンパイルをサポートするでしょう。
  • CベースのWin32 APIへのネイティブな相互運用性やCOMの組み込みサポートなど、特にWindows上でのアプリケーション開発のために作られるでしょう。 ただし、十分に一般化され、他のオペレーティングシステムへの移植が理論的に可能にもなるでしょう。
  • SDKが無料で提供され、1992年に設立されたMicrosoft Researchによって管理されていた学術関係における新たな取り組みに合わせたものになるでしょう。

Lightningに関する決定は、Bill Gatesによって定期的にレビューされました。 2人の「開発者エバンジェリスト」 – PeterとJames Plamondon5 – の努力により、ある重要な決定が下されました。 すなわち、Lightningは、Microsoftが決める固定の言語だけのためではなく、多言語のためのランタイムだということです。 “Project 7” というアウトリーチプロジェクトが開始されました。 その目的は、Lightningのローンチ時に、7つの商用言語と7つの学術言語がLightningをターゲットにすることでした。 ある意味でこれはマーケティング活動でしたが、深い信念と意図もありました。 学術言語の定義を支援するために、James PlamondonはMicrosoft Research(MSR)に目を向けました。

F# の歴史の観点からすると、これはコンピューターサイエンスの歴史においておおむね無関係だった伝統が融合し絡み合い始めた瞬間です:Robin MilnerとBill Gatesの世界が出会い始めました。

MSRは1992年に設立され、1997年9月に英国のケンブリッジに拡大されました。 Andy Gordon(プログラミング言語理論の著名な若手研究者)とLuca Cardelli(最初のML実装の1人で多作の研究者)が雇われ、それから1998年9月、Simon Peyton Jones(Haskellの主な貢献者)、Nick Benton(MLjの理論と創始者、後述)、Cedric Fournet(OCamlチームの中心的メンバー)、Sir Tony Hoare(世界的に有名なコンピューター科学者)、Don Syme(本稿の筆者、学部時代はオーストラリアでMLの初期貢献者であるMalcolm Neweyに指導を受け、博士時代はMike Gordonに師事し、関数型プログラミング、形式的検証およびJavaのバックグラウンドを持つ)などが後に続きました。MSRは、後にさまざまな拠点において500人を超える研究者およびエンジニアを雇用しました。

急にMicrosoftは学術的なコンピューター科学者たちであふれかえりましたが、彼らは「プロダクトチーム」とは別の「組織」の中にいました。 多くの人がMicrosoftの製品範囲に影響を及ぼしたがっていましたが、それはBell Labs(Cardelli)、DEC-SRC(Cardelli)、Compaq(Gordon)、およびIntel(Syme)では、こういう研究室はそうして「生計を立てた」という文化的な記憶があったからです。 各研究者はそれぞれ独自の観点からコンピューターサイエンスの観点について深く伝道的であり、時には学術界のコミュニティに対して部族的な忠誠心を持つこともあったのですが、その両方が、彼らが選んだプロジェクトと製品チームとのやり取りを形作りました。 形式検証と理論分野における研究者の多くは、強く型付けされた関数型プログラミングの経験がありました。 ML言語ファミリーの創始者であるRobin Milnerは、「道の向かい側」のケンブリッジ大学の部長であり、研究分野の先駆者として高い評価を受けていました。

その一方で、Microsoftは多言語ランタイムに深く関わっていて、積極的に革新するように見られたいというフェーズに入っていました。 Lightningは既に典型的な関数型言語の実装の中心的な要素(GC、JIT、バイトコード)を多く持っており、当初はWindowsオペレーティングシステムの範囲内でしたが、プログラミングで異なるテーマを統合することを約束しました。 舞台は面白いことが起こるように整えられました。 Lightningの取り組みはNGWSと改名され、その後2000年の発売時に.NETと呼ばれるようになりました。


インデックスへ戻る


  1. 著者は、小学校の登校中に司書教諭の先生がLogoについて教えてくれたことを思い出しています。 1981年のことで、私は10歳でした。プログラミング言語の世界の多様性に触れたのはあのときが初めてです。 ↩︎

  2. 後に、C# プログラマーを指して “Elvis” という語が使われました。 ↩︎

  3. Visual Basicにはガベージコレクションが搭載されていました。ですが、大きな影響力を持つMicrosoft COMプログラミング・アーキテクチャーにはGCがなく、メモリ管理には参照カウントを使用していました。 ↩︎

  4. 例えば、[Alves-Foss 1999]. ↩︎

  5. 別名 「空飛ぶPlamondon兄弟」 ↩︎