Objective-Cは、優れたオブジェクト指向、シンプルさ、優雅さ、および(Cのスーパーセットとして)低レベルの機能を備えています。多くの人がGoで探してみようとするC ++のシンプルで現代的な代替のように思えるかもしれません。しかし、Cocoaおよびpost-NextSTEP環境で使用されているだけであり、この場合でも、最適な選択というよりも歴史的な理由で負担と見なされます。
なぜそれほど広く使用されていないのですか?その問題は何ですか?
Objective-Cは、優れたオブジェクト指向、シンプルさ、優雅さ、および(Cのスーパーセットとして)低レベルの機能を備えています。多くの人がGoで探してみようとするC ++のシンプルで現代的な代替のように思えるかもしれません。しかし、Cocoaおよびpost-NextSTEP環境で使用されているだけであり、この場合でも、最適な選択というよりも歴史的な理由で負担と見なされます。
なぜそれほど広く使用されていないのですか?その問題は何ですか?
回答:
IMO、Objective-Cの問題はそれほど大きな問題ではありません。マイナーな問題(特に早い段階で)と認識されている利点の欠如です。
Objective-Cは純粋なCのスーパーセットであったため、C コードはObjective-Cに簡単に移行できました。する考え方使用のObjective-Cは、しかし、Cの考え方は異なったくさん。CからObjective-Cへの移行は、コードにとっては簡単ですが、多くのプログラマにとってはまったく簡単ではありません。ACプログラマーは、Objective-Cのいくつかの新しい便利な機能を簡単に選択して、すぐに生産性を向上させることはできません。
C ++を使用すると、一部のコードの移行が少し難しくなりましたが、ほとんどのプログラマーの移行ははるかに簡単になりました。コードの詳細をすべて処理することに慣れているCプログラマーは、C ++で必要な範囲で正確に処理できます。また、C ++を使用すると、考え方を実際に変えることなく、いくつかの新機能(構造体のメンバーを自動的に初期化するためのctorの追加など)を簡単に使用できます。OOの純粋主義者の多くは、プッシュ( -物事のルックスから、多くの場合、これまでに少なくともすぐに)思考の根本的変化を、しかし、Cプログラマの多くは、並べ替えの何もせずにC ++に切り替えます。
C ++はまた見えたほとんどのCプログラマにはるかに身近な。いくつかの新しいキーワードが追加されましたが、(特に初期の段階では)コードはまだかなり馴染みがありました。「純粋なスーパーセット」ステータスにもかかわらず、ほとんどのObjective-Cコードは、ほとんどのCプログラマーにとってかなり異質に見えます。また、C ++の多くは、Cでの動作について説明および理解するのが非常に簡単です。Objective-Cに切り替えると、「私を信頼して、あなたが知っていると思うものをすべて忘れてください」と言うことができます。 」
Objective-Cの設計上の決定の多くは、特に遅いプロセッサ、メモリの制限などを備えた比較的古いマシンでは、C ++よりも(やや)遅くなりました。 C ++は、誰でも、誰でも自由に実装できました。
これらはすべて、C ++が十分に早く採用されるようになり、「クリティカルマス」をかなり迅速に達成しました。そのため、すでに広く使用されていて、量。
Objective-Cはそのポイントに到達したことはありません。実際、Appleがシステムの開発を望んでいる人にそれを強制することによってそれを復活させたとき、それはあいまいさへのフェードへの道を順調に進んでいました。しかし、Appleの市場シェアは、それを実際にクリティカルマスにするほどには大きくありません。これは、Appleがそうする場所/理由によってのみ「デフォルト」の選択です。
また、少なくとも私の意見では、Objective-CのSmalltalkのようなオブジェクトモデルは、事実上、C ++よりもJavaとの直接的な競争相手であることを付け加えます。はい、まだCの基盤があり、はい、まだ別の言語を使用せずに低レベルのコードを書くことができます-しかし、純粋なCと実際のObjective-Cは、2つの完全に異なる言語よりも単一の言語のように十分に異なる両方が単一のコンパイラーによって処理されることがあります(ただし、2つがJNIのようなものが参加しなくても互いに通信できると便利です)。
基本的に、Appleはしばらく前からObjective-Cの原動力となっています。
現状では、AppleはObjective-Cを完全に制御し、ニーズに応じて言語を駆動しますが、Apple以外のデバイスでObjective-Cを実行することに関心を持つ組織はこの惑星にはありません。 .NET / Mono、C ++、またはJavaによって提供されるエコシステムにリモートで対抗することさえできる、標準ライブラリとツールキットを開始します。