ほとんどのブラウザがC ++で開発されているのはなぜですか[クローズ]


99

ほとんどの一般的なWebブラウザ(Firefox、Chrome、Safari)はC ++を使用して開発されているようです。なぜそうですか?


28
Firefoxは、C ++だけでなく、C ++とJavascriptで作成されています。
ジェシーミリカン

1
この質問には正確であると仮定して、いくつかの回答がありそうです(Firefoxに関するJesseのコメントに注意してください。これら3つとIE以外にも多くのブラウザがあります)。私はそれが生産的なものだとは思わない。
デビッドソーンリー

1
これはこの質問の正しいグループですか?
マーティンヨーク

6
@JesseはjsインタープリターがC ++で書かれていませんか?それはちょっとC ++になりますよね?(私は間違っているかもしれません。)
カンブラカ

5
@cambraca、そのロジックでは、すべてがアセンブリコードです!
フアンメンデス

回答:


165

質問をする別の方法は、ブラウザにどのようなサポートが必要ですか?短いリストは次のとおりです。

  • 解析のサポート([X] HTML、CSS、および[ECMA / Java] Scriptの意味を理解するために必要)
  • ツリーウォーキング/解釈機能(UIの解析および構築の一部)
  • 高速グラフィックスのサポート
  • 高速ネットワーキング
  • より高度なブラウザの場合:プロセスを制御し、ページ間でメモリを分離する
  • サポートされているすべてのプラットフォームで動作する必要があります

ほとんどの言語には、ある種の解析サポートがあります。C、C ++、C#、Javaなどのパーサージェネレーターがあります。ただし、CとC ++は、残りの選択肢についてかなり長い年月がかかっているため、アルゴリズムと実装はより成熟しています。Javaでアクセラレートされたグラフィックスにアクセスするのは、ネイティブの拡張機能がなければ機能しません。C#上のWPFは、高速化されたグラフィックスへのアクセスを提供しますが、このテクノロジーで構築された本格的なブラウザーを使用するにはあまりにも新しいものです。

ネットワーキングは、実際にはJavaやC#よりもC ++を選択する理由の最も少ないものです。その理由は、ページの表示を続行する残りの処理よりも通信が何倍も遅いためです。ワイヤの生の速度が制限要因です。JavaとC#の両方は、C ++と同様に、ノンブロッキングIOサポートを備えています。したがって、この分野では明確な勝者はいない。

なぜJavaではありませんか? JavaでUIを構築しようとしたことがありますか?それはそうであるので、それはそこにある他のものと比較して面倒で遅く感じます。ここでは、加速グラフィックスも大きなマイナスではありません。Javaのサンドボックス化は非常に優れており、ブラウザを正しく使用すればブラウザのセキュリティを向上させることができますが、設定して動作させるのは苦痛です。グラフィック形式のサポートは、ほとんどの最新のブラウザよりも遅れていることは言うまでもありません。

なぜC#ではありませんか? 唯一のターゲットがWindowsである場合、C#が実際に適切な表現を作成する可能性があります。問題は、他の何かをサポートするときに発生します。Monoは、このタスクに十分なクロスプラットフォームと見なされるほど十分に追いついていません。特に、高速グラフィックサポートとWPFを使用しています。それが変わるのにどれだけ時間がかかるか誰が知っている。

なぜCではないのですか? ほぼすべてのプラットフォーム(組み込みデバイスを含む)用のCコンパイラがあります。ただし、Cがあなたのためにしないことはたくさんあります。APIのすべての最下位レベルにアクセスできますが、C開発者の大半はGUIを使用しません。C GUIライブラリでさえ、オブジェクト指向の方法で記述されています。UIの話を始めるとすぐに、オブジェクト指向言語の方が理にかなっています。

なぜObjective Cではないのですか? 唯一のターゲットがAppleである場合、それは非常に理にかなっています。ただし、ほとんどの開発者はObjective-Cを知らず、それを学ぶ唯一の理由はNeXTまたはAppleボックスで作業することです。Objective-Cで任意のCライブラリを使用でき、多くのプラットフォーム用のコンパイラがありますが、作業する人を見つけるのは簡単ではありません。知るか?たぶん、Appleはこの認識された欠陥を好転させることができます。

なぜC ++なのか? ほぼすべてのプラットフォーム用のC ++コンパイラがあります。ほとんどすべてのGUIライブラリにはC ++インターフェイスがありますが、より良い場合もあれば、まったく異なる場合もあります。たとえば、MicrosoftのATLはwin32 C関数呼び出しやMFCライブラリよりもはるかに優れています。UnixにはGTK用のC ++ラッパーがありますが、AppleのObjective-C GUIライブラリの周りにC ++ラッパーがなかったら、驚くでしょう。プロセス管理は、JavaやC#よりもC ++内で簡単です(これらの詳細は抽象化されています)。知覚される速度は、生のパフォーマンスよりもハードウェアアクセラレーションによるものです。C ++は、生のC(バウンド文字列など)よりも多くのことを処理しますが、それでも自由に調整できます。

とりあえず、C ++は代替案を排除しています。


4
AppleおよびNeXT以外のプラットフォームには、GNUStepコレクションがあります。それはだ、主にココアとの互換性、およびどこでも気の近くに実行されます。
greyfade

5
JavaがGUIにSwing(くだらないライブラリ)を使用してはならないことに注意してください。たとえば、Qtバインディングがあります。
アント

2
よるとmy.opera.com/kilsmo/blog/2008/01/29/opera-is-not-based-on-qtオペラれていない Qtベース
ANTO

2
OperaがQtに基づいているとは決して言いませんでした。私は、非常に多くの優れた無料オプションがある場合、非無料のブラウザは本当に販売するのが難しいことを意味するつもりでした。
ベリンロリチュ

7
パーサージェネレーターの可用性は、実際にはそれほど重要ではありません。すべてのブラウザーで、HTML、XML、およびJSパーサーは手書きであり、CSSは一部にあります。
gsnedders

89

私はこれについて小説を書くことを決めました。人々がそれをglossめ、私に賛成してくれることを期待して。いや、いや、冗談だよ!私はあらゆる言葉で苦しみました。すべての言葉、私はあなたに言います!

「なぜ」の前に「いつ」を尋ねる

すべての主要なWebブラウザーは、その起源を90年代までさかのぼることができます。KonquerorはSafariとChromeになりました。NetscapeはFirefoxになりました。IEとOperaは引き続きIEとOperaです。これらのブラウザはすべて、既存の企業で15年間有利なスタートを切っています。

1995年頃に近代的なブラウザが誕生した頃に利用できた、受け入れ可能なクロスプラットフォーム(Windows / Mac / Unixおよびさらに悪い)言語に名前付けることをお勧めします。C / C ++以外でコアをビルドするには、おそらくコンパイラとプラットフォームライブラリをビルドまたは購入して変更する必要がありました。

今日はどう?代替手段は何ですか?

楽しみのために、今日の問題について考えてみましょう。はい、代替手段はありますが、まだ大きな問題があります。

言語の選択には、少なくとも次の問題があります。

  1. 知識の問題-開発者の採用/トレーニングまたは貢献者の誘致
  2. 組織/社会問題-言語の受け入れ
  3. 言語の実装:速度、プラットフォームサポート、ツール
  4. 言語力

1:知識の問題

その言語を知っているか、それを学ぶことができる人々をどこで手に入れますか?これは、OCaml、F#、Haskell、Common Lisp、Dのような、ブラウザをうまく書くのに十分なほど高速で高レベルであるが、たぶんあなたが寛容であっても(10k-100kの範囲で)フォロワーが少ない言語の障害ですすべての愛好家や学者を数えます。

2:社会的/組織的な問題

上記のカーゴカルトの答えの結果:

  • C、C ++、C#、またはJavaを使用していないオープンソースのブラウザーは、貢献者にとって困難を伴うと思われます。
  • C、C ++、C#、またはJavaを使用しないプロプライエタリなブラウザは、ほとんどの組織でプロジェクトマネージャーを激しく怒らせます。

3.技術的な問題

現代であっても、ページのレンダリングとJavascriptの実行の計算集約的な部分には、かなり高速な言語が必要です。GUI要素などを構築するための高レベル言語(たとえば、C ++およびJavascriptのFirefoxアプローチ)でそれを補うこともできますが、言語間の密接な統合が必要です。「わかりました、C#とLua」とは言えません。CまたはC ++を基本言語として選択しない限り、おそらく自分でそのブリッジを構築してデバッグする必要があります。

クロスプラットフォーム開発もワームの別のバッグです。C#またはF#を使用して、GTK#とMonoが将来にわたって正常に機能していることを確認できます。Common Lisp、Haskell、OCamlを試すことができます... Windows Mac および Linuxですべてが動作するように頑張ってください。

4.言語力

そのすべての後、膨大な量の機能を構築する必要があるため、低レベルの言語を選択する場合、以前よりもさらに膨大な数のコーダーが必要になります。約15年の間、誰も最初からブラウザを最初から構築したことがないことに注意してください。それは部分的には(驚き!)難しいからです。

具体的には、Javascriptインタープリターを持つことは、問題3(1つを取得)または問題4(1つを構築)です。

結論:

3プラットフォーム(Windows / Mac / * nix)ブラウザーを今日(2011年初頭)開発した場合、選択肢は何ですか?

  • C:(2)を参照してください。誰もがC ++をうでしょう。クロスプラットフォームツールキットの選択またはビルド(1、2、3、4)をお楽しみください。(4)も参照してください。安定した安全なブラウザの構築を楽しんでください。
  • C ++:クロスプラットフォームツールキットの選択またはビルド(1、2、3、4)を楽しんでください。楽しんでください(4)安定した安全なブラウザを構築してください。
  • CまたはC ++およびHLL:最善の策。動的言語であなたの毒を選んでください。(1)および(2)を参照してください。良い言語が多すぎて、それぞれのフォロワーが少なすぎます。(1、2、3、および4)ツールキット。
  • Java:中間管理職を喜ばせる必要がある場合は、2番目の最善策です。(4)を参照してください。Javaで巨大なものを構築するには、このリストの他のどのコードよりもはるかに多くのコードが必要ですが、C
  • Scala:(4)でJavaを破りました。(1)と(2)が、それが流行しています。
  • CとJavascript:特別な場合として、Javascriptインタープリターを既に構築または取得して同化する必要があるため、これは魅力的です。(したがってFirefox。)(1、2、3、および4)ツールキット。Mozillaの人々は独自のIIRCを構築しました。
  • C#:(3)をお楽しみください。あなたはおそらくGTK#に固執しているでしょうが、それがいかに優れているか、またはGTK#とWindowsフォームの上に独自のレイヤーとレンダラーを構築しています。
  • Ruby / Python / Perl / Racket / Lua / Erlangeなど:クロスプラットフォームウィジェットライブラリと速度について(3)があります。ムーアの法則は(4)であなたと一緒です。ブラウザに対する需要の高まりはあなたに対するものです。
  • OCaml、Haskell、Common Lisp、Smalltalk:(1)および(2)スペード。おそらく、速度の問題はありませんが、(3)クロスプラットフォーム開発では、独自のすべてを構築するか、何らかの方法でC / C ++ライブラリにブリッジする必要があります。
  • Objective-C:(3)ここでクロスプラットフォーム開発がどのように機能するかわかりません。

今後数年で別の主要なブラウザが登場するのを見ると、オープンソースであろうとプロプライエタリであろうと、CまたはC ++と動的言語(Firefoxのような)で書かれるに違いない。

編集(2013年7月31日):Hacker NewsのコメンターはRust and Goに言及しているようです(特に私の答えとは関係ありません)。これは漠然と「その他の高速」バケットに分類されます。この言語のリストを平等主義で最新のものにしようとすることは負けの戦いになるので、代わりに執筆時点での代表的なサンプルと呼んでいます。


4
特定のブラウザが最初に開発されたときも重要な役割を果たすことに注意してください。
スパーキー

3
IEは今日、クロスプラットフォームではないかもしれませんが、確かにかつてそのようなものであり、現在の市場シェアはほぼ確実に(少なくとも部分的に)そのクロスプラットフォーム機能から派生していることに注意してください。
ジェリーコフィン

2
IE IE4の頃クロスプラットフォームであったことに注意してください。
ジェイソンフルーツ

2
+1の場合。それが唯一の理由です。誰かが今日ブラウザプロジェクトを開始した場合、C ++を使用することはほとんどないでしょう。
ヘンリー

4
@ Henry、C ++の使用を除外する可能性は低い。答えは、C ++がまだパズルの一部であることに注意しています。
匿名タイプ

36

速度

ugいですが、C ++は、高速なアプリケーションとコードの完全な制御が必要なときに使用するものです。

これが、Officeのゲーム、非コアパーツ(ファイルインポーターなど)などがまだC ++で記述されている理由です。

MSaltersからの応答を含めるように編集されました


3
ゲーム以外では、これらの理由がこれらのアプリがC ++で記述されている理由だとは思わない。あなたが直接の知識を持っているなら、私は間違っていることが証明されてうれしいです。
ヘンリー

2
直接の知識?VS 2010、Office 2010はどちらも巨大なアプリスイートですが、動作は非常に高速です。どちらにもかなり大きなCOMレガシーとMSの遺産がありますが、パフォーマンスは依然としてユーザーにとって最も重要なものです。
匿名タイプ

8
オフィスには他に何が書かれますか?VB?CおよびC ++は、Microsoftが、大きなアプリケーションを書くための唯一の選択肢であるC#してください言ってはいけない。
トビー・アレン

4
@Victor:VS2010のソースを見たことがないので、完全にC#で記述されている可能性があります。
ライアンヘイズ

3
オフィスがC#アプリである場合、元のリボンがMFCコントロールであったのはなぜですか。C#が開発されるまで何年も待たなければなりませんでした。これらの巨大なアプリはいずれもC#で書き換えられず、WPF gui(VS2010など)でラップされ、古いコードの大部分が再利用されます。MSでさえ、最大のアプリを完全に書き直すためのリソースを持っていません。機能を追加するのに時間を費やしたいのではありません。
gbjbaanb

17

移植性

私は推測することしかできませんが、あなたは複数のプラットフォームを対象とするソフトウェア製品について言及しており、C ++は任意のプラットフォームにコンパイルできます。


+10-未加工のパフォーマンス以外に、IEを除くほとんどのブラウザがC ++にある本当の理由だと思います。ほとんどのブラウザは複数のプラットフォームで動作し、同じレベルで実行でき、クロスプラットフォーム互換性のある言語/フレームワークはほとんどありません。
ジョーダンパーマー

最初はこれも考えましたが、WebブラウザーのようなGUI中心のアプリケーションの場合です。C ++は実際、Javaと言うよりも他のオペレーティングシステムにはるかに移植性がありますか?
JohnFx

1
ブラウザは本当にそのGUI中心ですか?
クリスヴァンバエル

@JohnFx-正しい、GUI部分はおそらくそれほど移植性がありません。しかし、たとえばブラウザアプリケーションの中心は、HTMLの処理、DOMツリーの作成、javascriptの解析、およびそれを十分に高速に実行することです。適切に設計されたアプリケーションは、同じコアを簡単に共有し、プラットフォームごとに異なるUIコードを持つことができます。そして、はい、C ++はJavaよりもはるかに移植性があります(ただし、GUIはありません)。これは、C ++の場合、CPUをターゲットとするコンパイラのみが必要だからです。Javaの場合、完全なフレームワークが必要です。
ピート

HTML処理の本質のほとんどは、WebKitのようないくつかのコアツールによって行われることは私の理解でした。おそらく、ブラウザ全体がC ++であるためでしょうか?
JohnFx

13

(私は約5年間Firefoxに取り組んでいます。)

質問者は、Firefoxのコードの多くがC ++であり、実際、コード行で数えればC ++が大半であることは正しいです(ただし、JavaScriptがたくさんあり、JSはC ++より簡潔)。

しかし実際には、Firefoxは多くの異なる言語で書かれています。

  • C ++
  • C(NSS、NSPR、インポートしたさまざまなライブラリ)
  • x86およびARMアセンブリ
  • JavaScript
  • XUL(HTMLに似たマークアップ言語)とCSS
  • Objective C(MacOSのみのコード)
  • Java(Android専用コード)
  • 複数のカスタムインターフェイス定義言語(XPIDL、IPDL)
  • WebIDL(別のインターフェイス定義言語。ただし、これはカスタムではありませんが、コードジェネレーターはそうです)
  • Python(コードジェネレーター)

私は確かにいくつかを忘れています。

このリストは、Webブラウザーの背後にある信じられないほどの複雑さを示唆しているため重要です。

はい、Firefoxには多くのC ++コードがあります。そして、それは、C ++がNetscapeが設立されたときのこの種の最高の言語であったという事実と関係があります。しかし、私たちがやっていることの多くにとって、今日より良い言語は存在しないとも私は主張します。

ライブラリのエコシステムがこれほど強力な言語は他にありません(外部コードに大きく依存しています)。C ++のようなフルスタック制御を提供する言語は他にほとんどありません(カスタムヒープアロケーターを定期的に調整し、高速化またはメモリ使用量を削減するためにあらゆる種類のメモリ安全でない処理を行います)。他の言語を使用して、ほとんどの標準ライブラリを適切な方法で再実装することはできません(ニーズに合わせて独自の文字列とコレクションを実装しています)。独自のガベージコレクタを実装できる他の言語はほとんどありません。等々。

C ++は私たちが行うことの多くにとって明らかな選択ですが、Javaでブラウザーを作成し、必要に応じて独自のJVMを作成することを提案する人々は、何かに取り組んでいます。これは基本的に私たちが行うことですが、JavaではなくJavaScriptを使用します。もちろん、ブラウザの多くはJavaScriptで書かれていません。しかし、驚くべき量です。


これらのメモリ安全でないアクションはセキュリティ問題の原因ですか?
デミ

12

まあ、あなたはそれらの製品の開発者に直接答えを得るように頼む必要がありますが、それは親しみ(それらの開発者が最もよく知っていたものです)、パフォーマンス(バイトコードではなくネイティブバイナリにコンパイルする)、そしてツール(Cのような言語と比較して、C ++はSTLのような手間のかからないガジェットでいっぱいです)。


10

歴史

各ブラウザには、言語の選択に影響を与えるいくつかの歴史があります。

たとえば、ChromeとSafariはどちらもWebKitに基づいています。WebKitは、KDEプロジェクトのKHTMLパーツに由来しています。KDEはもともと(一部)Qt GUIツールキットのデモンストレーションとして作成されたため、KDEは全体としてC ++プロジェクトです。当時、すべての新しいKDEプロジェクトは完全にC ++で記述されていたため、KHTMLの論理的な選択でした。その後、他のGUIツールキットを使用するために移植されました。

OperaのPrestoエンジンは、パフォーマンスと小さなバイナリサイズを考慮して作成されました。C++が論理的な選択でした。

MicrosoftのIEはActiveXコンポーネントのコレクションとして書かれており、COMバインディングを持つ任意の言語で記述できますが、C ++のサブセットで記述されている可能性があります。コードベースの大部分は既にその言語で記述されているためです。

NetscapeのMozillaは、移植性が彼らの主要な関心事だったため、おそらくC ++で書かれました。CおよびC ++コンパイラは(事実上)遍在するため、論理的な選択でした。

これらの選択に固有の技術的理由はありません。それは「当時は良いアイデアのようでした」。


8

CとC ++でのネットワークは、必要に応じてライブラリを使用する必要がないため、最適化が容易です。C ++がCの利点を可能にするため、C ++が最適な言語であると思われます。

  • 速度
  • 最適化
  • ある程度の移植性
  • コンパイルされた言語、解釈されない

OOPの利点と相まって:

  • 拡張性
  • より簡単な視覚化
  • 文字列処理やデータ構造などの重要ではないタスクに対するライブラリサポートの改善

JavaやC#にはこれらの利点はありませんか?
ニプナ

5
両方でアプリを開発しましたが、ネットワーク機能が限られている場合は問題ないと思います。ただし、ブラウザのようにネットワーク部分を中心にしたものは作成したくないでしょう。何が起こっているかをもっともっと制御したいし、コンパイルされた言語が欲しい。
マイケルK

JavaとC#もコンパイルされます。C#は、ブラウザの重要な部分であるGUIの構築に関して、Javaよりも優れています。Javaには移植性があるという利点があります。JavaとC#の両方がターゲットプラットフォーム上で再コンパイルされます。これにより、おそらく速度が向上します。
ベリンロリチュ

5
いいえ、それらは解釈されます。バイトコードにコンパイルし、仮想マシンで実行します。そのVMには、その命令セットからネイティブVMへの1対1の対応がありません。
マイケルK

1
これ以上逆にできませんでした!ネットワーキング; あなたはカールするためにシェルアウトすることができ、ブラウザは同じくらい速くなります。ネットワークCODEは低速ビットではありません。そして、それがライブラリでない場合、ソケットとは何ですか?文字列処理; この任意のHTMLブラウザの中核である、それは非クリティカルではないと私はC ++ C.以外のより悪い文字列処理を持つ単一の言語を考えることはできません
ヘンリー

4

ブラウザの最初のラウンドのコードの最初の行が記述されたとき、C#とJavaは存在しませんでした。Rubyもそうではありませんでした。Pythonはあったかもしれませんが、その時点ではまだ小さな自作プロジェクトでした。

基本的に、高速で多くの異なるプラットフォームで実行できるブラウザを構築できるC ++ 以外の選択肢ありませんでした。

では、なぜC ++で書かれたのでしょうか?なぜならそれが彼らが書くことができる唯一の利用可能な言語だったからです。


1
「新ラウンド」の意味がわかりません。しかし、FFとIEのコードベースは90年代半ばに遡り、ほとんどの新しいブラウザーはレンダリングエンジンの1つを使用します(たとえば、ChromeはWebKitを使用します)
GrandmasterB

2
FFはレガシーのNetscapeコード(つまり90年代半ばの肥大化)を取り除き、独自のレンダリングエンジンを実装しました。WebKitは比較的新しいレンダリングエンジンでもあります(ChromeとSafariで使用)。IEには、従来の肥大化がまだ残っており、それが引き続き重要視されています。だから私はここで同意しない。
ベリンロリチュ

2
少なくともウィキペディアによると、geckoとwebkitの両方は1998年頃に始まりました。C#はその頃はありませんでした。だから私は他の言語が適切だったのか分からない。たぶんパスカル。
GrandmasterB

1
@Berin Loritsch:はい、しかし、彼らは既存のコードをすべて捨てて、最初から(すべてで)やり直すだけでした。さらに、FFについて固執するという決定に十分なC ++を十分に知っている/知っている人は、とにかく別の言語に切り替える可能性が高いでしょう。
ジェリーコフィン

2
@Berin Loritsch Rubbish。FFは依然としてGecko(1997)に基づいており、Webkitはkhtml(1998)に基づいています。
ヘンリー

4

なぜなら、他の言語で書かれたブラウザ(たとえば、Javaで書かれたHotJava)は、市場で十分な受け入れ/浸透が達成されたことがないからです。

HotJava の現在のイテレーション(または最新の-かなり長い間更新されていない)については何も言えませんが、試してみたところ、市場浸透の欠如は(少なくとも私には)非常に理解しやすいようでした-それはく、遅く、かなりの数のWebページと互換性がありませんでした。最終的に、それはパンアウトすることのない前提に基づいているように見えました:Webは主にJavaアプレットで構成され、HTMLはどのアプレットをどこに表示するかを伝えるラッパーにすぎません。

その一部はおそらく歴史的なものでもあります。大規模なWebブラウザのほとんどは長い間使用されてきました。それらが最初に書かれたとき、景観は大きく異なっていました。C++は「ホットな」新しい言語であったため、多くの新しい開発に使用されていました。ブラウザは、最も頻繁に使用されるソフトウェアの一部になりましたが、当時の多くのブラウザは忘れ去られていました。

言語の表示された「態度」にも効果があると思います。C++(以前のCと同様)は常に実用性と実用主義を強調してきました。その基本的な態度は、実用的でもあるプログラマを引き付ける傾向があります。他の多くの言語では、優雅さなどに重点を置いていますが、そうすることで、同じように考えるプログラマーを惹きつけています。それに関する問題は、私が「Lisp効果」と呼ぶものです。症状は次のとおりです。

  1. 最もささいなことの最もエレガントな実装に関する無限の議論。
  2. 機能をフリーズし、出荷可能なものを完成できない(欠陥があっても)
  3. 妥協できない。私に反対する人は誰でも間違っているのではなく、愚かか悪のどちらかでなければなりません。

他にもありますが、一般的なアイデアは得られます(そして、はい、ある程度誇張していますが、ある程度だけです)。はい、あなたが得るコードのいくつかは驚くほど美しいです-しかし、チャンスはそれが6ヶ月遅れており、システム内の(あるはずの)コードの他のすべての部分とほとんど互換性がなく、あなたがそれを受け取るまでに他の何かがあなたがそれをまったく使用できないほど十分に変化したかなり公平なチャンス。

間違いなく正常に動作する言語もありますが、(正しいか間違って)単純にブラウザを記述したことのある市場シェアをまったく持っていません(または重要な時に持っていませんでした)。完全なブラウザのサイズと複雑さを考えると、多くの人とブラウザを開発するのにかなりの時間がかかります。この種の投資により、多くの人は開発ツールなどについて比較的保守的になります。


1
WRTポイント3は、私は間違いなくその書き込みネットワーク向けのCファミリのソフトウェアは、資格なしで、アサートしますです、それが伴いますので、愚かまたは悪のどちらかのどちらかに広くセキュリティを導入することが知られているシステムでの作業無意識のうちに(愚か)または故意に(悪)穴になるユーザーに害を及ぼします。これは道徳的には、ターゲットが描かれた兵士の鎧を与えることに相当します。
メイソンウィーラー

9
@メイソン:問題の偏見の正確な表示は確かに高く評価されています。
ジェリーコフィン

2
@メイソン:ナンセンス。1つのセキュリティホール(すでに修正されていますが、多くのシステム管理者が更新されたコードをインストールすることを気にしていませんでした)は、同じ言語で記述されたすべてのコードが「害を及ぼす」などの証拠にさえ近づきません。(一例として)OpenBSD は、PascalベースのMacOSのバージョンよりもはるかに優れたセキュリティ履歴を持っています
ジェリーコフィン

5
@メイソン:いいえ、そうです。最初に、Morrisワームはを使用するプロラムを悪用しましたgets。これはひどい機能ですが、やむを得ないことはほとんどありません(また、言語やそのようなものに「根本的」ではありません)。第二に、C ++はどの場合でもCと同じ言語ではありません。第三に、OpenBSDはセキュアなソフトウェアがCで作成でき、Cで作成されていることを非常にうまく示しています。人。
ジェリーコフィン

6
@Mason:バッファオーバーランgetsは、使用しているバッファの長さを渡さないという単純な結果です。言語に関する基本的なことは何もありません。Pascalでも同じことができます(そして私も持っています)。インテリジェントな攻撃者に対して安全なソフトウェアを書くことは、言語に関係なく簡単ではありません。3つのすべての経験に基づいて、それはパスカルよりもCで少し簡単だし、たくさん C.よりもC ++で簡単に
ジェリーの棺

3

カーゴカルトプログラミング。「C ++は高速」という認識はまだあります(物事の速度を落とす、ひどく壊れたオブジェクトモデルのようなよく考えられていない言語レベルの機能にもかかわらず)人々はブラウザを高速にしたいので、C ++で記述します。 。

健全な世界では、ネットワーク対応ソフトウェアを作成する人は、C固有のセキュリティ問題のすべてに付随する言語を使用することを考えるだけで恐ろしくなり、実際にそうすることは刑事過失の行為になります。(過去15年ほどでさまざまなブラウザーに対して発見されたバッファーオーバーフローエクスプロイトの数だけを見てください!これらのコーダーが責任を負うのは何百万ドルの損害ですか?)

高速バイナリを作成できるコンパイル済み言語は他にもあります。問題は、彼らがCファミリーと同じ露出をしていないことであり、私たち全員がそれのために苦しむ必要があります。

おもしろい事実:1988年にMorris Wormがインターネットにヒットするまでに、CでのOSとネットワーク対応ソフトウェアの記述に関する問題を最終的に実証しました(これらは言語の固有の欠陥であるため、今日でも解決されていません) 、)Appleは、これまで数年にわたり、Pascalで書かれた世界でこれまでに見てきた最も先進的なオペレーティングシステムをリリースしてきました。


15
え?私はMac OSが好きでしたが、世界で見た中で最も先進的なOSと呼ぶのは馬鹿げています。UNIXやVMSと同じ球場ではなく、IBMのビッグアイロンシステムはもちろんのこと、シングルユーザー、仮想メモリなし、プロセス管理の制限などもありませんでした。確かに非常に優れたウィンドウシステムを備えていましたが、それでもXerox Parcから派生したものであり、多くの学術プロジェクトでした。また、Mac OSの多くは実際にはM68kアセンブリで書かれていると思います。Pascalが主要なアプリケーション言語になると予想されたため、ライブラリはPascal関数呼び出し標準を使用しました。
チャールズE.グラント

5
2000年代以前のAppleのオペレーティングシステムは、MSの同等のものよりも安定していませんでした。90年代に2つのプロジェクトを作業していたとき、1つはMac OSで、もう1つはNTで、同じ数のクラッシュと再起動が必要でした。現在、これらはすべて何らかのCベースの言語です。(Appleは現在のものにObjective-Cを使用しています)。Cベースの言語ではセキュリティがより難しくなる可能性がありますが、別の言語を使用しても突然安全になるわけではありません。
ベリンロリチュ

13
@Mason、当時Macがこれらの機能を必要としなかったという事実は、それらが重要でないことを意味しません。Apple OSは世界で最も先進的であるとの無条件の声明を発表しましたが、明らかにあなたが本当に意味したのは、最も洗練されたユーザーインターフェイスを備えているということでした。それは防御可能な声明ですが、あなたが書いたものよりもそれほど壮大ではありません。使用可能なGUIの作成は困難です。信頼性の高いページメモリシステムの作成は困難です。一方が他方よりも重要だと言うのはばかげています。私たちが知っている消費者レベルのコンピューティングは、今では両方なしでは存在できません。
チャールズE.グラント

5
@Mason:あなたの経験は、多くの点で、誰からも、そして他の誰からも(明らかに)異なっています。:-)
ジェリーコフィン

3
@Mason:Mac OSXより前のバージョンを「高度」と呼んでいます。Apple OSは、特にその非常に初歩的なファイルシステムのために、常にクラッシュの原因でした。
匿名タイプ

2

システムレベルのAPIへのアクセス

すべてのブラウザーは、ある時点でOSと連動する必要があり、主要なOSのほとんどは、確立されたCおよびC ++ APIとライブラリを備えています。通常、ラッパーを作成するよりも、CまたはC ++でこれらのAPIを使用する方が簡単です。


0

コントロールと移植性

ほとんどの速度引数はどちらの方法でも使用できますが、何かを実行する方法を正確に制御する必要がある場合は、多くの高レベル言語がパレードに雨を降らせます。これには例外がありますが、それらのほとんどは、ブラウザのようなものを数えるほど十分なクロスプラットフォームではありません。


0

レガシー互換性-古いコードを捨てることはできません

C ++と他の言語のメリットとは何の関係もありません。Haskellのような言語で、より優れたブラウザーをゼロから確実に作成できます。この重要なプロジェクトは、パフォーマンス特性を保証する必要がある場合、独自のJVMを実装することさえできます。Facebookが独自のPHPコンパイラ/オプティマイザーを作成した方法と同様です。

非標準のマークアップで壊れるブラウザは、役に立たないよりも悪いです。レガシーコンパットは非常に重要かつ複雑であるため、書き換えはオプションではありません。多くのお金と時間は、戦闘でテストされたセキュリティなどに投資されています。その投資を捨てることはできません。繰り返しになりますが、Facebook がまだ PHPで記述されているように。


なぜ人々はこれに賛成しないかもしれないのか理解できます... それは変だ。こちらが+1です。
トーマスエディング

(小さな)ポイントがありますが、最初の文はそれを捨てます。もちろん、C ++と他の言語のメリットにも関係しています。
Chiel 10 Brinke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.