Neden çoğu tarayıcı C ++ ile geliştirildi [kapalı]


99

Genel web tarayıcılarının çoğu (Firefox, Chrome, Safari) C ++ kullanılarak geliştirilmiştir. Niye öyle?


28
Firefox sadece C ++ değil, C ++ ve Javascript ile yazılmıştır.
Jesse Millikan

1
Bu sorunun doğru olduğunu varsayarak birkaç pat cevabı olması muhtemeldir (Jesse'nin Firefox hakkındaki yorumuna dikkat edin, ve bu üçünün ve IE'nin yanı sıra çok sayıda tarayıcı var). Verimli olduğunu sanmıyorum.
David Thornley

1
Bu, bu soru için doğru grup mu?
Martin York

6
@Jesse, C ++ 'da yazılmış js tercümanı değil mi? Bu her şeyi C ++ yapmalı, değil mi? (Yanlış olabilir ..)
cambraca

5
@ cambraca, bu mantıkla, her şey derleme kodudur!
Juan Mendes,

Yanıtlar:


165

Soruyu sormanın bir başka yolu, bir tarayıcının ne tür bir desteğe ihtiyacı olduğudur? Kısa liste:

  • Ayrıştırma desteği ([X] HTML, CSS ve [ECMA / Java] Script'i anlamak için gerekli)
  • Ağaç yürüyüşü / yorumlama özellikleri (ayrıştırma ve kullanıcı arayüzü oluşturma bölümü)
  • Hızlandırılmış grafikler için destek
  • Hızlı ağ
  • Daha gelişmiş tarayıcılar için: işlemler üzerinde kontrol ve sayfalar arasında bellek ayırma
  • Desteklenen tüm platformlarda çalışmalı

Çoğu dilde bir tür ayrıştırma desteği vardır. C, C ++, C #, Java, vb. İçin ayrıştırıcı üreteçleriniz var. Ancak, C ve C ++ alternatiflerin geri kalan kısmında oldukça uzun bir süre başlıyor, bu nedenle algoritmalar ve uygulamalar daha olgunlaşıyor. Java'da hızlandırılmış grafiklere erişmek, çalışması için bazı yerel uzantılara sahip olmadığınız sürece geçerli değildir. C # üzerindeki WPF, hızlandırılmış grafiklere erişim sağlar, ancak teknolojiyle oluşturulmuş ciddi bir tarayıcıya sahip olmak için çok yeni.

Ağ oluşturma aslında Java veya C # ile C ++ 'ı seçme nedenlerinden en az olanıdır. Bunun nedeni, iletişimin sayfayı görüntülemeye devam eden işlemin geri kalanından çok daha yavaş olmasıdır. Telin ham hızı sınırlayıcı faktördür. Hem Java hem de C #, C ++ 'da olduğu gibi engelleyici olmayan IO desteğine sahiptir. Yani bu alanda gerçekten kesin bir kazanan yok.

Neden Java değil? Java ile bir kullanıcı arayüzü oluşturmayı hiç denediniz mi? Orada başka bir şeyle karşılaştırıldığında hantal ve yavaş hissediyor, çünkü öyle. Hızlandırılmış grafik yok burada da büyük bir negatif. Java'nın sanal alanı gerçekten iyidir ve doğru kullanılırsa bir tarayıcının güvenliğini artırmaya yardımcı olabilir, ancak yapılandırılması ve çalışılması acı vericidir. Grafik format desteği bahsetmiyorum bile çoğu modern tarayıcının gerisinde kalıyor.

Neden C # değil? Tek hedefiniz Windows ise, C # aslında iyi bir sunum yapabilir. Başka bir şeyi desteklemek istediğinizde sorun ortaya çıkar. Mono bu görev için yeterli platform olarak kabul edilemeyecek kadar yetmedi - özellikle hızlandırılmış grafik desteği ve WPF ile. Değişimin ne kadar süreceğini kim bilebilir?

Neden C değil? Hemen hemen her platform için (gömülü cihazlar dahil) bir C derleyicisi var. Ancak, C'nin sizin için yapamayacağı kadar fazla dikkatli olmanız gereken çok şey var. API'lerin tüm en düşük seviyelerine erişiminiz vardır, ancak C geliştiricilerin çoğu GUI yapmamaktadır. C GUI kütüphaneleri bile nesne yönelimli biçimde yazılmıştır. UI ile konuşmaya başlar başlamaz, nesne yönelimli bir dil daha iyi anlaşılmaya başlar.

Neden Hedef C değil? Tek hedefiniz Apple ise, çok mantıklı geliyor. Ancak çoğu geliştirici Objective-C'yi tanımıyor ve bunu öğrenmenin tek nedeni NeXT veya Apple kutuları üzerinde çalışmak. Tabii ki herhangi bir C kütüphanesini Objective-C ile kullanabilirsiniz ve birçok platform için derleyiciler vardır, ancak üzerinde çalışacak insanları bulmak daha zor bir dokunuş olacaktır. Kim bilir? Belki de Apple bu algılanan eksikliği tersine çevirebilir.

Neden C ++? Hemen hemen her platform için bir C ++ derleyicisi var. Neredeyse her GUI kütüphanesinin bir C ++ arayüzü var, bazen daha iyi ve bazen sadece farklı. Örneğin, Microsoft’un ATL’si win32 C işlev çağrılarından ve hatta MFC kitaplığından çok daha iyidir. Unix'te GTK için C ++ sarmalayıcılar var ve birinin Apple'ın Objective-C GUI kitaplığının etrafında bir C ++ sarmalayıcısı yoksa şaşırırdım. İşlem yönetimi C ++ 'da Java veya C #' dan daha kolaydır (bu bilgiler sizin için soyutlanmıştır). Algılanan hız, donanım ivmesinden, ham performanstan daha fazla gelir. C ++, sizin için ham C'den (sınırlı dizeler gibi) daha fazla şeyle ilgilenir, ancak yine de size ince ayar yapma özgürlüğü verir.

Şimdilik, C ++ alternatifleri öne çıkarıyor.


4
Apple ve NeXT olmayan platformlar için GNUStep koleksiyonu var. Bu var çoğunlukla Kakao ile uyumlu ve her yerde lanet yakın çalışır.
greyfade

5
Java'nın GUI için Swing (bir berbat kütüphane) kullanmaması gerektiğini unutmayın. Örneğin, Qt bağlarımız var.
Anto

2

2
Opera’nın Qt’ye dayandığını söylemedim. Yani, özgür olmayan bir tarayıcının çok fazla mükemmel ücretsiz seçenek olduğunda satması gerçekten zor olduğunu ima etmek istedim.
Berin Loritsch

7
Ayrıştırma üreticilerinin kullanılabilirliği gerçekten önemli değil - tüm tarayıcılarda HTML, XML ve JS ayrıştırıcıları elle yazılmıştır ve CSS de bazılarındadır.
gsnedders

89

Bunun hakkında insanların bir şeyleri parlatacağı ve beni affedeceği umuduyla bir roman yazmaya karar verdim. Hayır, hayır, sadece şaka! Her kelimede acı çektim. Her kelimede sana söylüyorum!

'Ne zaman' neden 'sor'

Tüm büyük web tarayıcıları kökenlerini 90'lara kadar izleyebilir. Konqueror, Safari ve Chrome oldu; Netscape Firefox oldu; IE ve Opera hala IE ve Opera. Bu tarayıcıların hepsinde, görevliler için 15 yıllık bir başlangıç ​​var.

Ben bile denemek önermek isim kabul edilebilir bir çapraz platform (Windows / Mac / Unix ve daha da kötüsü) modern tarayıcılar kökenli zaman etrafında 1995 yılında sunulmuştu dili. Çekirdeği C / C ++ dışında bir şey oluşturmak için, muhtemelen bir derleyici ve platform kitaplıkları oluşturmak veya satın almak ve değiştirmek zorunda kalacaktınız.

Peki ya bugün? Alternatifler neler?

Sadece eğlence için, bugün problemi düşünelim. Evet, alternatifler var, ancak hala büyük sorunlar var.

Dil seçimi en azından şu problemleri sunar:

  1. Bilgi sorunları - Geliştiricileri işe almak / eğitmek veya katkıda bulunanları çekmek
  2. Organizasyonel / sosyal problemler - Dil kabulü
  3. Dil uygulaması: Hız, platform desteği, takım
  4. Dil gücü

1: Bilgi problemleri

Dili tanıyan veya öğrenebilen insanları nereden buluyorsunuz? Bu, OCaml, F #, Haskell, Common Lisp ve D gibi dillerde güzel bir tarayıcı yazmak için yeterince hızlı ve yüksek, ancak liberal olsa bile çok az sayıda takipçisi olan diller için bir engeldir. tüm hobileri ve akademisyenleri sayın.

2: Sosyal / Örgütsel problemler

Yukarıdaki kargo-kült cevabının sonucu:

  • C, C ++, C # veya Java kullanmayan açık kaynak kodlu bir tarayıcı sözde katılımcılar ile zorluk çekecektir.
  • C, C ++, C # veya Java'yı kullanmayan tescilli bir tarayıcı çoğu şirkette proje yöneticilerine ciddi şekilde bağırır.

3. Teknik problemler

Modern zamanlarda bile, sayfa oluşturma işleminin yoğun bölümleri ve Javascript'i çalıştırmak için oldukça hızlı bir dile ihtiyacınız var. GUI öğeleri vb. Oluşturmak için üst düzey bir dille (örneğin, C ++ ve Javascript'in Firefox yaklaşımı) tamamlamayı seçebilirsiniz; ancak diller arasında yakın entegrasyona sahip olmanız gerekir; "Tamam, C # ve Lua" diyemezsin. Temel dil olarak C veya C ++ 'ı seçmediğiniz sürece muhtemelen kendiniz bu köprüyü kurmanız ve hata ayıklamanız gerekecektir.

Çapraz platform geliştirme bir başka solucan torbasıdır. Gelecekte C # veya F # 'yu kullanabilir ve GTK #' da ve Mono 'nun hayatta ve iyi durumda olmasını parmaklarınızla çapraz geçebilirsiniz. Sen Common Lisp, Haskell, OCaml deneyebilirsiniz ... Windows ve Mac ve Linux üzerinde çalışan her şeyi almakta iyi şanslar .

4. Dil Gücü

Bütün bunlardan sonra, muazzam miktarda bir işlevsellik oluşturmalısınız, bu yüzden düşük seviyeli bir dil seçtiyseniz, öncekinden daha sıkı bir kodlayıcı ordusuna ihtiyacınız var. Hiç kimse gerçekten yaklaşık on beş yıl içinde sıfırdan bir tarayıcı inşa etmedi. Bu kısmen çünkü (sürpriz!) Zor.

Spesifik olarak, bir Javascript yorumlayıcısına sahip olmak sorun 3 (bir tane edinir) veya sorun 4'tür (bir tane oluşturur).

Sonuç:

Bugün üç platformlu (Windows / Mac / * nix) bir tarayıcı geliştirdiyseniz (2011 başında), seçeneklerden bazıları nelerdir?

  • C: Bkz. (2). Herkes C ++ için maceracı olacak. Bir platformlar arası araç seti seçerken ya da bir tane (1, 2, 3 ve 4) oluştururken eğlenin. Ayrıca bakınız (4); Sağlam ve güvenli bir tarayıcı oluşturarak eğlenin.
  • C ++: Bir platformlar arası araç seti seçerken veya bir tane oluştururken eğlenin (1, 2, 3 ve 4). Eğlenin (4) bina içinde sağlam, güvenli bir tarayıcı.
  • C veya C ++ ve HLL: En iyi bahis. Dinamik dilde zehirinizi seçin; Bakınız (1) ve (2). Çok fazla iyi dil, her birinin çok az takipçisi. (1, 2, 3 ve 4) araç setinde.
  • Java: En iyi ikinci bahis, lütfen orta yönetimi kontrol etmek zorunda kalırsanız. Bakınız (4); Java'da devasa şeyler inşa etmek, bu listedeki herhangi bir şeyden çok ama belki de C'den daha fazla kod alır.
  • Scala: Java'yı (4) yener; (1) ve (2) ama anlaşılıyor.
  • C ve Javascript: Özel bir durum olarak, bu caziptir çünkü Javascript yorumlayıcısını kurmanız veya edinmeniz ve özümsemeniz gerekir. (Dolayısıyla Firefox.) (1, 2, 3 ve 4) araç setinde; Mozilla halkı kendi IIRC'sini kurdu.
  • C #: (3) 'de iyi eğlenceler. Muhtemelen GTK # ile sıkışmışsınızdır, ancak bu iyidir, ya da kendi katmanınızı ve oluşturucunuzu GTK # ve Windows Forms üzerine yerleştiriyorsunuz.
  • Ruby / Python / Perl / Raket / Lua / Erlange vb .: Çapraz platform widget kütüphanelerinde ve hızında (3) elde ettiniz. Moore kanunu sizinle birlikte (4); tarayıcılarda artan talep size karşı.
  • OCaml, Haskell, Common Lisp, Smalltalk: Maçalarda (1) ve (2). Muhtemelen hız sorunları yok, ancak (3) platformlar arası geliştirme için, herşeyi kendiniz inşa etmeniz veya bir şekilde C / C ++ kütüphanelerine köprü kurmanız gerekecek.
  • Amaç-C: (3) Çapraz platform geliştirmenin burada nasıl işe yarayacağından emin değilim.

Önümüzdeki birkaç yıl içinde başka bir büyük tarayıcı yükseldiğini görürsek, açık kaynaklı veya özel olsun, C veya C ++ dilinde ve dinamik bir dilde (Firefox gibi) yazılacağına bahse girerim.

Düzenleme (31 Temmuz 2013) : Hacker News’in yorumcuları, belirsizce "çeşitli hızlı" kepçenin içine belirsizce düşen Rust ve Go’dan (özellikle cevabımla bağlantılı değil) bahsediyor gibi görünüyor. Bu dil listesini eşitlikçi ve güncel tutmaya çalışmak kaybedilen bir savaş olacaktır, bu yüzden bunun yerine onu yazma ve yalnız bırakma zamanı olarak temsili bir örnek olarak adlandırıyorum.


4
Belirli bir tarayıcı ilk geliştirildiğinde WHEN'in de önemli bir rol oynadığını belirtmek için +1
Sparky

3
IE bugün çapraz platform olmasa da , kesinlikle bir zamanlar olduğu ve mevcut pazar payının neredeyse kesinlikle (en azından kısmen) bu çapraz platform yeteneğinden kaynaklandığını belirtmekte fayda var .
Jerry Coffin,

2
IE unutmayın idi çapraz platform Ie4 etrafında bir kez.
JasonFruit

2
Ne zaman için +1. Tek sebep bu. Birisi bugün bir tarayıcı projesine başlamışsa, büyük olasılıkla
Henry

4
@ Henry, C ++ kullanmaktan kaçınmaları muhtemel değildir. Cevap C ++ 'nın hala bulmacanın bir parçası olacağına işaret ediyor.
Anonymous Type

36

hız

Çirkin olduğu gibi, C ++ hala hızlı bir uygulama ve kod üzerinde tam kontrol istediğinizde kullandığınız şeydir.

Bu nedenle, oyunlar, Office'in çekirdek olmayan bölümleri (dosya ithalatçıları gibi) ve daha fazlası hala C ++ ile yazılmıştır.

MSalters'ın yanıtını içerecek şekilde düzenlendi


3
Oyunlar dışında, bu nedenlerin bu uygulamaların C ++ ile yazılmış olmaları olduğuna inanmıyorum. Her ne kadar ilk elden bilgiye sahipseniz, kanıtlanmış olduğum için mutluyum.
Henry

2
ilk elden bilgi? VS 2010, Office 2010, her ikisi de büyük uygulama paketleridir, ancak yaptıkları işte oldukça hızlıdırlar. Her ikisi de oldukça geniş bir COM mirası ve MS mirasına sahip olsa da, performans hala kullanıcılar için en önemli şey.
Anonim Tip

8
Başka ne yazıyla yazılmış olabilir? VB? C ve C ++, Microsoft'un büyük uygulamalar yazabilmesi için tek seçenek. Lütfen C # demeyin
Toby Allen

4
@Victor: VS2010 kaynağını görmedim, bu yüzden tamamen C # ile yazılmış olabilir.
Ryan Hayes

3
Eğer ofis bir C # uygulamasıysa, orjinal Ribbon bir MFC kontrolü neydi ve geliştirmek için bir C # tane beklemek zorunda kaldık? bu devasa uygulamaların hiçbiri C # dilinde yeniden yazılmayacak, bir WPF gui'ye (VS2010 gibi) sarılacak ve eski kodun büyük kısmı yeniden kullanılacaktır. MS bile en büyük uygulamalarını tamamen yeniden yazmak için gerekli kaynaklara sahip değil - kendilerine özellik eklemek için zaman harcamak istiyorlarsa.
gbjbaanb

17

taşınabilirlik

Sadece tahmin edebilirim ama birden fazla platformu hedef alan yazılım ürünlerinden bahsediyorsunuz ve C ++ herhangi bir platforma derlenebilir.


+10 - Ham performans dışında, çoğu tarayıcının IE hariç C ++ 'da GERÇEK nedeni olduğunu düşünüyorum. Çoğu tarayıcı birden fazla platformda çalışır ve aynı düzeyde performans gösterebilen VE platformlar arası uyumlu olabilecek birkaç dil / çerçeve vardır.
Jordan Parmer

Bunu ilk başta ben de düşündüm, fakat bir web tarayıcısı gibi bir GUI merkezli uygulama için. C ++ gerçekten diğer işletim sistemlerinde Java'dan daha taşınabilir mi?
JohnFx

1
Bir tarayıcı gerçekten bu GUI merkezli mi?
Kris Van Bael,

@JohnFx - Doğru, GUI kısmı muhtemelen o kadar taşınabilir değil. Ancak, örneğin bir tarayıcı uygulamasının çekirdeği HTML kullanımı, DOM ağaçları oluşturma, javascript'i ayrıştırma ve yeterince hızlı bir şekilde çalıştırma ile ilgilidir. İyi tasarlanmış bir uygulama aynı çekirdeği kolayca paylaşabilir ve her platform için farklı UI koduna sahip olabilir. Ve evet, C ++ Java'dan çok daha taşınabilir (ancak GUI'siz), çünkü C ++ için yalnızca CPU'yu hedefleyen bir derleyiciye ihtiyacınız vardır. Java için tam çerçeveye ihtiyacınız var.
Pete

Anladığım kadarıyla HTML işlemenin büyük bir kısmı WebKit gibi birkaç çekirdek araç tarafından gerçekleştiriliyordu. Belki de bu, C ++ 'ta olduğundan tüm tarayıcıların olmasıdır.
JohnFx

13

(Firefox'ta yaklaşık beş yıldır çalışıyorum.)

Sorgu yapan kişi, birçok Firefox kodunun C ++ olduğunu ve aslında kodun satırlarını sayarsanız çoğunluk C ++ olduğunu söylesin (tüm hikayeyi anlatmasa da, çok fazla JavaScript olduğundan ve JS daha fazla olduğundan) C ++ 'dan daha kısa.

Ancak gerçekte, Firefox birçok farklı dilde yazılmıştır:

  • C ++
  • C (NSS, NSPR, içe aktardığımız çeşitli kütüphaneler)
  • x86 ve ARM montajı
  • JavaScript
  • XUL (HTML benzeri bir işaretleme dili) ve CSS
  • Hedef C (yalnızca MacOS kodu)
  • Java (yalnızca Android kodu)
  • Birden çok özel arabirim tanımı dili (XPIDL, IPDL)
  • WebIDL (başka bir arabirim tanım dili, ancak bu, kod oluşturucu olmasına rağmen özel değil)
  • Python (kod üreteçleri)

Bazılarını unutacağımdan eminim.

Bu liste önemlidir, çünkü bir web tarayıcısının arkasındaki inanılmaz karmaşıklığa işaret eder.

Evet, Firefox’un birçok C ++ kodu var ve evet, Netscape’in kurulduğu zaman C ++’ın bu tür şeyler için en iyi dil olduğu gerçeğiyle bir ilgisi var. Ancak, bugün yaptığımız işlerin çoğunda daha iyi bir dil olmadığını da iddia ediyorum.

Başka hiçbir dilde güçlü bir kütüphane ekosistemi yoktur (yoğun olarak dış koda güveniyoruz). Çok az sayıda diğer diller size C ++ gibi tam yığın kontrol sağlar (özel yığın ayırıcımızı düzenli olarak kontrol ediyoruz ve her türden bellek güvenli olmayan şeyi daha hızlı veya daha az bellek kullanmak için yapıyoruz). Birkaç başka dil standart kütüphanenin çoğunu aklı başında bir şekilde yeniden uygulamanıza izin verir (ihtiyaçlarımıza göre ayarlanmış kendi dizgilerimiz ve koleksiyon uygulamalarımız vardır). Çok az sayıda başka dil kendi çöp toplayıcınızı uygulamanıza izin verir. Ve bunun gibi.

Her ne kadar C ++, yaptığımız işlerin birçoğu için bariz bir seçim olsa da, Java'da bir tarayıcı yazabileceğimizi ve gerektiğinde kendi JVM'imizi yazabileceğimizi öneren kişiler bir şeyler yapmalı. Bu esasen yaptığımız şey, fakat Java yerine JavaScript. Tabii ki, tarayıcının çoğu JavaScript’te yazılmamıştır. Ancak şaşırtıcı bir miktar.


Bu güvenli olmayan eylemler güvenlik sorunları kaynağı mıdır?
Demi

12

Eh, o kadar doğrudan bu ürünlerin geliştiriciler sormalısınız cevabı, ama aşinalık bir arada bulunuyor şüpheli (baytkoduna aksine bir yerli ikili derleme), performansı ve (bu o geliştiricilerin en iyi bildiği var) araçlar (C, C ++ gibi dillerle karşılaştırıldığında, STL gibi emek tasarrufu sağlayan güzel araçlarla doludur).


10

Tarih

Tarayıcıların her birinin dil seçimini etkileyen bir geçmişi vardır.

Örneğin, hem Chrome hem de Safari, KDE projesinin KHTML bölümünde kökeni olan WebKit'i temel alır. KDE başlangıçta Qt GUI araç setinin bir gösterimi olarak (kısmen) yaratıldı, bu nedenle KDE, genel olarak bir C ++ projesi. Tüm yeni KDE projeleri o zamanlar tamamen C ++ dilinde yazılmıştı, bu yüzden KHTML için mantıklı bir seçimdi. O zamandan beri diğer GUI araç takımlarını kullanacak şekilde yerleştirildi.

Opera'nın Presto motoru performans ve akılda küçük bir ikili boyutta yazılmıştır: C ++ mantıklı bir seçimdi.

Microsoft'un IE'si, COM bağlamaları olan herhangi bir dilde yazılmış, ancak kod tabanlarının çoğunluğu zaten bu dilde yazılmış olduğu için muhtemelen C ++ alt kümesinde yazılmış olan bir ActiveX bileşenleri koleksiyonu olarak yazılmıştır.

Netscape'in Mozilla'sı C ++ ile yazılmıştır, çünkü taşınabilirlik onların en büyük endişesiydi. C ve C ++ derleyicileri (neredeyse) her yerde bulunur ve bu nedenle mantıklı bir seçimdi.

Bu seçimler için doğal teknik sebep yoktur . Sadece "o zaman iyi bir fikir gibiydi."


8

C ve C ++ 'da ağ oluşturmak optimize etmek kolaydır, çünkü istemiyorsanız kitaplıkları kullanmak zorunda değilsiniz. C ++ 'ın tercih edilen dil olduğundan şüpheleniyorum çünkü C'nin avantajlarını sağlıyor:

  • hız
  • Optimizasyon
  • Belli miktarda taşınabilirlik
  • Derlenmiş dil, yorumlanmamış

OOP'un avantajları ile birleştiğinde:

  • uzayabilirlik
  • Daha kolay görselleştirme
  • Dizi işleme ve veri yapıları gibi kritik olmayan işler için daha iyi kütüphane desteği

Java veya C # 'nın bu avantajları yok mu?
Nipuna

5
Her ikisinde de uygulamalar geliştirdim ve sınırlı ağ işlevselliği için iyi olduklarını söyleyebilirim. Ancak, bir tarayıcı yaptığı gibi ağ kısmında ortalanan bir şey oluşturmak istemem. Olanlar üzerinde daha fazla kontrol sahibi olmak ve derlenmiş bir dil istiyorum .
Michael K,

Java ve C # da derlenir. C #, herhangi bir tarayıcının kritik bir parçası olan GUI'yi oluşturmaya gelince Java'ya göre avantaj sağlar. Java taşınabilirliği ile bir avantajı olurdu. Hem Java hem de C # hedef platformda derlendi - tartışmasız daha iyi hız iyileştirmeleri için.
Berin Loritsch

5
Hayır, yorumlanırlar. Bayt kodunu derler ve sanal bir makinede çalıştırırlar. Bu VM’nin, talimatlarından yerel olana göre bire bir yazışmaları yoktur.
Michael K,

1
Bunu daha geriye alamazdın! ağ; kıvrılmak için dışarı kabuk olabilir ve tarayıcı kadar hızlı olurdu. Ağ KODU yavaş bit değil. Ve eğer kütüphane değilse soket nedir? Dize İşleme; Bu, herhangi bir html tarayıcısının çekirdeğidir, kritik değildir ve C ++ 'dan C ++' dan daha kötü string işleme sahip tek bir dil düşünemiyorum
Henry

4

İlk tarayıcı turu için ilk kod satırları yazıldığında, C # ve Java yoktu. Ruby de yapmadı. Python buralarda olmuş olabilir, ancak bu noktada hala küçük bir homebrew projesiydi.

Temel olarak, C ++ dışında birisinin hızlı ve çok farklı platformlarda çalışacak bir tarayıcı yapmasına izin verecek başka seçenekler yoktu .

Peki neden C ++ 'da yazdılar? Çünkü yazılabilecek tek dil buydu.


1
'Yeni Tur' ile ne demek istediğinizi tam olarak bilmiyorsunuz. Ancak FF ve IE 90'lı yılların ortasına geri dönen kod tabanlarına sahiptir ve çoğu yeni tarayıcı, oluşturma motorlarından birini kullanır (örneğin, Chrome WebKit kullanır)
GrandmasterB

2
FF, eski Netscape kodundan kurtuldu (yani 90'lı yılların ortalarında şişkinlik) ve kendi oluşturma motorunu uyguladı. WebKit ayrıca nispeten yeni bir görüntü oluşturma motorudur (Chrome ve Safari tarafından kullanılır). IE hala tartmaya devam eden eski bir kabiliyetine sahiptir. Bu yüzden burada katılmıyorum.
Berin Loritsch,

2
En azından wikipedia'ya göre, hem gecko hem de webkit 1998'de başladı. C # o zamanlar etrafında değildi ve java sahnede yeniydi (ve süper halsizler ve gui'nin o zamanlar gerçekten çok kötüydü), bu yüzden uygulanabilir bir seçenek olmazdı. Bu yüzden başka hangi dillerin uygun olacağını bilmiyorum. Belki Pascal.
GrandmasterB

1
@Berin Loritsch: Evet, ama hiçbir zaman , mevcut tüm kodu atmadılar ve en başından itibaren (her şeyde) baştan başladılar; bu, başka bir dile çevirmek için yapmaları gereken şeydi. Ayrıca, C ++ 'nın yapışması konusundaki kararlarını yeterince iyi bilen / tanıyan kişilerin farklı bir dile geçmeleri de muhtemeldir.
Jerry Coffin,

2
@Berin Loritsch Çöp. FF hala Gecko (1997) 'ya dayanmaktadır ve Webkit khtml (1998)' e dayanmaktadır.
Henry

4

Çünkü, başka dillerde yazılmış olan tarayıcılar (örneğin, HotJava, açık bir şekilde Java'da yeterince açıktır) hiçbir zaman önemli ölçüde pazar kabul / kullanım oranına ulaşılmamıştır.

HotJava'nın mevcut yinelemesi hakkında (ya da en son - bir süredir güncellenmedi) bir şey söyleyemem , ancak denediğimde piyasaya sızma eksikliği (en azından benim için) çok kolay görünüyordu - Çirkin, yavaş ve epeyce web sayfaları ile uyumsuz. Nihayetinde, hiçbir zaman açıklığa kavuşturulamayan bir önceliğe dayanıyor gibiydi: web, öncelikle Java uygulamalarını içerecek, HTML'yi ise hangi uygulamaların nerede görüntüleneceğini söyleyen bir sarıcıdan daha az.

Bunun bir kısmı da muhtemelen tarihidir: büyük web tarayıcılarının çoğu uzun zamandır kullanılıyor. İlk yazıldığında manzara çok farklıydı: C ++ "sıcak" yeni bir dildi, bu yüzden birçok yeni gelişme için kullanılıyordu. Tarayıcılar, en çok kullanılan yazılımlardan bazıları haline geldi, oysa zamanın çoğu unutulmaya başladı.

Bence, dilin sergilenen “tavrı” nın da bir etkisi olduğunu düşünüyorum: C ++ (ondan önce C gibi) pratikliği ve pragmatizmi her zaman vurguladı. Bu temel tutum, aynı zamanda pragmatik olan programcıları da çekme eğilimindedir. Diğer birçok dilde zerafet gibi konulara daha çok vurgu yapılır - ve böylece, aynı şekilde düşünen programcıları çeker. Bununla ilgili sorun “Lisp etkisi” dediğim şey. Belirtiler şunları içerir:

  1. En önemsiz şeylerin en şık uygulaması üzerine sonsuz tartışmalar .
  2. Özelliklerin dondurulamaması ve gönderilebilecek bir şeyin bitmemesi (kusurlarda bile)
  3. Ödün vermeme. Benimle aynı fikirde olmayan herkes sadece yanlış değil, aptal ya da kötü olmalı.

Dahası var, ama genel bir fikir edindiniz (ve evet, bir dereceye kadar abartıyorum - ama sadece bir dereceye kadar). Evet, aldığınız bazı kodlar şaşırtıcı derecede güzel olacak - ancak olasılıklar altı ay geç olması ve çoğunlukla sistemdeki (olması gereken) koddaki diğer tüm kod parçalarıyla uyumsuz olması ve aldığınız zaman Başka hiçbir şeyin kullanamayacağınız kadar değiştiği oldukça adil bir şans.

Hiç kuşkusuz gayet iyi çalışan diller de var, ancak (doğru ya da yanlış) basitçe herhangi bir kimsenin kendilerine bir tarayıcı yazmış olduğu pazar payına sahip değil (ya da önemli bir zamanda sahip değildi). Tam bir tarayıcının boyutu ve karmaşıklığı göz önüne alındığında, bir tanesini geliştirmek çok fazla zaman alır. Bu tür bir yatırımla, çoğu insan geliştirme araçları gibi şeyler konusunda nispeten muhafazakar hale geliyor.


1
WRT noktası 3, kesinlikle bu yazı ağı bakan C ailesinde yazılım, yeterlilik olmadan, iddia olacaktır olup bunun gerekleri nedeniyle, aptal ya da kötü ya ya yaygın güvenliğini tanıtmak için bilinen bir sistemle çalışan bilmeden (aptal) veya bilerek (kötülük) delikler olacak kullanıcılara zarar. Ahlaki olarak, üzerine boyanmış bir hedefi olan bir asker beden zırhı vermeye eşdeğerdir.
Mason Wheeler,

9
@Mason: Söz konusu bağnazlığın tam olarak gösterilmesi kesinlikle takdir edilir.
Jerry Coffin,

2
@Mason: Saçmalama. Bir güvenlik deliği (önceden düzeltilmiş, ancak birçok sistem yöneticisi güncellenmiş kodu yüklemek için zahmet etmedi), aynı dilde yazılmış tüm kodların "zarar vereceğini" veya herhangi bir şey yapabileceğini ispatlamak için bile yakın değil. OpenBSD (bir örnek olarak), MacOS'un Pascal tabanlı sürümünün bile hedeflediğinden çok daha iyi bir güvenlik geçmişine sahip.
Jerry Coffin,

5
@Mason: Hayır, sizsiniz. İlk olarak, Morris solucanı kullanılan gets, korkunç bir işlev olan, ancak kaçınılmaz olan (ve dile kesinlikle "temel" olmayan bir terim olan) bir terimden yararlandı . İkincisi, C ++ her durumda C ile aynı dil değildir. Üçüncüsü, OpenBSD, güvenli yazılımın C dilinde yazılabildiğini ve yazıldığını oldukça iyi göstermektedir: C'ye sağlam, güvenli yazılım yazmayı engelleyen "temel dil hatası" yoktur. OpenBSD'nin küçük pazar payı, güvenliğin çoğu için büyük bir endişe olmadığını göstermektedir insanlar.
Jerry Coffin,

6
@Mason: arabellek taşması, kullandığınız arabellek uzunluğunu geçmemenizin getsbasit bir sonucudur. Bu dil için temel bir şey yok - aynı şeyi Pascal'da da yapabilirdiniz (ve benim de var). Akıllı bir saldırgana karşı güvenli bir yazılım yazmak dile bakmaksızın kolay değildir. Her üç deneyime dayanarak, Pascal'da C'den biraz daha kolay, C ++ da C'den çok daha kolay
Jerry Coffin

3

Kargo-kült programlama. "C ++ 'ın hızlı olduğu algısı hala ortadadır, (kötü düşünülmüş dil seviyesi özelliklerine rağmen, işleri yavaşlatan kötü kırılan nesne modeli gibi) ve insanlar tarayıcılarının hızlı olmasını isterler, bu yüzden C ++' da yazarlar. .

Aklı başında bir dünyada, ağa bakan yazılım yazan insanlar, C'nin tüm güvenlik konularıyla iç içe olan bir dili kullanma düşüncesiyle dehşete düşeceklerdi ve aslında bunu yapmak suç ihmali olacaktı. (Sadece son 15 yıl içerisinde çeşitli tarayıcılarda ne kadar tampon taşması kullanımının bulunduğuna bir bakın! Bu kodlayıcılar kaç milyon dolarlık zarardan sorumludur?)

Hızlı ikili dosyalar oluşturabilen başka derlenmiş diller var. Sorun şu ki, C ailesi ile aynı maruz kalmalarına sahip değiller ve hepimiz bunun için acı çekmek zorundayız.

Eğlenceli gerçek: Morris Worm 1988’de İnternet’e girdiğinde, C’de işletim sistemleri ve ağa dönük yazılımlar yazarken ortaya çıkan problemleri kesin olarak ortaya koyuyordu. ,) Apple, bugüne kadar gördüğüm en gelişmiş işletim sistemini, birkaç yıldan beri Pascal'da yazılmış.


15
Ha? Mac OS'yi çok sevdim ama dünyanın en gelişmiş işletim sistemi olarak adlandırmak aptalca. IBM'in büyük demir sistemlerinden bağımsız olarak, UNIX ve VMS ile aynı top parkında bile değildi: tek kullanıcı, sanal bellek yok, sınırlı işlem yönetimi. Çok hoş bir pencereleme sistemine sahip olduğundan emin olmak için, ama bu bile Xerox Parc'tan türetildi ve bir sürü akademik proje oldu. Ayrıca Mac OS'un çoğunun aslında M68k meclisine yazılmış olduğunu düşünüyorum. Kütüphaneler Pascal işlev çağrısı standartlarını kullandılar, çünkü Pascal'ın birincil uygulama dili olması bekleniyordu.
Charles E. Grant,

5
2000'lerin öncesi Apple'ın işletim sistemleri, MS eşdeğerinden daha kararlı değildi. 90'lı yıllarda iki projede çalışırken, biri Mac OS, biri de NT ile aynı sayıda çarpışma ve yeniden başlatma gerekti. Şimdi hepsi bir tür C tabanlı dil. (Apple, geçerli öğeleri için Objective-C kullanır). C tabanlı dillerde güvenlik daha zor olabilir, ancak farklı bir dil kullanmak aniden daha güvenli olmasını sağlamaz.
Berin Loritsch

13
@Mason, Mac’in o zaman bu özelliklere ihtiyaç duymaması aslında önemsiz olduğu anlamına gelmiyor. Apple OS'nin dünyadaki en gelişmiş olduğunu belirsiz bir açıklama yaptınız, ancak görünüşe göre gerçekten demek istediğin, en gelişmiş kullanıcı arayüzüne sahip olduğuydu. Bu savunulabilir bir ifadedir, fakat yazdıklarından çok daha az büyük. Kullanılabilir bir GUI yazmak zor. Güvenilir bir disk belleği bellek sistemi yazmak zor. Birinin diğerinden daha önemli olduğunu söylemek aptalca. Tüketici düzeyinde bilgi işlem artık bildiğimiz kadarıyla her ikisi olmadan da mümkün olamazdı.
Charles E. Grant,

5
@Mason: Deneyiminiz açıkça birçok kişiden ve herkesten oldukça farklıdır. :-)
Jerry Coffin,

3
@Mason: Mac OSX öncesi "Gelişmiş" olarak bahsederken LOL. Apple OS, en temelden ilkel dosya sistemi nedeniyle sürekli bir kilitlenme kaynağıydı.
Anonymous Type

2

Sistem düzeyinde API'lere erişim

Tüm tarayıcıların işletim sistemi ile bir noktada arayüzü olması gerekir ve başlıca işletim sistemlerinin çoğunda köklü C ve C ++ API'leri ve kitaplıkları bulunur. Bu API'lerle çalışmak genellikle sarmalayıcılardan ziyade C veya C ++ ile çalışmak daha kolaydır.


0

Kontrol ve Taşınabilirlik

Hız argümanlarının çoğu her iki yönde de olabilir, ancak bir şeylerin nasıl yapıldığına dair kesin kontrole ihtiyaç duyduğunuz herhangi bir şeyde, birçok üst seviye dilin birçoğu geçit töreninizde yağmur yağacaktır. Bunun istisnaları var, ancak çoğu tarayıcı gibi bir şeyi saymaya yetecek kadar platform arası değil.


0

Eski uyumluluk - eski kodu atamazsınız

Diğer dillere karşı C ++ 'ın esası ile ilgisi yoktur. Kesinlikle Haskell gibi bir dilde sıfırdan daha iyi bir tarayıcı yazabilirsiniz; Bu önemli bir proje, bazı performans özelliklerini garanti etmek için ihtiyaç duymaları halinde kendi JVM'lerini bile uygulayabilir. Facebook'un kendi PHP derleyicisini / iyileştiricisini nasıl yazdığı gibi.

Standart olmayan işaretlemeyi bozan bir tarayıcı işe yaramazdan daha kötüdür. Eski uyum o kadar kritik ve o kadar karmaşık ki, bir yeniden yazma sadece bir seçenek değil. Savaşta test edilmiş güvenlik vb. İşlere çok fazla para ve zaman harcanıyor. Yine, Facebook'un hala PHP dilinde yazıldığı gibi.


İnsanların bunu neden abartmayacağını ... ama reddettiğini anlayabiliyorum. Bu tuhaf. İşte sizin için bir +1.
Thomas Eding,

(Küçük) bir noktanız var, ancak ilk cümleniz bunu çöpe atıyor. Tabii ki C ++ 'ın ve diğer dillerin avantajlarıyla da ilgili.
Chiel ten Brinke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.