LoginSignup
7
7

Cocoaの歴史をちょっとだけ

Last updated at Posted at 2015-07-03

何年も前、CocoaはNeXTSTEPと呼ばれてました。NeXTコンピュータ社が開発し、1989年にバージョン1.0がリリースされました。バージョン2.0, 3.0は、そう遅れる事無く各々1990, 1992年に続きました。この初期のNeXTSTEPは、アプリの開発環境以上のもので、OS自体を指すものでした。つまり、ウインドウシステム、画像処理システム(ディスプレイポストスクリプト)、Machカーネル、デバイスドライバーなども含まれていました。

当時、Foundation frameworkは無く、それに代わるフレームワークも実際にはありませんでした。代わりに、動的にリンクされるソフトウェアライブラリーがあり、kitsと呼ばれてました。その主要部分は後にApplication Kitになります。現在のFoundationが担っている大部分は、関数、構造体、定数、その他の型を分類する事で代用されてました。kitsそれ自身は、現在のApp Kitよりもかなり小規模なクラスの 集まりでした。図1-11はバージョン0.9のクラス階層図(1988)を示したものです。
[図1-11 Application Kit in 1988]図1-11 Application Kit in 1988

1993年始めバージョン3.1がIntel, Spark, HP Computerへ移植されました(出荷もされました)。バージョン3.3では大きな方針転換があり、Foundation frameworkのベータ版が含まれました。このころ(1993)OpenStep推進団体も形成されました。OpenStepは、SunとNeXTが共同でNeXTSTEPの上位レイヤー部分(特にApplication KitとDisplay PostScript)をSolarisへ移植する事業です。"Open"は、両者が共同でAPI仕様を公開する事を意図して名づけられました。OpenStep APIは1994年9月に公式に公開され、初めてFoundationとApplication Kitが分離されました。また、NSの接頭辞が初めて用いられました。後にApplication Kitは単にApp Kitとして知られる様になります。

1996年6月までにはNeXT社はバージョン4.0の出荷を終えてました。それは、Intel, Spark, HPのコンピュータで動作しランタイムライブラリーがWindowsでも動きました。SunはSolarisへの移植作業を完了し、Sunの持つNetwork Object Computing Environmentの一部として出荷しました。OpenStepは、それでもSunの事業戦略上重要となる事はありませんでした。

Appleが1997年にNeXT Software(当時の名称です)を買収したとき、OpenStepはYellow Boxとなり、そしてOSX Server(Rhapsodyと呼ばれていました)とWindowsに同梱されました。その後OS X戦略の進展とともに、Yellow Boxは最終的にCocoaと改名されました。

(終わり)
俺的注釈

  • Machintosh 128k, 1984年発売

  • 最初のWWWサーバーとWWWクライアントがNeXT Cube(Basic System: 8 MB RAM, 340MB hard drive, $9,000)で動き始める、1990年

  • MFC 1.0がMicrosoft C 7に同梱されて出荷、1992年

  • OSX public beta、2000年

  • OpenStepはSun、HP、Intelが欲しがったシステムだって事だ。SunにはSunOS、IBMにはOS/2、HPにはHP-UXが有ったにも拘らず、OpenStepの移植を自社マシンへ行おうとしたってことは、OpenStepがそれだけ良くできていたってことを物語っているのかもしれない。

  • Corpland Project、1994年発表、1996年中止

  • Unix Programer's Manual 初版、1971年

  • 1 BSD, 1978年

  • 4.1 BSD, 1981年

  • 4.3 BSD, 1991年

  • Cocoaのご先祖さん(1988年)はかなりコンパクトなFrameworkだった。

  • C言語では誕生(1973年)以来、5年毎に重要イベントが発生している。1978年K&R本初版、1983年ANSI C委員会発足、1988年ANSI C採択

  • 1950年代末に人類初のプログラミング言語の誕生が相次ぐ。1956年Fortran, 1958年ALGOL58, Lisp、1959年COBOL。Smalltalkの出現はずっと後で、1973年。

  • Altair Basic(Ancestor of Microsoft Basic), 1975年

  • おまけ

書籍:Masterminds of Programming 言語設計者たちが考える事、印象に残った所

■Objective-CもC++も、Cから派生したものですが、両者はまったく異なる方向に進みました。現在はどちらのアプローチが好ましいと考えていますか?(pp. 260)

Tom:成功へと至るみちがあり、それとは別にBjarneがC++で採用したアプローチがあります。一方は小さく、シンプルで、そう、エレガントな、明瞭で明確に定義されたプログラミング言語となりました。そしてもう一方はひどく醜く、複雑で難しい、本当に問題の多い言語になりました。両者にはこのような大きな違いがあると考えています。

■やはりC++は複雑すぎますか?
Tom:もちろん。

■Objective-Cは何故名前空間をサポートしなかったのですか?(pp. 277)

Brad:私が直接関わった時の目標はSmalltalkをコピーする事であり、Smalltalkには名前空間と言う概念がなかったからです。
ご承知の様にObjective-Cとして今日知られているものは、私の作りだした言語と言うだけでなくAppleの製品でもあります。現在の私の仕事のほとんどはXMLとJavaです。

■プロトコルの概念はObjective-C特有のものだったのですか?(pp. 278)

Brad:自分の手柄に出来たらよかったのにと思います。このアイディアは、オリジナルのObjective-Cの土台(Smalltalkからイメージできる最小限度の機能です)の上に追加されたものの一つです。当時Smalltalkにはプロトコルのようなものは無く、Objective-Cにプロトコルを追加したのは現在AppleでObjective-Cを担当しているSteve Naroffです。私の記憶が正しければ、彼はSAILというプログラミング言語からプロトコルの概念を取り入れたはずです。

書籍:Corders at Work プログラミングの技をめぐる探究、印象に残ったところ

アームストロングに言わせるとオブジェクト指向言語は、「バナナが欲しかったのに、手に入れてみたら、バナナを握ったゴリラと、それにジャングルまでついてきたというようなもの」なのだ。(訳者まえがき)

俺的疑問

初期のObjective-Cにはprotocolは無かったとして、抽象クラス、仮想関数はあったのだろうか?仮にあったとして、抽象クラスを継承する時には、単一継承の原則を守らなくても良い様になっていたのだろうか?

  • 企業情報

    • AAPL(2014)

Fiscal Year ENDs: Sep 27
Income Statement
Revenue(ttm): 212.16B、2,121億ドル(約26兆円, 123円/$)
Net Income Avl to Common: 47.81B、478億ドル

  • GOOGL(2014)

Fiscal Year ENDs: Dec 31
Income Statement
Revenue(ttm): 67.84B
Net Income Avl to Common: 13.86B

  • MSFT(2015)

Fiscal Year ENDs: Jun 30
Income Statement
Revenue(ttm): 94.78B
Net Income Avl to Common: 20.00B

  • QCOM(2014)

Fiscal Year ENDs: Sep 28
Income Statement
Revenue(ttm): 26.48B
Net Income Avl to Common: 7.96B

  • INTC(2014)

Fiscal Year ENDs: Dec 27
Income Statement
Revenue(ttm): 55.87B
Net Income Avl to Common:11.70B

  • 用語

Income Statement(損益計算書)
Revenue(ttm):売上(直近:trailing 12 Months)
Net Income Avl to Common:純利益(Net Income Available to Common Shareholders)

参考:[Yahoo finance(英語サイト)を使いこなそう!]
(http://beikokukabu.com/?page_id=64)

  • オブジェクト指向、俺的理解
  1. 構造体拡張(カプセル化)
  2. 型二重性(ポリフォーミズム)
  3. 差分プログラミング(継承)
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7