เหตุใดเบราว์เซอร์ส่วนใหญ่จึงถูกพัฒนาใน C ++ [ปิด]


99

ดูเหมือนว่าเว็บเบราว์เซอร์ทั่วไปส่วนใหญ่ (Firefox, Chrome, Safari) ได้รับการพัฒนาโดยใช้ C ++ มันเป็นอย่างนั้นเหรอ?


28
Firefox เขียนใน C ++ และ Javascript ไม่ใช่แค่ C ++
Jesse Millikan

1
คำถามนี้น่าจะมีคำตอบบางคำตอบโดยสมมติว่ามันถูกต้อง (หมายเหตุความเห็นของ Jesse เกี่ยวกับ Firefox และมีเบราว์เซอร์จำนวนมากนอกเหนือจากทั้งสามและ IE) ฉันไม่คิดว่ามันจะเป็นประโยชน์
David Thornley

1
นี่เป็นกลุ่มที่ถูกต้องสำหรับคำถามนี้หรือไม่?
Martin York

6
@Jesse ไม่ใช่ล่าม js ที่เขียนด้วยภาษา C ++? นั่นจะทำให้มันเป็นภาษา C ++ ใช่ไหม? (ฉันอาจจะผิด .. )
cambraca

5
@ambraca ด้วยตรรกะนั้นทุกอย่างเป็นรหัสการประกอบ!
Juan Mendes

คำตอบ:


165

อีกวิธีหนึ่งในการถามคำถามคือเบราว์เซอร์ต้องการการสนับสนุนประเภทใด รายการสั้น ๆ คือ:

  • รองรับการวิเคราะห์คำ (จำเป็นต้องคำนึงถึง [X] HTML, CSS และ [ECMA / Java] สคริปต์)
  • คุณลักษณะการเดิน / ตีความต้นไม้ (ส่วนหนึ่งของการแยกวิเคราะห์และการสร้าง UI)
  • รองรับกราฟิกเร่งความเร็ว
  • เครือข่ายที่รวดเร็ว
  • สำหรับเบราว์เซอร์ขั้นสูง: ควบคุมกระบวนการและแยกหน่วยความจำระหว่างหน้า
  • ต้องทำงานบนแพลตฟอร์มที่รองรับทั้งหมด

ภาษาส่วนใหญ่มีการสนับสนุนการแยกวิเคราะห์บางอย่าง คุณมีตัวแยกวิเคราะห์สำหรับ C, C ++, C #, Java และอื่น ๆ อย่างไรก็ตาม C และ C ++ นั้นมีเวลาค่อนข้างน้อยที่จะเริ่มต้นในส่วนที่เหลือของทางเลือกอื่น ๆ การเข้าถึงกราฟิกที่เร่งความเร็วใน Java นั้นเป็นเรื่องที่ไม่เว้นเสียแต่ว่าคุณจะมีส่วนขยายเนทีฟบางส่วนเพื่อใช้งาน WPF บน C # ให้การเข้าถึงกราฟิกเร่ง แต่มันใหม่เกินไปที่จะมีเบราว์เซอร์ที่ร้ายแรงสร้างขึ้นด้วยเทคโนโลยี

การสร้างเครือข่ายเป็นเหตุผลอย่างน้อยที่สุดในการเลือก C ++ มากกว่า Java หรือ C # เหตุผลก็คือการสื่อสารนั้นช้ากว่าการประมวลผลส่วนที่เหลือที่จะแสดงหน้า ความเร็วที่แท้จริงของเส้นลวดเป็นปัจจัย จำกัด ทั้ง Java และ C # มีการสนับสนุน IO แบบไม่มีการบล็อกเช่นเดียวกับ C ++ ดังนั้นจึงไม่มีผู้ชนะที่ชัดเจนในพื้นที่นี้

ทำไมไม่ใช้จาวา คุณเคยพยายามสร้าง UI ด้วย Java หรือไม่? มันรู้สึกยุ่งยากและช้าเมื่อเทียบกับสิ่งอื่นที่นั่นเพราะมันเป็น ไม่มีกราฟิกเร่งความเร็วเป็นค่าลบขนาดใหญ่ที่นี่ การทำแซนด์บ็อกซ์ของ Java นั้นดีจริงๆและสามารถช่วยปรับปรุงความปลอดภัยของเบราว์เซอร์ได้หากใช้อย่างถูกต้อง แต่เป็นความเจ็บปวดในการกำหนดค่าและทำงาน ไม่ต้องพูดถึงการสนับสนุนรูปแบบกราฟิกล่าช้าหลังเบราว์เซอร์ที่ทันสมัยที่สุด

ทำไมไม่ใช้ C # หากเป้าหมายเดียวของคุณคือ Windows, C # อาจเป็นตัวแทนที่ดี ปัญหาเกิดขึ้นเมื่อคุณต้องการสนับสนุนสิ่งอื่น โมโนยังไม่เพียงพอที่จะพิจารณาข้ามแพลตฟอร์มมากพอสำหรับงานนี้ - โดยเฉพาะอย่างยิ่งกับการรองรับกราฟิกเร่งความเร็วและ WPF ใครจะรู้ว่าต้องใช้เวลานานเท่าไหร่ในการเปลี่ยนแปลง

ทำไมไม่ C มีคอมไพเลอร์ C สำหรับเกือบทุกแพลตฟอร์มที่นั่น (รวมถึงอุปกรณ์ฝังตัว) อย่างไรก็ตามมีหลายอย่างที่ C ไม่ได้ทำเพื่อคุณซึ่งคุณจะต้องระมัดระวังเป็นพิเศษ คุณสามารถเข้าถึงระดับต่ำสุดของ API ได้ แต่นักพัฒนา C ส่วนใหญ่ไม่ใช้ GUI แม้แต่ไลบรารี C GUI ก็ถูกเขียนในลักษณะที่เป็นวัตถุ ทันทีที่คุณเริ่มพูดกับ UI ภาษาเชิงวัตถุจะเริ่มเข้าใจได้ดีขึ้น

ทำไมไม่ใช้ Objective C ถ้าเป้าหมายเดียวของคุณคือ Apple มันสมเหตุสมผลดี อย่างไรก็ตามนักพัฒนาส่วนใหญ่ไม่รู้จัก Objective-C และเหตุผลเดียวที่จะเรียนรู้ก็คือการทำงานบนกล่อง NeXT หรือ Apple แน่นอนว่าคุณสามารถใช้ไลบรารี่ C กับ Objective-C และมีคอมไพเลอร์สำหรับหลาย ๆ แพลตฟอร์ม แต่การหาคนทำงานให้มันจะทำให้ยากขึ้น ใครจะรู้? บางทีแอปเปิ้ลสามารถเปิดรับการขาดการรับรู้นี้

ทำไมต้อง C ++ มีคอมไพเลอร์ C ++ สำหรับทุกแพลตฟอร์มที่มี ห้องสมุด GUI เกือบทุกแห่งมีอินเทอร์เฟซ C ++ บางครั้งก็ดีกว่าและบางครั้งก็แตกต่างกัน ตัวอย่างเช่น ATL ของ Microsoft นั้นดีกว่าการเรียกใช้ฟังก์ชัน win32 C หรือแม้แต่ไลบรารี MFC มีตัวห่อ C ++ สำหรับ GTK บน Unix และฉันจะแปลกใจถ้ามีคนที่ไม่มีตัวห่อ C ++ รอบ ๆ ไลบรารี Objective-C GUI ของ Apple การจัดการกระบวนการง่ายกว่าภายใน C ++ มากกว่า Java หรือ C # (รายละเอียดเหล่านั้นจะถูกย่อให้คุณ) ความเร็วที่รับรู้นั้นมาจากการเร่งความเร็วฮาร์ดแวร์มากกว่าประสิทธิภาพแบบดิบ C ++ ดูแลสิ่งต่าง ๆ ให้คุณมากกว่า C ดิบ (เช่นสตริงที่มีขอบเขต) แต่ก็ยังให้อิสระคุณในการปรับแต่งสิ่งต่างๆ

ในขณะนี้ C ++ ได้เพิ่มทางเลือกให้กับคุณ


4
สำหรับแพลตฟอร์มที่ไม่ใช่ของ Apple และที่ไม่ใช่ของ NeXT จะมีคอลเล็กชัน GNUStep มันเป็นส่วนใหญ่เข้ากันได้กับโกโก้และทำงานใกล้แช่งทุกที่
greyfade

5
จำไว้ว่า Java จะต้องไม่ใช้ Swing (ซึ่งเป็นห้องสมุดเส็งเคร็ง) สำหรับ GUI ตัวอย่างเช่นเรามีการผูก Qt
Anto

2
ตามmy.opera.com/kilsmo/blog/2008/01/29/opera-is-not-based-on-qt Opera ไม่ได้ขึ้นอยู่กับ Qt
Anto

2
ฉันไม่เคยพูดว่า Opera มีพื้นฐานมาจาก Qt ฉันหมายความว่าเบราว์เซอร์ที่ไม่ใช่ฟรีนั้นยากที่จะขายเมื่อมีตัวเลือกฟรีที่ยอดเยี่ยมมากมาย
Berin Loritsch

7
ความพร้อมใช้งานของตัวแยกวิเคราะห์ไม่เกี่ยวข้องจริง ๆ - ในทุกเบราว์เซอร์ HTML, XML และตัวแยกวิเคราะห์ JS นั้นเขียนด้วยมือและ CSS อยู่ในบางส่วน
gsnedders

89

ฉันตัดสินใจที่จะเขียนนวนิยายเกี่ยวกับเรื่องนี้ด้วยความหวังว่าผู้คนจะปัดเป่ามันและถอนฉันออก ไม่ไม่ล้อเล่น! ฉันทนทุกข์ทรมานทุกคำ ทุกคำฉันบอกคุณแล้ว!

ถาม 'เมื่อ' ก่อน 'ทำไม'

เว็บเบราว์เซอร์หลักทั้งหมดสามารถติดตามต้นกำเนิดของพวกเขากลับไปเป็น 90 Konqueror กลายเป็น Safari และ Chrome Netscape กลายเป็น Firefox IE และ Opera ยังคงเป็น IE และ Opera เบราว์เซอร์เหล่านี้ล้วนมีจุดเริ่มต้น 15 ปีสำหรับผู้ครอบครองตลาด

ฉันขอแนะนำให้คุณลองตั้งชื่อภาษาข้ามแพลตฟอร์มที่ยอมรับได้ (Windows / Mac / Unix และที่แย่กว่านั้น) ซึ่งมีให้บริการในราวปี 1995 เมื่อเบราว์เซอร์สมัยใหม่เริ่มต้นขึ้น หากต้องการสร้างคอร์ในอะไรก็ได้ยกเว้น 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. ปัญหาทางเทคนิค

แม้ในยุคปัจจุบันคุณต้องการภาษาที่รวดเร็วสำหรับการคำนวณส่วนต่าง ๆ ของหน้าแสดงผลและใช้จาวาสคริปต์ คุณสามารถเลือกที่จะเสริมด้วยภาษาระดับสูงสำหรับการสร้างองค์ประกอบ GUI ฯลฯ (เช่นวิธี Firefox ของ C ++ และ Javascript) แต่คุณต้องมีการผสานอย่างใกล้ชิดระหว่างภาษา คุณไม่สามารถพูดว่า "โอเค C # และ Lua" คุณอาจจะต้องสร้างและแก้ไขข้อผิดพลาดที่เชื่อมโยงตัวคุณเองเว้นแต่คุณจะเลือก C หรือ C ++ เป็นภาษาหลัก

การพัฒนาข้ามแพลตฟอร์มเป็นเวิร์มหนึ่งถุง คุณสามารถใช้ C # หรือ F # และใช้นิ้วของคุณกับ GTK # และ Mono ที่มีชีวิตอยู่และดีในอนาคต คุณสามารถลอง Common LISP, Haskell, OCaml ... โชคดีที่ทุกอย่างทำงานบน Windows และ Mac และ Linux

4. พลังภาษา

หลังจากนั้นคุณต้องสร้างฟังก์ชั่นจำนวนมหาศาลดังนั้นหากคุณเลือกภาษาระดับต่ำคุณต้องมีกองทัพโคเดอร์ที่ยิ่งใหญ่กว่าเดิม โปรดทราบว่าไม่มีใครได้สร้างเบราว์เซอร์ตั้งแต่เริ่มต้นในเวลาประมาณสิบห้าปี ส่วนหนึ่งเป็นเพราะ (แปลกใจ!) มันยาก

โดยเฉพาะการมีล่าม Javascript นั้นเป็นปัญหา 3 (รับมาหนึ่งรายการ) หรือมีปัญหา 4 (สร้างขึ้นหนึ่งรายการ)

สรุป:

หากคุณพัฒนาเบราว์เซอร์สามแพลตฟอร์ม (Windows / Mac / * ระวัง) วันนี้ (ต้นปี 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: ทางออกที่ดีที่สุดอันดับที่สองถ้าคุณต้องการผู้บริหารระดับกลาง ดู (4); การสร้างสิ่งที่ยิ่งใหญ่ใน Java นั้นต้องใช้รหัสมากกว่าสิ่งอื่นในรายการนี้ แต่อาจจะเป็น C
  • Scala: Beats Java บน (4); (1) และ (2) แต่มันยังติดอยู่
  • C และ Javascript: เป็นกรณีพิเศษสิ่งนี้น่าสนใจเพราะคุณต้องสร้างหรือรับและรวบรวมล่าม Javascript (ดังนั้น Firefox.) (1, 2, 3 และ 4) บนชุดเครื่องมือ คน Mozilla สร้าง IIRC ขึ้นมาเอง
  • C #: ขอให้สนุกกับ (3) คุณอาจติดอยู่กับ GTK # แต่ก็ดีหรือสร้างเลเยอร์และ renderer ของคุณเองเหนือ GTK # และ Windows Forms
  • Ruby / Python / Perl / Racket / Lua / Erlange เป็นต้น: คุณมี (3) ในไลบรารีวิดเจ็ตข้ามแพลตฟอร์มและความเร็ว กฎของมัวร์อยู่กับคุณใน (4); ความต้องการเพิ่มขึ้นในเบราว์เซอร์กับคุณ
  • OCaml, Haskell, Common Lisp, Smalltalk: (1) และ (2) ในโพดำ ไม่มีปัญหาเรื่องความเร็ว แต่อาจ (3) สำหรับการพัฒนาข้ามแพลตฟอร์มและคุณจะต้องสร้างทุกอย่างของคุณเองหรือเชื่อมต่อกับไลบรารี C / C ++ อย่างใด
  • วัตถุประสงค์ -C: (3) ฉันไม่แน่ใจว่าการพัฒนาข้ามแพลตฟอร์มจะทำงานที่นี่ได้อย่างไร

ถ้าเราเห็นเบราว์เซอร์หลัก ๆ เพิ่มขึ้นในอีกไม่กี่ปีข้างหน้าฉันจะพนันว่ามันจะเขียนเป็น C หรือ C ++ และภาษาแบบไดนามิก (เช่น Firefox) ไม่ว่าจะเป็นโอเพนซอร์ซหรือเป็นกรรมสิทธิ์

แก้ไข (31 กรกฎาคม 2013) : ผู้แสดงความคิดเห็นในข่าว Hacker ดูเหมือนจะพูดถึง Rust and Go (ไม่ใช่เฉพาะสำหรับคำตอบของฉัน) ซึ่งตกอยู่ในถัง "เบ็ดเตล็ดเร็ว" การพยายามเก็บรายชื่อภาษาที่มีความคุ้มค่าและทันสมัยอยู่เสมอจะเป็นการสูญเสียการต่อสู้ดังนั้นฉันจึงเรียกมันว่าเป็นตัวอย่างของตัวแทนเมื่อถึงเวลาเขียนและทิ้งไว้ตามลำพัง


4
+1 สำหรับการสังเกตว่าเมื่อเบราว์เซอร์ใดได้รับการพัฒนาขึ้นเป็นครั้งแรกก็มีบทบาทสำคัญเช่นกัน
ปาร์กกี้

3
เป็นที่น่าสังเกตว่าแม้ว่า IE อาจจะไม่ข้ามแพลตฟอร์มในวันนี้แต่ก็เป็นครั้งเดียวและส่วนแบ่งการตลาดในปัจจุบันนั้นมาจากความสามารถข้ามแพลตฟอร์มที่แน่นอน
Jerry Coffin

2
โปรดทราบว่า IE เป็นแพลตฟอร์มข้ามแพลตฟอร์มหนึ่งรอบ IE4
JasonFruit

2
+1 เมื่อใด นั่นคือเหตุผลเดียว หากมีคนเริ่มโครงการเบราว์เซอร์ในวันนี้พวกเขาส่วนใหญ่จะไม่ใช้ C ++
Henry

4
@Henry ไม่น่าเป็นไปได้ที่พวกเขาจะยกเว้นโดยใช้ C ++ คำตอบบันทึกไว้ว่า C ++ ยังคงเป็นส่วนหนึ่งของปริศนา
ไม่ระบุตัวตนพิมพ์

36

ความเร็ว

น่าเกลียดเหมือนเดิม C ++ ยังคงเป็นสิ่งที่คุณใช้เมื่อคุณต้องการแอปพลิเคชันที่รวดเร็วและควบคุมรหัสได้อย่างสมบูรณ์

นี่คือเหตุผลที่เกมส่วนที่ไม่ใช่คอร์ (เช่นผู้นำเข้าไฟล์) ของ Office และอื่น ๆ ยังคงเขียนใน C ++

แก้ไขเพื่อรวมการตอบกลับจาก MSalters


3
นอกเหนือจากเกมฉันไม่เชื่อว่าเหตุผลเหล่านี้เป็นสาเหตุที่ทำให้แอปเหล่านั้นเขียนด้วยภาษา C ++ แม้ว่าคุณจะมีความรู้มือแรก แต่ฉันก็ยินดีที่จะได้รับการพิสูจน์ผิด
Henry

2
ความรู้มือแรก? VS 2010, Office 2010 เป็นทั้งแอพสวีทขนาดใหญ่ แต่พวกเขาก็รวดเร็วในสิ่งที่พวกเขาทำ ในขณะที่ทั้งคู่มีมรดก COM ที่ค่อนข้างใหญ่และมรดกทาง MS แต่ประสิทธิภาพยังคงเป็นสิ่งที่สำคัญที่สุดสำหรับผู้ใช้
ไม่ระบุตัวตนพิมพ์

8
จะมีการเขียนสำนักงานอะไรอีก VB? C และ C ++ เป็นตัวเลือกเดียวสำหรับ Microsoft การเขียนปพลิเคชันที่มีขนาดใหญ่ในอย่าพูดว่า C # โปรด.
โทบี้อัลเลน

4
@Victor: ฉันไม่ได้เห็นแหล่งที่มาสำหรับ VS2010 ดังนั้นมันอาจจะเขียนได้อย่างสมบูรณ์ใน C #
Ryan Hayes

3
ถ้า office เป็นแอป C # ทำไมการควบคุม Ribbon a MFC ดั้งเดิมและเราต้องรออายุที่จะพัฒนา C # หนึ่ง ไม่มีแอปพลิเคชันขนาดใหญ่เหล่านี้จะถูกเขียนใหม่ใน C # พวกเขาจะถูกห่อด้วย WPF gui (เช่น VS2010) และโค้ดเก่าจำนวนมากจะถูกนำมาใช้ซ้ำ แม้แต่ MS ก็ยังไม่มีทรัพยากรในการเขียนแอพที่ใหญ่ที่สุดของพวกเขาอีกครั้งอย่างสมบูรณ์ - ไม่ใช่หากพวกเขาต้องการใช้เวลาในการเพิ่มคุณสมบัติให้กับพวกเขาด้วย
gbjbaanb

17

ความเบา

ฉันเดาได้ แต่คุณกำลังพูดถึงผลิตภัณฑ์ซอฟต์แวร์ที่กำหนดเป้าหมายหลายแพลตฟอร์มและสามารถรวบรวม C ++ ไปยังแพลตฟอร์มใดก็ได้


+10 - นอกเหนือจากประสิทธิภาพแบบดิบฉันคิดว่านี่เป็นเหตุผลที่เบราว์เซอร์ส่วนใหญ่อยู่ใน C ++ ยกเว้น IE เบราว์เซอร์ส่วนใหญ่ทำงานบนหลายแพลตฟอร์มและมีภาษา / กรอบงานน้อยที่สามารถทำงานได้ในระดับเดียวกันและสามารถทำงานร่วมกันข้ามแพลตฟอร์มได้
Jordan Parmer

ฉันคิดว่านี่เป็นครั้งแรกเช่นกัน แต่สำหรับแอปพลิเคชันแบบรวมศูนย์ GUI เช่นเว็บเบราว์เซอร์ C ++ นั้นพกพาไปยังระบบปฏิบัติการอื่น ๆ ได้มากกว่าการพูดถึง Java หรือเปล่า
JohnFx

1
เบราว์เซอร์นั้นมี GUI เป็นศูนย์กลางจริงๆหรือ?
Kris Van Bael

@JohnFx - ถูกต้องส่วน GUI อาจไม่ใช่อุปกรณ์พกพาขนาดนั้น แต่หลักของแอปพลิเคชั่นเบราว์เซอร์เช่นเกี่ยวกับการจัดการ HTML การสร้างต้นไม้ DOM การแยก javascript และดำเนินการอย่างรวดเร็วเพียงพอ แอปพลิเคชันที่ออกแบบมาอย่างดีสามารถแชร์แกนเดียวกันและมีรหัส UI ที่แตกต่างกันสำหรับแต่ละแพลตฟอร์ม และใช่ C ++ นั้นพกพาได้ง่ายกว่า Java (แต่ไม่มี GUI) เพราะสำหรับ C ++ คุณต้องการคอมไพเลอร์ที่กำหนดเป้าหมาย CPU สำหรับ Java คุณต้องมีเฟรมเวิร์กแบบเต็ม
Pete

ฉันเข้าใจว่าการประมวลผล HTML ส่วนใหญ่ทำได้โดยเครื่องมือหลักบางอย่างเช่น WebKit อาจเป็นเพราะสิ่งเหล่านั้นอยู่ใน C ++ ที่เบราว์เซอร์ทั้งหมดเป็นอย่างไร
JohnFx

13

(ฉันทำงานกับ 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 (ผู้สร้างรหัส)

ฉันแน่ใจว่าฉันลืม

รายการนี้มีความสำคัญเนื่องจากมันบอกใบ้ถึงความซับซ้อนที่เหลือเชื่อที่อยู่เบื้องหลังเว็บเบราว์เซอร์

ใช่ Firefox มีรหัส C ++ มากมายและใช่ว่าเกี่ยวข้องกับความจริงที่ว่า C ++ เป็นภาษาที่ดีที่สุดสำหรับสิ่งนี้เมื่อก่อตั้ง Netscape แต่ฉันก็ยืนยันว่าวันนี้ไม่มีภาษาที่ดีกว่าสำหรับสิ่งที่เราทำ

ไม่มีภาษาอื่นใดที่มีระบบนิเวศที่แข็งแกร่งของห้องสมุด (เราพึ่งพารหัสภายนอกอย่างมาก) มีภาษาอื่นเพียงไม่กี่แห่งที่ให้การควบคุมเต็มรูปแบบเช่น C ++ (เราปรับแต่งตัวจัดสรรฮีปที่กำหนดเองเป็นประจำและทำสิ่งที่ไม่ปลอดภัยสำหรับหน่วยความจำทุกประเภทให้เร็วขึ้นหรือใช้หน่วยความจำน้อยลง) มีภาษาอื่นเพียงไม่กี่แห่งที่ให้คุณนำไลบรารี่มาตรฐานส่วนใหญ่กลับมาใช้ใหม่ได้อย่างมีสติ (เรามีการใช้งานสตริงและคอลเลกชันของเราเองตามความต้องการของเรา) มีภาษาอื่นอีกสองสามภาษาที่ให้คุณใช้งานตัวรวบรวมขยะของคุณเอง และอื่น ๆ

แม้ว่า C ++ จะเป็นตัวเลือกที่ชัดเจนสำหรับสิ่งที่เราทำมากมายคนที่แนะนำว่าเราสามารถเขียนเบราว์เซอร์ใน Java และเขียน JVM ของเราเองหากจำเป็น นี่คือสิ่งที่เราทำ แต่ด้วยจาวาสคริปต์แทนที่จะเป็นจาวา แน่นอนว่าเบราว์เซอร์ส่วนใหญ่ไม่ได้เขียนด้วย JavaScript แต่จำนวนที่น่าแปลกใจคือ


การกระทำที่ไม่ปลอดภัยของหน่วยความจำเหล่านี้เป็นสาเหตุของปัญหาความปลอดภัยหรือไม่
Demi

12

ดีที่คุณจะต้องขอให้นักพัฒนาของผลิตภัณฑ์เหล่านั้นได้โดยตรงที่จะได้รับคำตอบ แต่ผมสงสัยว่ามันคือการรวมกันของความคุ้นเคย (มันเป็นสิ่งที่นักพัฒนาผู้รู้ดีที่สุด) ผลการดำเนินงาน (รวบรวมเพื่อไบนารีพื้นเมืองเมื่อเทียบกับ bytecode) และ เครื่องมือ (เทียบกับภาษาอย่าง C, C ++ เต็มไปด้วยแกดเจ็ตที่ช่วยประหยัดแรงงานอย่าง STL)


10

ประวัติศาสตร์

เบราว์เซอร์แต่ละตัวมีประวัติบางอย่างที่มีอิทธิพลต่อการเลือกภาษา

ตัวอย่างเช่นทั้ง Chrome และ Safari ขึ้นอยู่กับ WebKit ซึ่งมีต้นกำเนิดอยู่ในส่วน KHTML ของโครงการ KDE เดิม KDE นั้นถูกสร้างขึ้น (ส่วนหนึ่ง) เป็นการสาธิตชุดเครื่องมือ Qt GUI ดังนั้น KDE จึงเป็นโครงการ C ++ โดยรวม โครงการ KDE ใหม่ทั้งหมดนั้นเขียนด้วยภาษา C ++ ทั้งหมดซึ่งเป็นตัวเลือกเชิงตรรกะสำหรับ KHTML มันถูกย้ายไปใช้ชุดเครื่องมือ GUI อื่น ๆ

เอนจิ้น Presto ของ Opera ถูกเขียนด้วยประสิทธิภาพและขนาดไบนารี่ขนาดเล็ก: C ++ เป็นตัวเลือกที่สมเหตุสมผล

Microsoft ของ IE ถูกเขียนขึ้นเป็นชุดของส่วนประกอบ ActiveX ซึ่งสามารถเขียนได้ในภาษาใด ๆ ที่มีการผูก COM แต่น่าจะเขียนในชุดย่อยของ C ++ เนื่องจากส่วนใหญ่ของ codebase ของพวกเขาถูกเขียนไปแล้วในภาษานั้น

Mozilla ของ Netscape นั้นเขียนด้วยภาษา C ++ เนื่องจากความสามารถในการพกพาเป็นปัญหาหลักของพวกเขา คอมไพเลอร์ C และ C ++ เป็นที่แพร่หลายทุกหนทุกแห่งดังนั้นมันจึงเป็นตัวเลือกเชิงตรรกะ

ไม่มีเหตุผลทางเทคนิคโดยธรรมชาติสำหรับตัวเลือกเหล่านี้ เป็นเพียง "ดูเหมือนความคิดที่ดีในเวลานั้น"


8

ระบบเครือข่ายใน C และ C ++ นั้นง่ายต่อการปรับให้เหมาะสมเนื่องจากคุณไม่จำเป็นต้องใช้ไลบรารีถ้าคุณไม่ต้องการ ฉันสงสัยว่า C ++ เป็นภาษาที่เลือกเพราะช่วยให้ข้อดีของ C:

  • ความเร็ว
  • การเพิ่มประสิทธิภาพ
  • จำนวนพกพาบางอย่าง
  • ภาษาที่รวบรวมไม่ถูกตีความ

ประกอบกับข้อดีของ OOP:

  • ขยาย
  • การสร้างภาพง่ายขึ้น
  • สนับสนุนไลบรารีที่ดีขึ้นสำหรับงานที่ไม่สำคัญเช่นการประมวลผลสตริงและโครงสร้างข้อมูล

Java หรือ C # ไม่มีข้อได้เปรียบเหรอ?
Nipuna

5
ฉันได้พัฒนาแอพทั้งคู่และฉันบอกว่าสำหรับการใช้งานเครือข่ายที่ จำกัด พวกเขาก็ใช้ได้ อย่างไรก็ตามฉันไม่ต้องการสร้างสิ่งใดก็ตามที่มีศูนย์กลางอยู่ที่ส่วนเครือข่ายเช่นเดียวกับเบราว์เซอร์ ฉันจะต้องการการควบคุมมากขึ้นกว่าสิ่งที่เกิดขึ้นและฉันต้องการภาษารวบรวม
Michael K

Java และ C # ยังรวบรวม C # จะมีความได้เปรียบเหนือ Java เมื่อพูดถึงการสร้าง GUI ซึ่งเป็นส่วนสำคัญของเบราว์เซอร์ใด ๆ Java จะมีข้อได้เปรียบกับการพกพา ทั้ง Java และ C # ได้รับการคอมไพล์ใหม่บนแพลตฟอร์มเป้าหมายเพื่อปรับปรุงความเร็วให้ดียิ่งขึ้น
Berin Loritsch

5
ไม่พวกเขาถูกตีความ พวกเขารวบรวมเพื่อ bytecode และทำงานบนเครื่องเสมือน VM นั้นไม่มีการโต้ตอบแบบหนึ่งต่อหนึ่งจากชุดคำสั่งเป็นชุดดั้งเดิม
Michael K

1
คุณไม่สามารถย้อนกลับไปได้อีกแล้ว! เครือข่าย; คุณสามารถ shell ออกไปขดและเบราว์เซอร์จะเป็นเร็ว รหัสเครือข่ายไม่ใช่บิตช้า และซ็อกเก็ตคืออะไรถ้าไม่ใช่ห้องสมุด? การประมวลผลสตริง; นี่คือแกนหลักของเบราว์เซอร์ html ใด ๆ ไม่ใช่สิ่งที่ไม่สำคัญและฉันไม่สามารถนึกถึงภาษาเดียวที่มีการจัดการสตริงที่แย่กว่า C ++ นอกเหนือจาก C
Henry

4

เมื่อเขียนโค้ดบรรทัดแรกสำหรับเบราว์เซอร์รอบแรกแล้ว C # และ Java ก็ไม่มีอยู่จริง และก็ทับทิม งูเหลือมอาจจะมีอยู่รอบ ๆ แต่มันก็ยังเป็นโครงการ homebrew เล็ก ๆ ณ จุดนั้น

โดยพื้นฐานแล้วมีตัวเลือกอื่น ๆ นอกเหนือจาก C ++ ที่อนุญาตให้สร้างเบราว์เซอร์ที่รวดเร็วและทำงานบนแพลตฟอร์มที่แตกต่างกัน

แล้วทำไมพวกเขาถึงเขียนด้วยภาษา C ++? เพราะนั่นเป็นภาษาเดียวเท่านั้นที่พวกเขาสามารถเขียนได้


1
ไม่แน่ใจว่าคุณหมายถึงอะไรโดย 'รอบใหม่' แต่ FF และ IE มีรหัสฐานที่ย้อนกลับไปในช่วงกลางยุค 90 และเบราว์เซอร์ใหม่ส่วนใหญ่ใช้หนึ่งในเอ็นจิ้นการแสดงผล (ตัวอย่างเช่น Chrome ใช้ WebKit)
GrandmasterB

2
FF กำจัดรหัส Netscape ดั้งเดิม (นั่นคือช่วงกลางยุค 90 ขยาย) และใช้เอ็นจิ้นการเรนเดอร์ของตนเอง WebKit ยังเป็นเอ็นจิ้นการแสดงผลที่ค่อนข้างใหม่ (ใช้โดย Chrome และ Safari) IE ยังคงมีการขยายตัวแบบดั้งเดิมซึ่งยังคงชั่งน้ำหนักลง ดังนั้นฉันจะไม่เห็นด้วยที่นี่
Berin Loritsch

2
อย่างน้อยวิกิพีเดียทั้งตุ๊กแกและ webkit เริ่มต้นในปี 1998 C # ไม่ได้อยู่ในตอนนั้นและ java เป็นสิ่งใหม่ในที่เกิดเหตุ (และซบเซาอย่างยิ่งยวด ดังนั้นฉันไม่รู้ว่าภาษาอื่น ๆ จะเหมาะกับอะไร บางทีปาสกาล
GrandmasterB

1
@Berin Loritsch: ใช่ แต่พวกเขาไม่ได้ทิ้งรหัสที่มีอยู่ทั้งหมดและเริ่มต้นใหม่ (ทุกอย่าง) จากจุดเริ่มต้นซึ่งเป็นสิ่งที่พวกเขาต้องทำเพื่อแปลงเป็นภาษาอื่น นอกจากนี้ผู้ที่รู้ / รู้ C ++ ดีพอสำหรับการตัดสินใจเกี่ยวกับ FF ที่จะติดจะมีแนวโน้มที่จะเปลี่ยนเป็นภาษาที่แตกต่างกันอยู่แล้ว
Jerry Coffin

2
@Berin Loritsch ขยะ FF ยังคงใช้ Gecko (1997) และ Webkit ใช้ khtml (1998)
Henry

4

เนื่องจากเบราว์เซอร์ (เช่น HotJava, ชัดเจนพอที่เขียนใน Java) ที่เขียนในภาษาอื่น ๆ ไม่เคยประสบความสำเร็จในระดับที่ยอมรับของการเจาะตลาด /

ฉันไม่สามารถพูดอะไรเกี่ยวกับการทำซ้ำปัจจุบัน (หรือล่าสุด - ยังไม่ได้รับการปรับปรุงในช่วงเวลาหนึ่ง) ของ HotJava แต่เมื่อฉันลองมันดูเหมือนจะไม่มีการเจาะตลาด (อย่างน้อยสำหรับฉัน) เข้าใจง่ายมาก - มันน่าเกลียดช้าและเข้ากันไม่ได้กับหน้าเว็บบางหน้า ในท้ายที่สุดดูเหมือนว่ามันจะอิงกับหลักฐานที่ไม่เคยแพนออกมาเลย: เว็บจะประกอบด้วย Java applets เป็นหลักโดยมี HTML เป็นมากกว่าตัวห่อเล็ก ๆ

ส่วนหนึ่งอาจเป็นประวัติศาสตร์: เว็บเบราว์เซอร์ขนาดใหญ่ส่วนใหญ่ใช้เวลานานมาก เมื่อพวกเขาถูกเขียนครั้งแรกภูมิทัศน์แตกต่างกันมาก: C ++ เป็นภาษาใหม่ "ร้อน" ดังนั้นจึงถูกนำมาใช้เพื่อการพัฒนาใหม่ ๆ มากมาย เบราว์เซอร์กลายเป็นซอฟต์แวร์ที่มีการใช้งานมากที่สุดในขณะที่เบราว์เซอร์อื่น ๆ จากนั้นได้ค่อยๆจางหายไป

ฉันคิดว่า "ทัศนคติ" ของภาษาที่แสดงมีผลเช่นกัน: C ++ (เช่น C ก่อนหน้านี้) ได้เน้นการปฏิบัติจริงและการปฏิบัตินิยมเสมอ ทัศนคติพื้นฐานนั้นมีแนวโน้มที่จะดึงดูดโปรแกรมเมอร์ที่ยังใช้งานได้จริง ภาษาอื่น ๆ อีกมากมายให้ความสำคัญกับสิ่งต่าง ๆ เช่นความสง่างาม - และในการทำเช่นนั้นพวกเขาดึงดูดโปรแกรมเมอร์ที่คิดแบบเดียวกัน ปัญหาที่เกิดขึ้นคือสิ่งที่ฉันเรียกว่า "เอฟเฟกต์เสียงกระเพื่อม" อาการรวมถึง:

  1. ข้อโต้แย้งที่ไม่มีที่สิ้นสุดเหนือส่วนใหญ่การดำเนินงานที่สง่างามของสิ่งที่น่ารำคาญที่สุด
  2. ไม่สามารถตรึงคุณสมบัติและทำสิ่งที่สามารถส่งได้ (แม้มีข้อบกพร่อง)
  3. ไม่สามารถประนีประนอม ใครก็ตามที่ไม่เห็นด้วยกับฉันไม่ได้เป็นเพียงแค่ความผิด แต่ต้องโง่หรือชั่ว

มีมากขึ้น แต่คุณจะได้รับความคิดทั่วไป (และใช่ฉันพูดเกินจริงในระดับหนึ่ง - แต่เพียงระดับ) ใช่โค้ดบางส่วนที่คุณได้รับจะสวยงามอย่างน่าประหลาดใจ แต่โอกาสที่จะช้าไปกว่าหกเดือนและส่วนใหญ่ไม่เข้ากันกับโค้ดอื่น ๆ ในระบบ (สิ่งที่ควรจะเป็น) และเมื่อคุณได้รับมันจะมี โอกาสที่ค่อนข้างยุติธรรมมีอะไรบางอย่างเปลี่ยนแปลงไปมากพอที่คุณจะไม่สามารถใช้มันได้เลย

นอกจากนี้ยังมีภาษาที่ไม่ต้องสงสัยเลยว่าจะทำงานได้ดี แต่ (ไม่ว่าจะถูกหรือผิด) ก็ไม่มี (หรือในเวลาสำคัญไม่มี) ส่วนแบ่งตลาดสำหรับทุกคนที่เคยเขียนเบราว์เซอร์ในนั้น ด้วยขนาดและความซับซ้อนของเบราว์เซอร์ที่สมบูรณ์มันต้องใช้คนจำนวนมากและใช้เวลาค่อนข้างนานในการพัฒนา ด้วยการลงทุนประเภทนี้หลายคนได้รับการอนุรักษ์ค่อนข้างเกี่ยวกับสิ่งต่าง ๆ เช่นเครื่องมือในการพัฒนา


1
WRT จุดที่ 3 ฉันจะยืนยันอย่างแน่นอนโดยไม่ต้องมีคุณสมบัติว่าการเขียนซอฟต์แวร์ที่ใช้กับเครือข่ายในตระกูล C นั้นไม่ว่าจะโง่หรือชั่วร้าย รูที่จะทำให้เกิดอันตรายต่อผู้ใช้ของคุณ มันมีคุณธรรมเทียบเท่ากับการให้เกราะของทหารกับเป้าหมายที่ทาสีไว้
Mason Wheeler

9
@ Mason: การแสดงความคลั่งไคล้ในคำถามของคุณนั้นได้รับการชื่นชมอย่างแน่นอน
Jerry Coffin

2
@ Mason: ไร้สาระ ช่องโหว่ความปลอดภัยหนึ่งช่อง (ที่ได้รับการแก้ไขแล้ว แต่ sysadmins จำนวนมากไม่ใส่ใจที่จะติดตั้งรหัสที่อัปเดต) ไม่ได้ใกล้เคียงกับการพิสูจน์ว่ารหัสทั้งหมดที่เขียนในภาษาเดียวกัน "จะทำให้เกิดอันตราย" หรืออะไรก็ตาม OpenBSD (ตัวอย่างหนึ่ง) มีประวัติการรักษาความปลอดภัยที่ดีกว่า MacOS เวอร์ชัน Pascal ที่มีความต้องการ
Jerry Coffin

5
@ Mason: ไม่คุณ ข้อแรกเวิร์ม Morris ใช้ประโยชน์จาก proram ที่ใช้getsซึ่งเป็นฟังก์ชันที่แย่มาก แต่แทบจะหลีกเลี่ยงไม่ได้ (และแน่นอนว่าไม่ใช่ "พื้นฐาน" ต่อภาษาหรืออะไรทำนองนั้น) ประการที่สอง C ++ ไม่ใช่ภาษาเดียวกับ C ในทุกกรณี ประการที่สาม OpenBSD แสดงให้เห็นอย่างชัดเจนว่าซอฟต์แวร์ที่มีความปลอดภัยสามารถเขียนได้เป็นภาษาซีไม่มีข้อบกพร่องด้านภาษาที่สามารถป้องกันการเขียนซอฟต์แวร์ที่ปลอดภัยและมั่นคงในซีส่วนแบ่งการตลาดเล็ก ๆ ของ OpenBSD บ่งชี้ว่าการรักษาความปลอดภัยไม่ใช่เรื่องสำคัญ คน.
Jerry Coffin

6
@ Mason: บัฟเฟอร์ที่ overrun getsเป็นผลมาจากความจริงที่ว่าคุณไม่ผ่านความยาวของบัฟเฟอร์ที่คุณใช้ ไม่มีอะไรพื้นฐานเกี่ยวกับภาษา - คุณสามารถทำสิ่งเดียวกันในปาสคาล (และฉันมี) การเขียนซอฟต์แวร์ที่ปลอดภัยจากผู้โจมตีอัจฉริยะไม่ใช่เรื่องง่ายโดยไม่คำนึงถึงภาษา จากประสบการณ์ในทั้งสามนี้มันง่ายกว่าเล็กน้อยใน C มากกว่าใน Pascal และง่ายกว่ามากใน C ++ มากกว่าใน C
Jerry Coffin

3

การเขียนโปรแกรมการขนส่งสินค้าทางศาสนา การรับรู้ว่า "C ++ นั้นเร็ว" ยังคงมีอยู่ (แม้จะมีคุณสมบัติระดับภาษาที่ไม่ค่อยดีนักเช่นรูปแบบวัตถุที่แตกหักซึ่งทำให้สิ่งต่างๆช้าลง) และผู้คนต้องการให้เบราว์เซอร์ของพวกเขาทำงานได้อย่างรวดเร็วดังนั้นพวกเขาจึงเขียนภาษา C ++ .

ในโลกที่มีสติคนที่เขียนซอฟต์แวร์ที่ต้องใช้เครือข่ายจะรู้สึกตกใจเมื่อนึกถึงการใช้ภาษาที่ทำให้เกิดปัญหาความปลอดภัยโดยธรรมชาติของ C และการทำเช่นนั้นเป็นการกระทำโดยประมาททางอาญา (เพียงแค่ดูว่ามีการพบช่องโหว่หน่วยความจำล้นจำนวนเท่าใดในเบราว์เซอร์ต่างๆในช่วง 15 ปีที่ผ่านมาหรือไม่!

มีภาษาที่รวบรวมอื่น ๆ ที่สามารถสร้างไบนารีที่รวดเร็วได้ ปัญหาคือพวกเขาไม่ได้รับการสัมผัสเหมือนกับครอบครัวซีและเราทุกคนต้องทนทุกข์กับมัน

ความจริงแล้วสนุก: เมื่อมอร์ริสเวิร์มโจมตีอินเทอร์เน็ตในปี 1988 แสดงให้เห็นถึงปัญหาอย่างชัดเจนในการเขียนระบบปฏิบัติการและซอฟต์แวร์ที่ใช้กับเครือข่ายใน C (ซึ่งยังไม่ได้รับการแก้ไขจนถึงทุกวันนี้ ,) Apple ปล่อยระบบปฏิบัติการที่ทันสมัยที่สุดเท่าที่โลกเคยเห็นมาเป็นเวลาหลายปีแล้วที่เขียนใน Pascal


15
ฮะ? ฉันชอบ Mac OS ที่ใช้ได้ แต่เรียกว่าเป็นระบบปฏิบัติการที่ทันสมัยที่สุดที่โลกเคยเห็นว่าโง่ มันไม่ได้อยู่ในสวนบอลเดียวกันกับ UNIX และ VMS แต่เพียงผู้เดียวในระบบเหล็กขนาดใหญ่ของ IBM: ผู้ใช้คนเดียวไม่มีหน่วยความจำเสมือนการจัดการกระบวนการที่ จำกัด เพื่อให้แน่ใจว่ามันมีระบบหน้าต่างที่ดีมาก ๆ แต่ก็เป็นสิ่งที่มาจาก Xerox Parc และโครงการทางวิชาการมากมาย ฉันคิดว่า Mac OS ส่วนใหญ่เขียนด้วยชุด M68k ด้วย ไลบรารีใช้มาตรฐานการเรียกฟังก์ชัน Pascal เนื่องจากคาดว่า Pascal จะเป็นภาษาหลักของแอปพลิเคชัน
Charles E. Grant

5
ระบบปฏิบัติการของแอปเปิลก่อนปี 2000 ไม่ได้มีเสถียรภาพใด ๆ เทียบเท่ากับ MS เมื่อฉันทำงานสองโครงการใน 90s โครงการหนึ่งกับ Mac OS และอีกโครงการหนึ่งกับ NT ฉันมีจำนวนการขัดข้องและการรีบูตที่เท่ากัน ตอนนี้พวกเขาทุกคนใช้ภาษาซี (Apple ใช้ Objective-C สำหรับเนื้อหาปัจจุบัน) การรักษาความปลอดภัยอาจทำได้ยากขึ้นในภาษาที่ใช้ภาษา C แต่การใช้ภาษาที่แตกต่างกันนั้นไม่ได้ทำให้ปลอดภัยมากขึ้นในทันที
Berin Loritsch

13
@ Mason ความจริงที่ว่า Mac ไม่ต้องการฟีเจอร์เหล่านั้นในเวลานั้นไม่ได้หมายความว่าไม่มีความสำคัญ คุณได้แถลงอย่างไม่มีเงื่อนไขว่า Apple OS เป็นเทคโนโลยีที่ทันสมัยที่สุดในโลก แต่สิ่งที่คุณหมายถึงจริงๆก็คือมันมีส่วนต่อประสานผู้ใช้ที่ทันสมัยที่สุด นั่นเป็นข้อความที่ป้องกันได้ แต่ค่อนข้างน้อยกว่าสิ่งที่คุณเขียน การเขียน GUI ที่ใช้งานได้ยาก การเขียนระบบหน่วยความจำเพจที่เชื่อถือได้นั้นยาก การพูดว่ามีความสำคัญมากกว่าอีกข้อหนึ่งก็โง่ การคำนวณระดับผู้บริโภคที่เรารู้ว่าตอนนี้ไม่สามารถอยู่ได้หากไม่มีทั้งสองอย่าง
Charles E. Grant

5
@ Mason: ประสบการณ์ของคุณแตกต่างอย่างชัดเจน (มหาศาล) จากใครและคนอื่น ๆ - ในหลาย ๆ ด้าน :-)
Jerry Coffin

3
@Mason: LOL ที่อ้างถึง pre-Mac OSX เป็น "ขั้นสูง" Apple OS เป็นแหล่งที่มาของการเกิดปัญหาอย่างต่อเนื่องไม่น้อยเพราะระบบไฟล์ที่เป็นพื้นฐานอย่างยิ่ง
ไม่ระบุตัวตนพิมพ์

2

เข้าถึง API ระดับระบบ

เบราว์เซอร์ทั้งหมดต้องเชื่อมต่อกับระบบปฏิบัติการในบางช่วงและระบบปฏิบัติการหลักส่วนใหญ่มี API และไลบรารี C และ C ++ ที่ได้รับการยอมรับเป็นอย่างดี โดยปกติแล้วการทำงานกับ API เหล่านั้นใน C หรือ C ++ จะง่ายกว่าการเขียนตัวห่อ


0

การควบคุมและพกพา

การโต้เถียงความเร็วส่วนใหญ่สามารถไปทางใดก็ได้ แต่ในทุกสิ่งที่คุณต้องการการควบคุมอย่างแม่นยำว่ามีอะไรเกิดขึ้นบ้างในภาษาระดับสูงกว่าจะมีฝนตกในขบวนพาเหรดของคุณ มีข้อยกเว้นนี้ แต่ส่วนใหญ่จะไม่ข้ามแพลตฟอร์มมากพอที่จะนับในบางสิ่งบางอย่างเช่นเบราว์เซอร์


0

ความเข้ากันได้แบบดั้งเดิม - ไม่สามารถทิ้งรหัสเก่าได้

มันไม่เกี่ยวอะไรกับข้อดีของภาษา C ++ กับภาษาอื่น ๆ คุณสามารถเขียนเบราว์เซอร์ที่ดีขึ้นตั้งแต่เริ่มต้นในภาษาเช่น Haskell; โปรเจ็กต์ที่สำคัญนี้สามารถใช้ JVM ของตนเองได้หากพวกเขาต้องการรับประกันคุณสมบัติด้านประสิทธิภาพบางอย่าง เช่นเดียวกับวิธีที่ Facebook เขียนคอมไพเลอร์ / เพิ่มประสิทธิภาพ PHP ของตัวเอง

เบราว์เซอร์ที่ตัดมาร์กอัปที่ไม่ได้มาตรฐานนั้นแย่กว่าไร้ประโยชน์ Legacy compat นั้นมีความสำคัญมากและซับซ้อนจนการเขียนซ้ำนั้นไม่ใช่ตัวเลือก เงินและเวลามากมายถูกลงทุนในการรักษาความปลอดภัยที่ผ่านการทดสอบการต่อสู้ ฯลฯ คุณไม่สามารถละทิ้งการลงทุนนั้นไปได้ อีกครั้งชอบวิธี Facebook จะยังคงเขียนใน PHP


ฉันเข้าใจได้ว่าทำไมผู้คนถึงไม่ลงคะแนนนี้ ... แต่ลงคะแนนโหวต? แปลกแฮะ, แปลกนะ, มันแปลก ๆ นะ. นี่คือ +1 สำหรับคุณ
Thomas Eding

คุณมีจุด (เล็ก) แต่ประโยคแรกของคุณโยนออกไป แน่นอนว่ามันต้องเกี่ยวข้องกับข้อดีของภาษา C ++ กับภาษาอื่นเช่นกัน
Chiel ten Brinke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.