it-swarm-vi.com

Tại sao hầu hết các trình duyệt được phát triển trong C ++

Có vẻ như hầu hết các trình duyệt web phổ biến (Firefox, Chrome, Safari) được phát triển bằng C++. Ai vậy?

101
Nipuna

Một cách khác để đặt câu hỏi là trình duyệt cần loại hỗ trợ nào? Danh sách ngắn là:

  • Hỗ trợ phân tích cú pháp (cần thiết để hiểu về [X] HTML, CSS và [ECMA/Java] Script)
  • Các tính năng đi bộ/phiên dịch trên cây (một phần của phân tích cú pháp và xây dựng giao diện người dùng)
  • Hỗ trợ cho đồ họa được tăng tốc
  • Kết nối mạng nhanh
  • Đối với các trình duyệt nâng cao hơn: kiểm soát các quá trình và cách ly bộ nhớ giữa các trang
  • Phải hoạt động trên tất cả các nền tảng được hỗ trợ

Hầu hết các ngôn ngữ có một số loại hỗ trợ phân tích cú pháp. Bạn có trình tạo trình phân tích cú pháp cho C, C++, C #, Java, v.v. Tuy nhiên, C và C++ có khá nhiều năm bắt đầu với phần còn lại của các lựa chọn thay thế để các thuật toán và triển khai được hoàn thiện hơn. Truy cập đồ họa được tăng tốc trong Java là không nên, trừ khi bạn có một số tiện ích mở rộng riêng để làm cho nó hoạt động. WPF trên C # cung cấp quyền truy cập vào đồ họa được tăng tốc, nhưng còn quá mới để xây dựng trình duyệt nghiêm túc với công nghệ.

Mạng thực sự là lý do ít nhất để chọn C++ hơn Java hoặc C #. Lý do là giao tiếp chậm hơn nhiều lần so với phần còn lại của quá trình xử lý để hiển thị trang. Tốc độ của dây là yếu tố giới hạn. Cả Java và C # đều không chặn IO, cũng như C++. Vì vậy, thực sự không có người chiến thắng rõ ràng trong khu vực này.

Tại sao không phải là Java? Bạn đã bao giờ thử xây dựng giao diện người dùng với Java chưa? Nó cảm thấy cồng kềnh và chậm chạp so với bất cứ điều gì khác ngoài đó, bởi vì nó là. Không có đồ họa tăng tốc cũng là một tiêu cực lớn ở đây. Hộp cát của Java thực sự tốt và có thể giúp cải thiện tính bảo mật của trình duyệt nếu nó được sử dụng đúng cách, nhưng thật khó để cấu hình và làm cho công việc. Chưa kể định dạng đồ họa hỗ trợ tụt hậu so với hầu hết các trình duyệt hiện đại.

Tại sao không phải C #? Nếu mục tiêu duy nhất của bạn là Windows, C # thực sự có thể tạo ra một đại diện tốt. Vấn đề xảy ra khi bạn muốn hỗ trợ bất cứ điều gì khác. Mono đã không bắt kịp đủ để được coi là đủ nền tảng cho nhiệm vụ này - đặc biệt là với hỗ trợ đồ họa được tăng tốc và WPF. Ai biết sẽ mất bao lâu để thay đổi.

Tại sao không phải là C? Có trình biên dịch C cho mọi nền tảng ngoài kia (bao gồm cả các thiết bị nhúng). Tuy nhiên, có rất nhiều điều mà C làm không làm cho bạn rằng bạn sẽ phải hết sức cảnh giác. Bạn có quyền truy cập vào tất cả các cấp API thấp nhất, nhưng phần lớn các nhà phát triển C không làm GUI. Ngay cả các thư viện GUI C cũng được viết theo cách hướng đối tượng. Ngay khi bạn bắt đầu nói UI, một ngôn ngữ hướng đối tượng bắt đầu có ý nghĩa tốt hơn.

Tại sao không phải là Mục tiêu C? Nếu mục tiêu duy nhất của bạn là Apple, điều đó rất có ý nghĩa. Tuy nhiên, hầu hết các nhà phát triển không biết Objective-C và lý do duy nhất để tìm hiểu là hoạt động trên NeXT hoặc Apple. Chắc chắn bạn có thể sử dụng bất kỳ thư viện C nào với Objective-C và Có trình biên dịch cho nhiều nền tảng, nhưng việc tìm người để làm việc trên nó sẽ khó khăn hơn. Ai biết được? Có lẽ Apple có thể biến sự thiếu hụt nhận thức này.

Tại sao C++? Có trình biên dịch C++ cho mọi nền tảng ngoài kia. Hầu như mọi thư viện GUI đều có giao diện C++, đôi khi nó tốt hơn và đôi khi nó chỉ khác nhau. Ví dụ, ATL của Microsoft tốt hơn rất nhiều so với các lệnh gọi hàm win32 C hoặc thậm chí là thư viện MFC. Có các trình bao bọc C++ cho GTK trên Unix và tôi rất ngạc nhiên nếu ai đó không có trình bao bọc C++ xung quanh thư viện GUI Objective-C của Apple. Quản lý quy trình dễ dàng hơn trong C++ so với Java hoặc C # (những chi tiết đó được trừu tượng hóa cho bạn). Tốc độ nhận thấy của nó tăng nhiều hơn từ việc tăng tốc phần cứng so với hiệu năng thô. C++ quan tâm đến nhiều thứ hơn đối với bạn hơn C thô (chẳng hạn như chuỗi bị ràng buộc), nhưng vẫn cho phép bạn tự do với các thứ Tweak. Chưa kể một số thư viện cần thiết để kết xuất các trang web cũng được viết bằng C hoặc C++.

Hiện tại, C++ không có các lựa chọn thay thế.

165
Berin Loritsch

Tôi đã quyết định viết một cuốn tiểu thuyết về điều này với hy vọng mọi người sẽ che đậy nó và nâng đỡ tôi. Không, không, đùa thôi! Tôi đau khổ vì mọi Lời. Mỗi lời, tôi nói với bạn!

Hỏi 'khi' trước 'tại sao'

Tất cả các trình duyệt web chính có thể theo dõi nguồn gốc của chúng từ những năm 90. Konqueror trở thành Safari và Chrome; Netscape trở thành Firefox; IE và Opera vẫn IE và Opera. Các trình duyệt này đều có thời gian bắt đầu 15 năm đối với đương nhiệm.

Tôi khuyên bạn thậm chí nên thử tên một ngôn ngữ đa nền tảng (Windows/Mac/Unix và thậm chí tệ hơn) có sẵn vào khoảng năm 1995 khi các trình duyệt hiện đại nguồn gốc. Để xây dựng cốt lõi trong bất cứ thứ gì trừ C/C++, có lẽ bạn đã phải xây dựng hoặc mua và sửa đổi trình biên dịch và thư viện nền tảng.

Hôm nay thế nào? Các lựa chọn thay thế là gì?

Để cho vui, chúng ta hãy nghĩ về vấn đề ngày hôm nay. Vâng, có những lựa chọn thay thế, nhưng vẫn còn những vấn đề lớn.

Lựa chọn ngôn ngữ trình bày ít nhất những vấn đề này:

  1. Vấn đề về kiến ​​thức - Tuyển dụng/đào tạo nhà phát triển hoặc thu hút cộng tác viên
  2. Vấn đề tổ chức/xã hội - Ngôn ngữ chấp nhận
  3. Ngôn ngữ thực hiện: Tốc độ, hỗ trợ nền tảng, dụng cụ
  4. Sức mạnh ngôn ngữ

1: Vấn đề kiến ​​thức

Nơi nào bạn có được những người biết ngôn ngữ hoặc có thể học nó? Đây là một trở ngại đối với các ngôn ngữ như OCaml, F #, Haskell, Common LISP và D đủ nhanh và cao để viết trình duyệt một cách độc đáo, nhưng có ít người theo dõi (trong phạm vi 10k-100k, có thể) ngay cả khi bạn tự do đếm tất cả những người có sở thích và học thuật.

2: Vấn đề xã hội/tổ chức

Hệ quả của câu trả lời sùng bái hàng hóa ở trên:

  • Một trình duyệt nguồn mở không sử dụng C, C++, C # hoặc Java sẽ được cho là gặp khó khăn với những người đóng góp.
  • Một trình duyệt độc quyền không sử dụng C, C++, C # hoặc Java sẽ khiến các nhà quản lý dự án bị mắng nghiêm trọng trong hầu hết các tổ chức.

3. Sự cố kỹ thuật

Ngay cả trong thời hiện đại, bạn cần một ngôn ngữ khá nhanh cho các phần chuyên sâu tính toán của các trang kết xuất và chạy Javascript. Bạn có thể chọn bổ sung ngôn ngữ cấp cao để xây dựng các thành phần GUI, v.v. (ví dụ: cách tiếp cận Firefox của C++ và Javascript) nhưng bạn phải tích hợp chặt chẽ giữa các ngôn ngữ; bạn không thể chỉ nói "Được rồi, C # và Lua." Có lẽ bạn sẽ phải tự xây dựng và gỡ lỗi cây cầu đó trừ khi bạn chọn C hoặc C++ làm ngôn ngữ cơ bản.

Phát triển đa nền tảng là một túi giun khác. Bạn có thể sử dụng C # hoặc F # và bắt chéo ngón tay của bạn trên GTK # và Mono vẫn còn sống và tốt trong tương lai. Bạn có thể dùng thử Common LISP, Haskell, OCaml ... Chúc may mắn khi mọi thứ hoạt động trên Windows Mac Linux.

4. Sức mạnh ngôn ngữ

Sau tất cả những điều đó, bạn phải xây dựng một số lượng lớn chức năng, vì vậy nếu bạn chọn một ngôn ngữ cấp thấp, bạn cần một đội ngũ lập trình viên thậm chí còn ôm đồm hơn trước. Lưu ý rằng không ai thực sự xây dựng một trình duyệt từ đầu trong khoảng mười lăm năm. Đó là một phần bởi vì (bất ngờ!) Thật khó.

Cụ thể, có một trình thông dịch Javascript là vấn đề 3 (có được một) hoặc vấn đề 4 (xây dựng một).

Phần kết luận:

Nếu bạn đã phát triển trình duyệt ba nền tảng (Windows/Mac/* nix) ngày hôm nay (đầu năm 2011), một số lựa chọn là gì?

  • C: Xem (2). Mọi người sẽ kêu gọi C++. Vui vẻ chọn bộ công cụ đa nền tảng hoặc xây dựng một (1, 2, 3 và 4). Xem thêm (4); vui vẻ xây dựng một trình duyệt ổn định, an toàn trong đó.
  • C++: Vui khi chọn bộ công cụ đa nền tảng hoặc xây dựng một (1, 2, 3 và 4). Hãy vui vẻ (4) xây dựng trình duyệt ổn định, an toàn trong đó.
  • C hoặc C++ và HLL: Đặt cược tốt nhất của bạn. Chọn chất độc của bạn trên ngôn ngữ năng động; Xem (1) và (2). Quá nhiều ngôn ngữ tốt, quá ít người theo dõi. (1, 2, 3 và 4) trên bộ công cụ.
  • Java: Đặt cược tốt thứ hai, nếu bạn phải làm hài lòng quản lý cấp trung. Xem (4); xây dựng những thứ khổng lồ trong Java cần nhiều mã hơn bất kỳ thứ gì khác trong danh sách này nhưng có thể C.
  • Scala: Beats Java trên (4); (1) và (2) nhưng nó đang gây chú ý.
  • C và Javascript: Trong trường hợp đặc biệt, điều này hấp dẫn bởi vì bạn đã phải xây dựng hoặc thu nhận và đồng hóa trình thông dịch Javascript. (Do đó Firefox.) (1, 2, 3 và 4) trên bộ công cụ; người Mozilla đã xây dựng IIRC của riêng họ.
  • C #: Hãy vui vẻ trên (3). Bạn có thể bị mắc kẹt với GTK #, tuy nhiên, đó là tốt, hoặc xây dựng lớp và trình kết xuất của riêng bạn trên GTK # và Windows Forms.
  • Ruby/Python/Perl/Vợt/Lua/Erlange, v.v .: Bạn đã có (3) về tốc độ và thư viện widget đa nền tảng. Định luật Moore là với bạn về (4); nhu cầu ngày càng tăng trên các trình duyệt là chống lại bạn.
  • OCaml, Haskell, LISP chung, Smalltalk: (1) và (2) trong các spades. Không có vấn đề về tốc độ, có lẽ, nhưng (3) để phát triển đa nền tảng và bạn sẽ phải xây dựng mọi thứ của riêng mình hoặc làm cầu nối với các thư viện C/C++ bằng cách nào đó.
  • Mục tiêu-C: (3) Tôi không chắc cách phát triển đa nền tảng sẽ hoạt động ở đây.

Nếu chúng ta thấy một trình duyệt lớn khác tăng lên trong vài năm tới, tôi sẽ cá rằng nó sẽ được viết bằng C hoặc C++ và một ngôn ngữ động (như Firefox), cho dù là nguồn mở hay độc quyền.

Chỉnh sửa (ngày 31 tháng 7 năm 2013): Người bình luận về Tin tức Hacker dường như đang đề cập Rust và Go (không liên quan cụ thể đến câu trả lời của tôi), mà mơ hồ rơi vào Xô "linh tinh nhanh". Cố gắng giữ danh sách các ngôn ngữ bình đẳng và cập nhật này sẽ là một trận thua, vì vậy thay vào đó tôi gọi nó là một mẫu đại diện cho đến thời điểm viết và để nó một mình.

89
Jesse Millikan

Tốc độ

Dù xấu xí như vậy, C++ vẫn là thứ bạn sử dụng khi bạn muốn có một ứng dụng nhanh và toàn quyền kiểm soát mã.

Đây là lý do tại sao các trò chơi, các phần không cốt lõi (như trình nhập tệp) của Office và hơn thế nữa vẫn được viết bằng C++.

Đã chỉnh sửa để bao gồm phản hồi từ MSalters

36
Ryan Hayes

Tính di động

Tôi chỉ có thể đoán, nhưng bạn đang đề cập đến các sản phẩm phần mềm nhắm mục tiêu nhiều nền tảng và C++ có thể được biên dịch sang bất kỳ nền tảng nào.

17
Pete

(Tôi đã làm việc trên Firefox được khoảng năm năm.)

Người hỏi có đúng rằng rất nhiều mã của Firefox là C++ và trên thực tế C++ chiếm đa số nếu bạn đếm theo các dòng mã (mặc dù điều đó không nói lên toàn bộ câu chuyện, vì chúng ta có rất nhiều JavaScript và còn hơn thế nữa. súc tích hơn C++).

Nhưng trong thực tế, Firefox được viết bằng rất nhiều ngôn ngữ khác nhau:

  • C++
  • C (NSS, NSPR, various libraries we've imported)
  • x86 và ARM Hội
  • JavaScript
  • XUL (ngôn ngữ đánh dấu giống như HTML) và CSS
  • Mục tiêu C (mã chỉ dành cho MacOS)
  • Java (mã chỉ dành cho Android)
  • Nhiều ngôn ngữ định nghĩa giao diện tùy chỉnh (XPIDL, IPDL)
  • WebIDL (ngôn ngữ định nghĩa giao diện khác, nhưng ngôn ngữ này không phải là tùy chỉnh, mặc dù trình tạo mã là)
  • Python (trình tạo mã)

Tôi chắc chắn đang quên một số.

Danh sách này rất quan trọng vì nó gợi ý về sự phức tạp đáng kinh ngạc nằm đằng sau một trình duyệt web.

Vâng, Firefox có rất nhiều mã C++, và vâng, điều đó có liên quan đến thực tế rằng C++ là ngôn ngữ tốt nhất cho loại điều này khi Netscape được thành lập. Nhưng tôi cũng cho rằng ngày nay không có ngôn ngữ nào tốt hơn cho nhiều thứ chúng ta làm.

Không có ngôn ngữ nào khác có hệ sinh thái mạnh mẽ của các thư viện (chúng tôi phụ thuộc rất nhiều vào mã bên ngoài). Rất ít ngôn ngữ khác cung cấp cho bạn quyền kiểm soát toàn ngăn xếp như C++ (chúng tôi thường xuyên Tinh chỉnh bộ cấp phát heap tùy chỉnh của mình và thực hiện tất cả các loại bộ nhớ không an toàn để nhanh hơn hoặc sử dụng ít bộ nhớ hơn). Vài ngôn ngữ khác cho phép bạn triển khai lại hầu hết thư viện chuẩn theo cách lành mạnh (chúng tôi có các chuỗi triển khai và bộ sưu tập riêng, điều chỉnh theo nhu cầu của chúng tôi). Vài ngôn ngữ khác cho phép bạn thực hiện trình thu gom rác của riêng bạn. Và như thế.

Mặc dù C++ là lựa chọn rõ ràng cho rất nhiều việc chúng tôi làm, nhưng những người đề xuất rằng chúng tôi có thể viết trình duyệt bằng Java và viết JVM của riêng chúng tôi nếu cần thiết cho một cái gì đó. những gì chúng tôi làm, nhưng với JavaScript thay vì Java. Tất nhiên, phần lớn trình duyệt không được viết bằng JavaScript. Nhưng một số lượng đáng ngạc nhiên là.

13
Justin L.

Chà, bạn phải hỏi trực tiếp các nhà phát triển của những sản phẩm đó để nhận câu trả lời, nhưng tôi nghi ngờ đó là sự kết hợp của sự quen thuộc (đó là những gì các nhà phát triển biết rõ nhất), hiệu suất (biên dịch thành nhị phân gốc trái ngược với mã byte) và các công cụ (so với các ngôn ngữ như C, C++ có đầy đủ các tiện ích tiết kiệm lao động Nice như STL).

12
John Bode

Lịch sử

Mỗi trình duyệt có một số lịch sử ảnh hưởng đến sự lựa chọn ngôn ngữ.

Ví dụ: cả Chrome và Safari đều dựa trên WebKit, có nguồn gốc từ phần KHTML của dự án KDE. KDE ban đầu được tạo ra (một phần) như là một minh chứng cho bộ công cụ GUI Qt, vì vậy Nhìn chung, KDE là một dự án C++. Tất cả các dự án KDE mới, vào thời điểm đó, được viết hoàn toàn bằng C++, do đó, nó là một lựa chọn hợp lý cho KHTML. Nó đã được chuyển sang sử dụng các bộ công cụ GUI khác.

Công cụ Presto của Opera được viết với hiệu suất và kích thước nhị phân nhỏ trong tâm trí: C++ là lựa chọn hợp lý.

Microsoft IE được viết dưới dạng tập hợp các thành phần ActiveX, có thể được viết bằng bất kỳ ngôn ngữ nào có ràng buộc COM, nhưng có thể được viết bằng tập con của C++, vì phần lớn cơ sở mã của chúng là đã được viết bằng ngôn ngữ đó.

Mozilla của Netscape được viết bằng C++ vì tính di động là mối quan tâm chính của họ. Trình biên dịch C và C++ (hầu như) có mặt khắp nơi, và vì vậy nó là một lựa chọn hợp lý.

Không có vốn có kỹ thuật lý do cho những lựa chọn này. Nó chỉ "có vẻ như là một ý tưởng tốt vào thời điểm đó."

10
greyfade

Mạng trong C và C++ rất dễ tối ưu hóa, vì bạn không phải sử dụng các thư viện nếu bạn không muốn. Tôi nghi ngờ rằng C++ là ngôn ngữ được lựa chọn vì nó cho phép những lợi thế của C:

  • Tốc độ
  • Tối ưu hóa
  • Một lượng di động nhất định
  • Ngôn ngữ biên dịch, không được giải thích

cùng với những lợi thế của OOP:

  • Khả năng mở rộng
  • Hình dung dễ dàng hơn
  • Hỗ trợ thư viện tốt hơn cho các tác vụ không quan trọng như xử lý chuỗi và cấu trúc dữ liệu
8
Michael K

Khi các dòng mã đầu tiên cho vòng trình duyệt đầu tiên được viết, C # và Java không tồn tại. Ruby cũng không tồn tại. Python có thể đã xuất hiện, nhưng nó vẫn là một dự án homebrew nhỏ vào thời điểm đó.

Về cơ bản, thực sự có không có lựa chọn nào khác ngoài C++ sẽ cho phép một người xây dựng một trình duyệt nhanh và chạy trên nhiều nền tảng khác nhau.

Vậy tại sao chúng được viết bằng C++? Bởi vì đó là ngôn ngữ duy nhất có sẵn mà họ có thể được viết bằng.

4
GrandmasterB

Bởi vì các trình duyệt (ví dụ, HotJava, rõ ràng được viết bằng Java) được viết bằng các ngôn ngữ khác chưa bao giờ đạt được bất kỳ mức độ chấp nhận/thâm nhập thị trường đáng kể nào.

Tôi không thể nói bất cứ điều gì về hiện tại Lặp lại (hoặc gần đây nhất - chưa được cập nhật trong một thời gian dài) của HotJava, nhưng khi tôi dùng thử, dường như thiếu sự thâm nhập thị trường (ít nhất là với tôi) cực kỳ dễ hiểu - nó xấu xí, chậm chạp và không tương thích với khá nhiều trang web. Cuối cùng, nó dường như dựa trên một tiền đề chưa bao giờ được đưa ra: rằng web sẽ bao gồm chủ yếu là Java applet, với HTML ít hơn một trình bao bọc cho biết các applet nào sẽ hiển thị ở đâu.

Một phần của nó có lẽ cũng mang tính lịch sử: hầu hết các trình duyệt web lớn đã xuất hiện từ lâu. Khi chúng lần đầu tiên được viết, phong cảnh đã khác đi nhiều: C++ là một ngôn ngữ mới "nóng", vì vậy nó được sử dụng cho rất nhiều sự phát triển mới. Các trình duyệt đã trở thành một số phần mềm được sử dụng nhiều nhất xung quanh, trong khi nhiều phần mềm khác từ thời gian đã dần chìm vào quên lãng.

Tôi nghĩ rằng "thái độ" hiển thị của ngôn ngữ cũng có ảnh hưởng: C++ (giống như C trước đó) luôn nhấn mạnh tính thực tiễn và tính thực dụng. Thái độ cơ bản đó có xu hướng thu hút các lập trình viên cũng thực dụng. Nhiều ngôn ngữ khác chú trọng nhiều hơn vào những thứ như sự thanh lịch - và khi làm như vậy, chúng thu hút các lập trình viên có cùng suy nghĩ. Vấn đề với điều đó là cái mà tôi gọi là "hiệu ứng LISP". Các triệu chứng bao gồm:

  1. Cuộc tranh cãi bất tận về hầu hết thực hiện tao nhã những điều tầm thường nhất.
  2. Không có khả năng đóng băng các tính năng và hoàn thành một cái gì đó có thể được vận chuyển (ngay cả với sai sót)
  3. Không có khả năng thỏa hiệp. Bất cứ ai không đồng ý với tôi không chỉ sai, mà phải là ngu ngốc hoặc xấu xa.

Có nhiều hơn, nhưng bạn có được ý tưởng chung (và vâng, tôi đang phóng đại ở một mức độ nào đó - nhưng chỉ ở một mức độ). Vâng, một số mã bạn nhận được sẽ đẹp đến mức đáng kinh ngạc - nhưng rất có thể là nó trễ sáu tháng và hầu như không tương thích với mọi mã khác trong (hệ thống được cho là) ​​và vào thời điểm bạn nhận được nó. một cơ hội khá công bằng, một cái gì đó khác đã thay đổi đủ để bạn không thể sử dụng nó.

Cũng có những ngôn ngữ chắc chắn sẽ hoạt động tốt, nhưng (đúng hoặc sai) đơn giản là không có (hoặc vào thời điểm quan trọng, không có) thị phần cho bất kỳ ai đã từng viết trình duyệt trong đó. Với kích thước và độ phức tạp của một trình duyệt hoàn chỉnh, phải mất rất nhiều người và khá nhiều thời gian để phát triển một trình duyệt. Với loại đầu tư đó, nhiều người có được sự bảo thủ tương đối về những thứ như các công cụ phát triển.

4
Jerry Coffin

Lập trình vận chuyển hàng hóa. Nhận thức rằng "C++ là nhanh" vẫn còn tồn tại, (mặc dù các tính năng cấp độ ngôn ngữ kém suy nghĩ như mô hình đối tượng bị hỏng nặng của nó làm chậm mọi thứ) và mọi người muốn trình duyệt của họ nhanh, vì vậy họ viết bằng C++ .

Trong một thế giới lành mạnh, những người viết phần mềm đối mặt với mạng sẽ kinh hoàng khi nghĩ đến việc sử dụng một ngôn ngữ đi kèm với tất cả các vấn đề bảo mật vốn có của C, và thực sự làm như vậy sẽ là một hành động bất cẩn hình sự. (Chỉ cần nhìn vào có bao nhiêu khai thác tràn bộ đệm đã được tìm thấy đối với các trình duyệt khác nhau trong 15 năm qua hoặc lâu hơn! Những lập trình viên này chịu trách nhiệm về bao nhiêu triệu đô la?

Có các ngôn ngữ được biên dịch khác có khả năng tạo nhị phân nhanh. Vấn đề là họ không có sự tiếp xúc như gia đình C và tất cả chúng ta phải chịu đựng điều đó.

Sự thật thú vị: Vào thời điểm sâu bọ Morris xuất hiện trên Internet vào năm 1988, đã chứng minh một cách thuyết phục các vấn đề khi viết hệ điều hành và phần mềm đối mặt với mạng bằng C, (vẫn chưa được giải quyết cho đến ngày nay, bởi vì chúng là lỗi ngôn ngữ cố hữu ,) Apple đã phát hành hệ điều hành tiên tiến nhất mà thế giới đã thấy cho đến nay, trong vài năm, được viết bằng Pascal.

3
Mason Wheeler

Truy cập API cấp hệ thống

Tất cả các trình duyệt phải giao tiếp với HĐH tại một số điểm và hầu hết các HĐH chính đều có các thư viện và API C và C++ được thiết lập tốt. Làm việc với các API trong C hoặc C++ thường dễ dàng hơn thay vì viết các hàm bao.

2
TMN

Khả năng tương thích - không thể vứt bỏ mã cũ

Nó không liên quan gì đến giá trị của C++ so với các ngôn ngữ khác. Bạn chắc chắn có thể viết một trình duyệt tốt hơn từ đầu bằng một ngôn ngữ như Haskell; một dự án quan trọng này thậm chí có thể thực hiện JVM của riêng họ nếu họ cần đảm bảo một số đặc tính hiệu năng. Giống như cách Facebook tự viết PHP.

Một trình duyệt vi phạm đánh dấu không chuẩn sẽ tệ hơn là vô dụng. Di sản compat rất quan trọng và phức tạp đến mức viết lại không chỉ là một lựa chọn. Rất nhiều tiền và thời gian được đầu tư vào bảo mật đã được thử nghiệm trong trận chiến, v.v., bạn không thể vứt bỏ khoản đầu tư đó. Một lần nữa, giống như cách Facebook là vẫn được viết bằng PHP.

0
Dustin Getz

Kiểm soát và tính di động

hầu hết các đối số tốc độ có thể đi theo bất kỳ cách nào, nhưng trong bất cứ điều gì bạn cần kiểm soát chính xác về cách thực hiện điều gì đó, nhiều ngôn ngữ cấp cao hơn sẽ xuất hiện trong cuộc diễu hành của bạn. Có những trường hợp ngoại lệ cho điều này, nhưng hầu hết trong số chúng không đủ nền tảng để tính vào một cái gì đó giống như một trình duyệt.

0
Bill