Mengapa sebagian besar browser dikembangkan di C ++ [ditutup]

99

Sepertinya sebagian besar browser web umum (Firefox, Chrome, Safari) dikembangkan menggunakan C ++. Kenapa begitu?

Nips
sumber
28
Firefox ditulis dalam C ++ dan Javascript, bukan hanya C ++.
Jesse Millikan
1
Pertanyaan ini kemungkinan memiliki beberapa jawaban tepuk, dengan asumsi bahwa itu akurat (perhatikan komentar Jesse di Firefox, dan ada banyak browser selain ketiga dan IE). Saya tidak berpikir itu produktif.
David Thornley
1
Apakah ini grup yang benar untuk pertanyaan ini?
Martin York
6
@ Jesse bukan penerjemah js yang ditulis dalam C ++? Itu akan membuat semuanya C ++, bukan? (Saya mungkin salah ..)
cambraca
5
@cambraca, dengan logika itu, semuanya adalah kode perakitan!
Juan Mendes

Jawaban:

165

Cara lain untuk mengajukan pertanyaan adalah dukungan apa yang dibutuhkan browser? Daftar singkatnya adalah:

  • Dukungan untuk penguraian (diperlukan untuk memahami Script [X] HTML, CSS, dan [ECMA / Java])
  • Fitur penafsiran pohon berjalan (bagian dari penguraian dan pembangunan UI)
  • Dukungan untuk grafik yang dipercepat
  • Jaringan yang cepat
  • Untuk browser yang lebih canggih: kontrol atas proses dan isolasi memori antara halaman
  • Harus bekerja di semua platform yang didukung

Sebagian besar bahasa memiliki semacam dukungan penguraian. Anda memiliki generator parser untuk C, C ++, C #, Java, dll. Namun, C dan C ++ memiliki beberapa tahun mulai dari sisa alternatif sehingga algoritma dan implementasi lebih matang. Mengakses grafik yang dipercepat di Jawa adalah jalan keluar, kecuali jika Anda memiliki beberapa ekstensi asli untuk membuatnya berfungsi. WPF pada C # menyediakan akses ke grafik yang dipercepat, tetapi terlalu baru untuk memiliki browser yang serius yang dibangun dengan teknologi.

Jaringan sebenarnya adalah alasan paling tidak untuk memilih C ++ daripada Java atau C #. Alasannya adalah bahwa komunikasi berkali-kali lebih lambat daripada sisa pemrosesan yang berlangsung untuk menampilkan halaman. Kecepatan baku kawat adalah faktor pembatas. Baik Java dan C # memiliki dukungan IO non-blocking, seperti halnya C ++. Jadi tidak ada pemenang yang jelas di bidang ini.

Kenapa tidak Jawa? Pernahkah Anda mencoba membangun UI dengan Java? Rasanya rumit dan lambat dibandingkan dengan apa pun di luar sana, karena memang demikian. Tidak ada grafik yang dipercepat juga negatif besar di sini. Sandboxing Java benar-benar bagus, dan dapat membantu meningkatkan keamanan browser jika digunakan dengan benar, tetapi sulit untuk mengkonfigurasi dan membuat pekerjaan. Belum lagi dukungan format grafis tertinggal dari sebagian besar browser modern.

Kenapa tidak C #? Jika satu-satunya target Anda adalah Windows, C # sebenarnya bisa membuat representasi yang baik. Masalahnya muncul ketika Anda ingin mendukung hal lain. Mono belum cukup untuk dianggap cukup lintas platform untuk tugas ini - terutama dengan dukungan grafis dipercepat dan WPF. Siapa yang tahu berapa lama waktu yang dibutuhkan untuk berubah.

Kenapa tidak C? Ada kompiler C untuk hampir semua platform di luar sana (termasuk perangkat tertanam). Namun, ada banyak hal yang tidak dilakukan C untuk Anda sehingga Anda harus ekstra waspada. Anda memiliki akses ke semua level terendah API, tetapi sebagian besar pengembang C tidak melakukan GUI. Bahkan perpustakaan C GUI ditulis dengan cara yang berorientasi objek. Segera setelah Anda mulai berbicara UI, bahasa berorientasi objek mulai lebih masuk akal.

Mengapa tidak Objective C? Jika satu-satunya target Anda adalah Apple, itu sangat masuk akal. Namun, sebagian besar pengembang tidak tahu Objective-C, dan satu-satunya alasan untuk mempelajarinya adalah untuk bekerja di NeXT atau kotak Apple. Tentu Anda dapat menggunakan pustaka C apa pun dengan Objective-C, dan ada kompiler untuk banyak platform, tetapi menemukan orang untuk mengerjakannya akan menjadi sentuhan yang lebih sulit. Siapa tahu? Mungkin Apple dapat mengubah kekurangan yang dirasakan ini.

Kenapa C ++? Ada kompiler C ++ untuk hampir semua platform di luar sana. Hampir setiap pustaka GUI memiliki antarmuka C ++, terkadang lebih baik dan terkadang hanya berbeda. Sebagai contoh, ATL Microsoft jauh lebih baik daripada panggilan fungsi win32 C atau bahkan perpustakaan MFC. Ada pembungkus C ++ untuk GTK di Unix, dan saya akan terkejut jika seseorang tidak memiliki pembungkus C ++ di sekitar perpustakaan Objective-C GUI Apple. Manajemen proses lebih mudah dalam C ++ daripada Java atau C # (detail-detail itu disarikan untuk Anda). Kecepatan yang dirasakan lebih banyak berasal dari akselerasi perangkat keras dibandingkan dengan kinerja mentah. C ++ memang mengurus lebih banyak hal untuk Anda daripada C mentah (seperti string terikat), tetapi masih memberi Anda kebebasan untuk men-tweak hal-hal.

Untuk saat ini, C ++ memang mengesampingkan alternatif.

Berin Loritsch
sumber
4
Untuk platform non-Apple dan non-NeXT, ada koleksi GNUStep. Ini sebagian besar kompatibel dengan Kakao, dan berjalan sangat dekat ke mana-mana.
greyfade
5
Ingat bahwa Java tidak boleh menggunakan Swing (yang merupakan perpustakaan jelek) untuk GUI. Misalnya, kita memiliki ikatan Qt.
Anto
2
Menurut my.opera.com/kilsmo/blog/2008/01/29/opera-is-not-based-on-qt Opera tidak didasarkan pada Qt
Anto
2
Saya tidak pernah mengatakan Opera didasarkan pada Qt. Saya bermaksud mengatakan bahwa browser yang tidak bebas benar-benar sulit dijual ketika ada begitu banyak pilihan gratis yang luar biasa.
Berin Loritsch
7
Ketersediaan generator parser tidak begitu relevan - di semua browser parser HTML, XML, dan JS ditulis tangan, dan beberapa CSS ada di dalamnya.
gsnedders
89

Saya telah memutuskan untuk menulis sebuah novel tentang ini dengan harapan orang-orang akan mengabaikannya dan membuat saya bersemangat. Tidak, tidak, hanya bercanda! Saya menderita karena setiap kata. Setiap kata, saya katakan!

Tanyakan 'kapan' sebelum 'mengapa'

Semua browser web utama dapat melacak asal mereka kembali ke tahun 90-an. Konqueror menjadi Safari dan Chrome; Netscape menjadi Firefox; IE dan Opera masih IE dan Opera. Semua peramban ini memiliki kepala mulai 15 tahun pada petahana.

Saya sarankan Anda bahkan mencoba untuk menamai bahasa cross-platform yang dapat diterima (Windows / Mac / Unix dan bahkan lebih buruk) yang tersedia di sekitar tahun 1995 ketika browser modern berasal. Untuk membangun inti dalam apa pun selain C / C ++, Anda mungkin harus membangun atau membeli dan memodifikasi kompiler dan pustaka platform.

Bagaimana dengan hari ini? Apa saja alternatifnya?

Hanya untuk bersenang-senang, mari kita pikirkan masalah hari ini. Ya, ada alternatif, tetapi masih ada masalah besar.

Pilihan bahasa menyajikan setidaknya masalah ini:

  1. Masalah pengetahuan - Mempekerjakan / melatih pengembang atau menarik kontributor
  2. Masalah organisasi / sosial - Penerimaan bahasa
  3. Implementasi bahasa: Kecepatan, dukungan platform, tooling
  4. Kekuatan bahasa

1: Masalah pengetahuan

Di mana Anda mendapatkan orang yang tahu bahasa atau bisa mempelajarinya? Ini merupakan hambatan untuk bahasa seperti OCaml, F #, Haskell, Common Lisp dan D yang cukup cepat dan tingkat tinggi untuk menulis browser dengan baik, tetapi memiliki beberapa pengikut (Dalam kisaran 10k-100k, mungkin) bahkan jika Anda secara bebas hitung semua penghobi dan akademisi.

2: Masalah Sosial / Organisasi

Jawaban wajar untuk kultus kargo di atas:

  • Peramban sumber terbuka yang tidak menggunakan C, C ++, C # atau Java seharusnya akan mengalami kesulitan dengan kontributor.
  • Peramban berpemilik yang tidak menggunakan C, C ++, C # atau Java akan membuat para manajer proyek sangat marah di sebagian besar organisasi.

3. Masalah teknis

Bahkan di zaman modern, Anda memerlukan bahasa yang cukup cepat untuk bagian intensif rendering halaman rendering dan menjalankan Javascript. Anda dapat memilih untuk melengkapi itu dengan bahasa tingkat tinggi untuk membangun elemen GUI, dll. (Mis. Pendekatan Firefox dari C ++ dan Javascript) tetapi Anda harus memiliki integrasi yang erat antara bahasa; Anda tidak bisa mengatakan, "Oke, C # dan Lua." Anda mungkin harus membangun dan men-debug jembatan itu sendiri kecuali Anda memilih C atau C ++ sebagai bahasa dasar.

Pengembangan lintas-platform adalah kantong cacing lainnya. Anda bisa menggunakan C # atau F # dan menyilangkan jari Anda pada GTK # dan Mono menjadi hidup dan sehat di masa depan. Anda dapat mencoba Common Lisp, Haskell, OCaml ... Selamat mencoba semuanya berjalan di Windows dan Mac dan Linux.

4. Kekuatan Bahasa

Setelah semua itu, Anda harus membangun sejumlah besar fungsionalitas, jadi jika Anda memilih bahasa tingkat rendah, Anda memerlukan pasukan pembuat kode yang lebih besar daripada sebelumnya. Perhatikan bahwa tidak ada yang benar-benar membuat peramban dari awal dalam waktu sekitar lima belas tahun. Itu sebagian karena (kejutan!) Itu sulit.

Secara khusus, memiliki juru bahasa Javascript adalah masalah 3 (memperoleh satu) atau masalah 4 (membangun satu).

Kesimpulan:

Jika Anda mengembangkan browser tiga platform (Windows / Mac / * nix) hari ini (awal 2011), apa sajakah pilihannya?

  • C: Lihat (2). Semua orang akan menuntut C ++. Bersenang-senang memilih toolkit lintas-platform atau membuat satu (1, 2, 3 dan 4). Lihat juga (4); bersenang-senang membangun peramban yang stabil dan aman di dalamnya.
  • C ++: Bersenang-senang memilih cross-platform toolkit atau membangun satu (1, 2, 3 dan 4). Selamat bersenang-senang (4) membangun browser yang stabil dan aman di dalamnya.
  • C atau C ++ dan HLL: Taruhan terbaik Anda. Pilih racun Anda pada bahasa dinamis; Lihat (1) dan (2). Terlalu banyak bahasa yang baik, terlalu sedikit pengikut masing-masing. (1, 2, 3 dan 4) pada toolkit.
  • Java: Taruhan terbaik kedua, jika Anda harus menyenangkan manajemen menengah. Lihat (4); membangun hal-hal besar di Jawa membutuhkan lebih banyak kode daripada yang lainnya dalam daftar ini, tetapi mungkin C.
  • Scala: Beats Java on (4); (1) dan (2) tetapi terus berkembang.
  • C dan Javascript: Sebagai kasus khusus, ini menarik karena Anda sudah harus membangun atau memperoleh dan mengasimilasi penerjemah Javascript. (Karenanya Firefox.) (1, 2, 3 dan 4) pada toolkit; orang-orang Mozilla membangun IIRC mereka sendiri.
  • C #: Bersenang-senang di (3). Anda mungkin terjebak dengan GTK #, betapapun baiknya itu, atau membuat layer dan renderer Anda sendiri di atas GTK # dan Windows Forms.
  • Ruby / Python / Perl / Racket / Lua / Erlange dll .: Anda punya (3) di perpustakaan widget lintas-platform dan kecepatan. Hukum Moore ada pada Anda pada (4); meningkatnya permintaan di browser melawan Anda.
  • OCaml, Haskell, Common Lisp, Smalltalk: (1) dan (2) dalam sekop. Tidak ada masalah kecepatan, mungkin, tetapi (3) untuk pengembangan lintas platform, dan Anda harus membangun segalanya sendiri atau menjembatani ke pustaka C / C ++.
  • Objective-C: (3) Saya tidak yakin bagaimana pengembangan lintas-platform akan bekerja di sini.

Jika kita melihat browser besar lainnya naik dalam beberapa tahun ke depan, saya berani bertaruh itu akan ditulis dalam C atau C ++ dan bahasa yang dinamis (Seperti Firefox), apakah open source atau proprietary.

Sunting (31 Juli 2013) : Komentator di Hacker News sepertinya menyebut Rust and Go (tidak secara khusus sehubungan dengan jawaban saya), yang secara samar-samar jatuh ke dalam ember "lain-lain cepat". Mencoba menjadikan daftar bahasa ini egaliter dan mutakhir akan menjadi perjuangan yang sia-sia, jadi alih-alih saya menyebutnya sampel yang representatif pada saat penulisan dan membiarkannya sendiri.

Jesse Millikan
sumber
4
+1 untuk mencatat bahwa KAPAN browser tertentu pertama kali dikembangkan juga memainkan peran penting.
Sparky
3
Perlu dicatat bahwa sementara IE mungkin bukan cross-platform hari ini , itu pasti pada satu waktu, dan pangsa pasar saat ini hampir pasti berasal (setidaknya sebagian) dari kemampuan cross-platform.
Jerry Coffin
2
Perhatikan bahwa IE adalah cross-platform sekali di sekitar IE4.
JasonFruit
2
+1 untuk kapan. Itulah satu-satunya alasan. Jika seseorang memulai proyek browser hari ini kemungkinan besar mereka tidak akan menggunakan C ++
Henry
4
@ Henry, tidak mungkin mereka akan mengecualikan menggunakan C ++. Jawabannya mencatat bahwa C ++ masih akan menjadi bagian dari teka-teki.
Tipe Anonim
36

Kecepatan

Seburuk itu, C ++ masih apa yang Anda gunakan ketika Anda ingin aplikasi cepat dan kontrol penuh atas kode.

Inilah sebabnya mengapa game, bagian non-inti (seperti importir file) dari Office, dan masih banyak lagi yang ditulis dalam C ++.

Diedit untuk memasukkan respons dari MSalters

Ryan Hayes
sumber
3
Selain game, saya tidak percaya bahwa alasan ini adalah alasan mengapa aplikasi tersebut ditulis dalam C ++. Padahal jika Anda memiliki pengetahuan tangan pertama saya senang terbukti salah.
Henry
2
pengetahuan tangan pertama? VS 2010, Office 2010 keduanya adalah suite aplikasi besar namun mereka sangat cepat dalam apa yang mereka lakukan. Meskipun keduanya memiliki warisan COM yang agak besar, dan warisan MS, kinerja masih merupakan hal yang paling penting bagi pengguna.
Tipe Anonim
8
Kantor apa lagi yang akan ditulis? VB? C dan C ++ adalah satu-satunya pilihan bagi Microsoft untuk menulis aplikasi besar. Jangan katakan C # tolong
Toby Allen
4
@ Viktor: Saya belum melihat sumber untuk VS2010, jadi mungkin ditulis seluruhnya dalam C #.
Ryan Hayes
3
Jika kantor adalah aplikasi C #, mengapa Ribbon asli mengendalikan MFC, dan kami harus menunggu lama untuk C # yang akan dikembangkan? tak satu pun dari aplikasi besar ini akan ditulis ulang dalam C #, mereka akan dibungkus dengan WPF gui (seperti VS2010) dan sebagian besar kode lama akan digunakan kembali. Bahkan MS tidak memiliki sumber daya untuk sepenuhnya menulis ulang aplikasi terbesar mereka - tidak jika mereka ingin menghabiskan waktu menambahkan fitur ke mereka juga.
gbjbaanb
17

Portabilitas

Saya hanya bisa menebak, tetapi Anda menyebutkan produk perangkat lunak yang menargetkan beberapa platform, dan C ++ dapat dikompilasi ke platform apa pun.

Pete
sumber
+10 - Selain kinerja mentah, saya pikir ini adalah alasan NYATA sebagian besar browser berada di C ++ dengan pengecualian IE. Sebagian besar browser bekerja pada banyak platform dan ada beberapa bahasa / kerangka kerja yang dapat bekerja pada level yang sama DAN kompatibel dengan cross-platform.
Jordan Parmer
Saya pikir ini pada awalnya juga, tetapi untuk aplikasi sentris GUI seperti browser web. Apakah C ++ benar-benar jauh lebih portabel untuk sistem operasi lain daripada Java?
JohnFx
1
Apakah browser benar-benar sentris GUI?
Kris Van Bael
@ JohnFx - Benar, bagian GUI mungkin tidak terlalu portabel. Tetapi inti dari misalnya aplikasi browser adalah tentang menangani HTML, membuat pohon DOM, mem-parsing javascript dan menjalankannya dengan cukup cepat. Aplikasi yang dirancang dengan baik dapat dengan mudah berbagi inti yang sama dan memiliki kode UI yang berbeda untuk setiap platform. Dan ya, C ++ jauh lebih portabel daripada Java (tetapi tanpa GUI), karena untuk C ++ Anda hanya perlu kompiler yang menargetkan CPU. Untuk Java Anda membutuhkan kerangka kerja lengkap.
Pete
Itu pemahaman saya bahwa sebagian besar nyali pemrosesan HTML dilakukan oleh beberapa alat inti seperti WebKit. Mungkin itu karena mereka berada di C ++ bahwa seluruh browser?
JohnFx
13

(Saya sudah bekerja di Firefox selama sekitar lima tahun.)

Penanya benar bahwa banyak kode Firefox adalah C ++, dan sebenarnya C ++ adalah mayoritas jika Anda menghitung berdasarkan baris kode (meskipun itu tidak menceritakan keseluruhan cerita, karena kami memiliki banyak JavaScript, dan JS lebih ringkas daripada C ++).

Namun kenyataannya, Firefox ditulis dalam banyak bahasa berbeda:

  • C ++
  • C (NSS, NSPR, berbagai perpustakaan yang telah kami impor)
  • perakitan x86 dan ARM
  • JavaScript
  • XUL (bahasa markup mirip HTML) dan CSS
  • Objective C (kode khusus MacOS)
  • Java (kode khusus Android)
  • Berbagai bahasa antarmuka-definisi kustom (XPIDL, IPDL)
  • WebIDL (bahasa antarmuka-definisi lain, tetapi yang ini tidak khusus, meskipun pembuat kode adalah)
  • Python (pembuat kode)

Saya yakin saya lupa beberapa.

Daftar ini penting karena mengisyaratkan kompleksitas luar biasa yang berada di belakang browser web.

Ya, Firefox memiliki banyak kode C ++, dan ya, itu ada hubungannya dengan fakta bahwa C ++ adalah bahasa terbaik untuk hal semacam ini ketika Netscape didirikan. Tetapi saya juga berpendapat bahwa tidak ada bahasa yang lebih baik hari ini untuk banyak hal yang kami lakukan.

Tidak ada bahasa lain yang memiliki ekosistem perpustakaan sekuat (kami sangat bergantung pada kode eksternal). Beberapa bahasa lain memberi Anda kontrol tumpukan penuh seperti C ++ (kami secara teratur mengubah pengalokasi tumpukan kustom kami dan melakukan segala macam hal yang tidak aman memori untuk lebih cepat atau menggunakan lebih sedikit memori). Beberapa bahasa lain memungkinkan Anda menerapkan kembali sebagian besar perpustakaan standar dengan cara yang waras (kami memiliki implementasi string dan koleksi kami sendiri, disesuaikan dengan kebutuhan kami). Beberapa bahasa lain memungkinkan Anda menerapkan pengumpul sampah Anda sendiri. Dan seterusnya.

Meskipun C ++ adalah pilihan yang jelas untuk banyak hal yang kami lakukan, orang-orang yang menyarankan agar kami dapat menulis browser di Java dan menulis JVM kami sendiri jika perlu ada sesuatu. Ini pada dasarnya adalah apa yang kami lakukan, tetapi dengan JavaScript alih-alih Java. Tentu saja, sebagian besar browser tidak ditulis dalam JavaScript. Tetapi jumlah yang mengejutkan adalah.

Justin L.
sumber
Apakah tindakan memori-tidak aman ini sumber masalah keamanan?
Demi
12

Nah, Anda harus meminta pengembang produk-produk langsung untuk mendapatkan yang jawaban, tapi saya menduga itu kombinasi dari keakraban (itu apa yang mereka pengembang tahu terbaik), kinerja (kompilasi ke biner asli sebagai lawan bytecode), dan alat (dibandingkan dengan bahasa seperti C, C ++ penuh dengan gadget hemat tenaga kerja yang bagus seperti STL).

John Bode
sumber
10

Sejarah

Setiap browser memiliki beberapa riwayat yang memengaruhi pilihan bahasa.

Sebagai contoh, baik Chrome dan Safari didasarkan pada WebKit, yang memiliki asal-usulnya di bagian KHTML proyek KDE. KDE awalnya dibuat (sebagian) sebagai demonstrasi dari toolkit Qt GUI, sehingga KDE, secara keseluruhan, adalah proyek C ++. Semua proyek KDE baru, pada saat itu, seluruhnya ditulis dalam C ++, jadi itu adalah pilihan logis untuk KHTML. Sejak itu porting untuk menggunakan toolkit GUI lainnya.

Mesin Presto Opera ditulis dengan kinerja dan ukuran biner kecil dalam pikiran: C ++ adalah pilihan logis.

Microsoft IE ditulis sebagai kumpulan komponen ActiveX, yang bisa ditulis dalam bahasa apa pun yang memiliki ikatan COM, tetapi kemungkinan ditulis dalam subset C ++, karena mayoritas basis kode mereka sudah ditulis dalam bahasa itu.

Mozilla Netscape ditulis dalam C ++ kemungkinan karena portabilitas menjadi perhatian utama mereka. Kompiler C dan C ++ (secara virtual) ada di mana-mana, dan itu merupakan pilihan yang logis.

Tidak ada alasan teknis yang melekat untuk pilihan ini. Itu hanya "sepertinya ide yang bagus saat itu."

greyfade
sumber
8

Jaringan di C dan C ++ mudah dioptimalkan, karena Anda tidak harus menggunakan perpustakaan jika tidak mau. Saya menduga bahwa C ++ adalah bahasa pilihan karena memungkinkan kelebihan C:

  • Kecepatan
  • Optimasi
  • Sejumlah portabilitas tertentu
  • Bahasa yang dikompilasi, tidak ditafsirkan

ditambah dengan keunggulan OOP:

  • Kemungkinan diperpanjang
  • Visualisasi yang lebih mudah
  • Dukungan pustaka yang lebih baik untuk tugas-tugas yang tidak penting seperti pemrosesan string dan struktur data
Michael K.
sumber
Bukankah Java atau C # memiliki keunggulan-keunggulan itu?
Nipuna
5
Saya telah mengembangkan aplikasi di keduanya, dan saya akan mengatakan bahwa untuk fungsionalitas jaringan terbatas mereka baik-baik saja. Namun, saya tidak ingin membangun apa pun yang berpusat pada bagian jaringan seperti halnya browser. Saya ingin lebih banyak kontrol atas apa yang terjadi, dan saya ingin bahasa yang dikompilasi .
Michael K
Java dan C # juga dikompilasi. C # akan memiliki keunggulan dibandingkan Java ketika datang untuk membangun GUI - bagian penting dari browser apa pun. Java akan memiliki keunggulan dengan portabilitas. Java dan C # dikompilasi ulang pada platform target - untuk peningkatan kecepatan yang lebih baik.
Berin Loritsch
5
Tidak, mereka ditafsirkan. Mereka mengkompilasi untuk bytecode dan dijalankan pada mesin virtual. VM itu tidak memiliki korespondensi satu-ke-satu dari instruksi yang ditetapkan ke yang asli.
Michael K
1
Anda tidak bisa mendapatkan ini lebih mundur! Jaringan; Anda bisa keluar untuk mengeriting dan browser akan sama cepatnya. KODE jaringan bukan bit yang lambat. Dan apa soket jika bukan perpustakaan? Pemrosesan string; Ini adalah inti dari setiap browser html, BUKAN tidak kritis dan saya tidak bisa memikirkan satu bahasa yang memiliki penanganan string yang lebih buruk daripada C ++ selain C.
Henry
4

Ketika baris pertama kode untuk putaran pertama browser ditulis, C # dan Java tidak ada. Ruby juga tidak. Python mungkin sudah ada, tetapi itu masih merupakan proyek homebrew kecil pada saat itu.

Pada dasarnya, tidak ada pilihan lain selain C ++ yang memungkinkan seseorang untuk membangun browser yang cepat dan berjalan pada banyak platform berbeda.

Jadi mengapa mereka ditulis dalam bahasa C ++? Karena itu adalah satu-satunya bahasa yang tersedia yang dapat mereka tulis

GrandmasterB
sumber
1
Tidak yakin apa yang Anda maksud dengan 'babak baru'. Tetapi FF dan IE memiliki basis kode yang kembali ke pertengahan 90-an, dan sebagian besar browser baru menggunakan salah satu mesin rendering (misalnya, Chrome menggunakan WebKit)
GrandmasterB
2
FF menyingkirkan kode warisan Netscape (yaitu pertengahan tahun 90-an yang mengasapi) dan mengimplementasikan mesin rendering mereka sendiri. WebKit juga merupakan mesin rendering yang relatif baru (digunakan oleh Chrome dan Safari). IE masih memiliki mengasapi warisan yang terus membebani itu. Jadi saya akan tidak setuju di sini.
Berin Loritsch
2
Menurut setidaknya wikipedia, baik tokek maupun webkit mulai sekitar tahun 1998. C # tidak ada saat itu, dan java baru di tempat kejadian (dan super lamban dan benar-benar mengerikan di masa gui saat itu), sehingga tidak akan menjadi pilihan yang layak. Jadi saya tidak tahu bahasa apa yang cocok. Mungkin Pascal.
GrandmasterB
1
@Berin Loritsch: Ya, tetapi tidak pada titik mereka membuang semua kode yang ada dan memulai kembali (pada segalanya) dari awal, yang merupakan apa yang harus mereka lakukan untuk mengonversi ke bahasa lain. Selain itu, orang yang tahu / tahu C ++ cukup baik untuk keputusan mereka tentang FF untuk tetap berpeluang untuk beralih ke bahasa yang berbeda pula.
Jerry Coffin
2
@Berin Loritsch Sampah. FF masih berdasarkan pada Gecko (1997) dan Webkit berdasarkan pada khtml (1998).
Henry
4

Karena browser (misalnya, HotJava, cukup jelas ditulis dalam Java) yang ditulis dalam bahasa lain tidak pernah mencapai tingkat penerimaan / penetrasi pasar yang substansial.

Saya tidak bisa mengatakan apa-apa tentang iterasi saat ini (atau yang terbaru - belum diperbarui dalam waktu yang cukup lama) dari HotJava, tetapi ketika saya mencobanya, kurangnya penetrasi pasar sepertinya (setidaknya bagi saya) sangat mudah dimengerti - itu jelek, lambat, dan tidak kompatibel dengan beberapa halaman web. Pada akhirnya, tampaknya didasarkan pada premis yang tidak pernah berhasil: bahwa web akan terdiri terutama dari applet Java, dengan HTML sedikit lebih dari pembungkus yang memberitahu applet mana yang akan ditampilkan.

Sebagian darinya mungkin juga historis: sebagian besar browser web besar sudah ada sejak lama. Ketika pertama kali ditulis, lanskapnya jauh berbeda: C ++ adalah bahasa baru yang "panas", jadi bahasa ini digunakan untuk banyak pengembangan baru. Peramban telah menjadi beberapa peranti lunak yang paling banyak digunakan, sementara banyak peramban lain yang sejak saat itu luntur.

Saya pikir "sikap" bahasa yang ditampilkan memiliki efek juga: C ++ (seperti C sebelumnya) selalu menekankan kepraktisan dan pragmatisme. Sikap dasar itu cenderung menarik para programmer yang juga pragmatis. Banyak bahasa lain lebih menekankan pada hal-hal seperti keanggunan - dan dengan demikian, mereka menarik programmer yang berpikir dengan cara yang sama. Masalah dengan itu adalah apa yang saya sebut "efek Lisp". Gejalanya meliputi:

  1. Argumen tak berujung atas implementasi yang paling elegan dari hal-hal yang paling sepele.
  2. Ketidakmampuan untuk membekukan fitur dan menyelesaikan sesuatu yang dapat dikirim (bahkan dengan cacat)
  3. Ketidakmampuan untuk berkompromi. Siapa pun yang tidak setuju dengan saya tidak hanya salah, tetapi juga harus bodoh atau jahat.

Ada lebih banyak, tetapi Anda mendapatkan ide umum (dan ya, saya melebih-lebihkan sampai taraf tertentu - tetapi hanya sampai taraf tertentu). Ya, beberapa kode yang Anda dapatkan akan sangat indah - tetapi kemungkinan bahwa itu adalah enam bulan terlambat, dan sebagian besar tidak kompatibel dengan setiap bagian kode lainnya (apa yang seharusnya) sistem, dan pada saat Anda menerimanya ada kemungkinan yang cukup adil ada hal lain yang cukup berubah sehingga Anda tidak bisa menggunakannya sama sekali.

Ada juga bahasa yang pasti akan bekerja dengan baik, tetapi (benar atau salah) tidak memiliki (atau pada saat yang penting, tidak memiliki) pangsa pasar bagi siapa pun yang pernah menulis browser di dalamnya. Mengingat ukuran dan kerumitan peramban yang lengkap, dibutuhkan banyak orang dan sedikit waktu untuk mengembangkannya. Dengan investasi semacam itu, banyak orang menjadi relatif konservatif dalam hal-hal seperti alat pengembangan.

Jerry Coffin
sumber
1
WRT poin 3, saya pasti akan menegaskan, tanpa kualifikasi, bahwa menulis perangkat lunak yang berhadapan dengan jaringan dalam keluarga C adalah bodoh atau jahat, karena itu memerlukan baik secara tidak sadar (bodoh) atau sengaja (jahat) bekerja dengan sistem yang dikenal luas untuk memperkenalkan keamanan. lubang yang akan membahayakan pengguna Anda. Ini secara moral setara dengan memberikan pelindung tubuh prajurit dengan target dicat di atasnya.
Mason Wheeler
9
@ Alasan: Tampilan Anda tentang kefanatikan yang dimaksud tentu saja dihargai.
Jerry Coffin
2
@Mason: Omong kosong. Satu lubang keamanan (yang sudah diperbaiki, tetapi banyak sysadmin tidak mau repot untuk menginstal kode yang diperbarui) bahkan tidak dekat dengan bukti bahwa semua kode yang ditulis dalam bahasa yang sama "akan menyebabkan kerusakan" atau semacamnya. OpenBSD (misalnya) memiliki sejarah keamanan yang jauh lebih baik daripada versi MacOS berbasis Pascal.
Jerry Coffin
5
@ Alasan: Tidak, kamu. Pertama, cacing Morris mengeksploitasi sebuah proram yang digunakan gets, yang merupakan fungsi yang mengerikan, tetapi hampir tidak dapat dihindari (dan tentu saja bukan "mendasar" untuk bahasa, atau sesuatu seperti itu). Kedua, C ++ bukan bahasa yang sama dengan C dalam hal apa pun. Ketiga, OpenBSD menunjukkan dengan sangat baik bahwa perangkat lunak yang aman dapat dan ditulis dalam C. Tidak ada "kelemahan bahasa yang mendasarinya" yang mencegah penulisan perangkat lunak yang kokoh dan aman di C. Pangsa pasar kecil OpenBSD menunjukkan bahwa keamanan bukanlah masalah utama bagi kebanyakan orang. orang-orang.
Jerry Coffin
6
@ Alasan: buffer overrun in getsadalah konsekuensi sederhana dari fakta bahwa Anda tidak memberikannya panjang buffer yang Anda gunakan. Tidak ada yang mendasar pada bahasa itu - Anda bisa melakukan hal yang sama dalam Pascal (dan saya punya). Menulis perangkat lunak yang aman terhadap penyerang cerdas tidak mudah terlepas dari bahasa. Berdasarkan pengalaman di ketiganya, ini sedikit lebih mudah di C daripada di Pascal, dan jauh lebih mudah di C ++ daripada di C.
Jerry Coffin
3

Pemrograman kargo-kultus. Persepsi bahwa "C ++ cepat" masih ada di luar sana, (meskipun fitur tingkat bahasa yang tidak dipikirkan dengan baik seperti model objek yang rusak parah yang memperlambat segalanya), dan orang-orang ingin browser mereka menjadi cepat, sehingga mereka menulis dalam C ++ .

Dalam dunia yang waras, orang-orang yang menulis perangkat lunak yang berhadapan dengan jaringan akan ngeri dengan pemikiran hanya menggunakan bahasa yang dibebani dengan semua masalah keamanan bawaan C, dan sebenarnya melakukan hal itu akan menjadi tindakan kelalaian kriminal. (Lihat saja berapa banyak buffer overflow exploit yang telah ditemukan terhadap berbagai browser dalam 15 tahun terakhir atau lebih! Berapa banyak jutaan dolar kerusakan yang menjadi tanggung jawab pembuat kode ini?)

Ada bahasa kompilasi lain yang mampu membuat binari cepat. Masalahnya adalah mereka tidak memiliki eksposur yang sama dengan keluarga C, dan kita semua harus menderita karenanya.

Fakta menyenangkan: Pada saat Morris Worm masuk ke Internet pada tahun 1988, secara meyakinkan menunjukkan masalah dengan menulis OS dan perangkat lunak yang menghadapi jaringan di C, (yang masih belum terpecahkan hingga saat ini, karena mereka merupakan kelemahan bawaan dalam bahasa tersebut. ,) Apple telah merilis sistem operasi tercanggih yang pernah dilihat dunia sejauh ini, selama beberapa tahun, ditulis dalam Pascal.

Mason Wheeler
sumber
15
Hah? Saya menyukai Mac OS dengan baik, tetapi menyebutnya OS paling canggih di dunia yang terlihat konyol. Itu bahkan tidak di taman bola yang sama dengan UNIX dan VMS, apalagi sistem besi besar IBM: pengguna tunggal, tidak ada memori virtual, manajemen proses terbatas. Yang pasti itu memiliki sistem windowing yang sangat bagus, tetapi bahkan itu turunan dari Xerox Parc, dan banyak proyek akademik. Saya juga berpikir bahwa sebagian besar OS Mac sebenarnya ditulis dalam perakitan M68k. Perpustakaan menggunakan standar fungsi panggilan Pascal karena diharapkan Pascal akan menjadi bahasa aplikasi utama.
Charles E. Grant
5
Pra-2000 Sistem operasi Apple tidak lebih stabil daripada yang setara dengan MS. Ketika saya sedang mengerjakan dua proyek di tahun 90-an, satu dengan Mac OS dan satu dengan NT saya memiliki jumlah crash dan reboot yang sama. Sekarang mereka semua adalah semacam bahasa berbasis C. (Apple menggunakan Objective-C untuk barang-barang saat ini). Keamanan mungkin lebih sulit dalam bahasa berbasis C, tetapi menggunakan bahasa yang berbeda tidak membuatnya tiba-tiba lebih aman.
Berin Loritsch
13
@ Alasan, fakta bahwa Mac tidak memerlukan fitur-fitur itu pada saat itu tidak berarti itu tidak signifikan. Anda membuat pernyataan wajar tanpa pengecualian bahwa OS Apple adalah yang paling canggih di dunia, tetapi yang Anda maksud sebenarnya adalah bahwa ia memiliki antarmuka pengguna yang paling canggih. Itu adalah pernyataan yang bisa dipertahankan, tetapi kurang megah dari apa yang Anda tulis. Menulis GUI yang dapat digunakan itu sulit. Menulis sistem memori paged yang andal itu sulit. Mengatakan bahwa yang satu lebih penting daripada yang lain konyol. Komputasi tingkat konsumen seperti yang kita tahu sekarang tidak bisa ada tanpa keduanya.
Charles E. Grant
5
@Mason: pengalaman Anda jelas berbeda (sangat) dari siapa pun dan orang lain - dalam banyak hal. :-)
Jerry Coffin
3
@Mason: LOL mengacu pada pra-Mac OSX sebagai "lanjutan". Apple OS adalah sumber crash yang konstan, paling tidak karena sistem file yang sangat sederhana.
Jenis Anonim
2

Akses ke API tingkat sistem

Semua browser harus berinteraksi dengan OS di beberapa titik, dan sebagian besar OS utama memiliki API dan pustaka C dan C ++ yang sudah mapan. Biasanya lebih mudah untuk bekerja dengan API tersebut dalam C atau C ++ daripada menulis pembungkus.

TMN
sumber
0

Kontrol dan Portabilitas

sebagian besar argumen kecepatan bisa jalan baik, tetapi dalam apa pun di mana Anda membutuhkan kontrol yang tepat atas bagaimana sesuatu dilakukan banyak bahasa tingkat yang lebih tinggi akan turun hujan di parade Anda. Ada pengecualian untuk ini, tetapi kebanyakan dari mereka tidak cukup lintas platform untuk dihitung dalam sesuatu seperti browser.

Tagihan
sumber
0

Kompatibilitas lama - tidak dapat membuang kode lama

Ini tidak ada hubungannya dengan manfaat C ++ vs bahasa lain. Anda pasti dapat menulis peramban yang lebih baik dari awal dalam bahasa seperti Haskell; sebuah proyek yang penting ini bahkan dapat mengimplementasikan JVM mereka sendiri jika mereka perlu menjamin beberapa karakteristik kinerja. Seperti bagaimana Facebook menulis kompiler / optimizer PHP mereka sendiri.

Browser yang memecah markup non-standar lebih buruk daripada tidak berguna. Compat Legacy sangat penting dan sangat kompleks sehingga penulisan ulang bukanlah suatu pilihan. Banyak uang dan waktu diinvestasikan dalam keamanan yang teruji pertempuran dll, Anda tidak bisa begitu saja membuang investasi itu. Sekali lagi, seperti bagaimana Facebook masih ditulis dalam PHP.

Dustin Getz
sumber
Saya bisa mengerti mengapa orang mungkin tidak mendukung hal ini ... tetapi downvoted? Itu aneh. Ini +1 untuk Anda.
Thomas Eding
Anda memiliki poin (kecil), tetapi kalimat pertama Anda membuang begitu saja. Tentu saja itu ada hubungannya dengan manfaat C ++ vs bahasa lain juga.
Chiel ten Brinke