Objective-CがCocoa環境を超えて広く使用されないのはなぜですか?


24

Objective-Cは、優れたオブジェクト指向、シンプルさ、優雅さ、および(Cのスーパーセットとして)低レベルの機能を備えています。多くの人がGoで探してみようとするC ++のシンプルで現代的な代替のように思えるかもしれません。しかし、Cocoaおよびpost-NextSTEP環境で使用されているだけであり、この場合でも、最適な選択というよりも歴史的な理由で負担と見なされます。

なぜそれほど広く使用されていないのですか?その問題は何ですか?


5
「歴史的理由」とは「多くの図書館」を意味する

@vartecあなたはそうすることを強制されていません。たとえば、MonoTouchを参照してください。C#です。ああ、それからObjective-C、C、C ++に関するAppleのルールがありますよね?彼らはすでにそれを放棄しました。
右折

回答:


28

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のようなものが参加しなくても互いに通信できると便利です)。


優れた歴史的レビュー。90年代にホワイトボックスNextSTEPマシンのObjective-Cで最初にコーディングしましたが、大学ですでにC ++を教えられていて、Objective-Cの奇妙な構文を嫌っていました。このように、私はあなたがここで言うことの多くを感謝することができます。
マークブース

おかげで、明らかにそれは私が探していた答えです。リッチーは、チームワークを可能にするためにCを作成しました。「Cは風変わりな欠陥があり、大きな成功を収めています」; この引用は、多くの人が理解できるようにフラットでシンプルな言語を作成しなければならないことを意味し、「素晴らしい」言語でなければならないという意味ではありません。objcについて不満を言う人はいません。「人々が文句を言う言語があり、誰も使用しない言語があります」bjarne stroustup。少なくともwindowsは、企業のクラスタファックでもコンピューター業界を成長させることができました。開発者を気にしないので、アップルが失敗することを願っています。
jokoon

暴言は申し訳ありませんが、開発者であることは新しいことを学ばなければならないことを意味しますが、既に知っていることをすべて忘れなければならないという意味ではありません。objcのメッセンジャー機能は、最適化されたASMコードで作成されていると聞きました。なんて混乱だ、どうやって開発者にそれを理解するように伝えることができますか?ドライバーとカーネル開発者はどうですか?Macは運転に使用する単なるキャデラックです。高価な高価なものなので、メールをチェックしたり、DVDを視聴したりできます。そのことにソフトウェアを追加したいですか?幸運を祈ります。既存のすべてのソフトを忘れて、アップルウェイTMを行います。
jokoon

+1、優れた説明!
チャン

11

基本的に、Appleはしばらく前からObjective-Cの原動力となっています。

  • 最後のバージョンは実質的に放棄されていますが、Objective-C 2.0は実際にコアの基礎クラス/プロトコルの一部にますます結び付けられ始めています。つまり、言語機能とフレームワークの間に固有のリンクがあり、NSFastEnumerationが頭に浮かびます、オブジェクトがforループに適切に応答するために必要です。これは、言語とプラットフォームの間のリンクが拡大していることを意味します。
  • Cocoaに代わる実質的な代替手段は事実上ありません。そして、Cocoaは、ますます多くのOSX機能に依存し始めています。技術的には、任意のコアフレームワークを備えた任意のOSでObjective-C実装を実行できますが、他のプラットフォーム向けの最新のものはほとんどありません。

現状では、AppleはObjective-Cを完全に制御し、ニーズに応じて言語を駆動しますが、Apple以外のデバイスでObjective-Cを実行することに関心を持つ組織はこの惑星にはありません。 .NET / Mono、C ++、またはJavaによって提供されるエコシステムにリモートで対抗することさえできる、標準ライブラリとツールキットを開始します。


3
GNUStepがあります。彼らはAppleに遅れを取らないようにしているが、私は彼らがどれだけうまくやっているかをしばらくチェックしていない。
ヨハンソン

1
また、Cocotronもあります。
ysdx

1
この回答が書かれた時点では、Apple以外のプラットフォームでObjective-C 2.0を実行することは実際には不可能でした。とにかく、その後多くの努力が行われ、GNUstepを使ってFreeBSDでObjective-C 2.0をかなりスムーズに実行できるようになりました。
エオニル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.