为什么大多数浏览器都是用C ++开发的


99

似乎大多数常见的Web浏览器(Firefox,Chrome,Safari)都是使用C ++开发的。为什么会这样呢?


28
Firefox用C ++和Javascript编写,而不仅仅是C ++。
杰西·米利坎

1
假设它是正确的,那么这个问题可能会给出一些答案(请注意Jesse对Firefox的评论,除了这三个和IE之外,还有很多浏览器)。我不认为这是有成效的。
David Thornley

1
这是这个问题的正确组吗?
马丁·约克

6
@Jesse不是用C ++编写的js解释器吗?那样就可以全部用C ++了,不是吗?(我可能是错的..)
cambraca

5
@cambraca,按照这种逻辑,一切都是汇编代码!
Juan Mendes

Answers:


165

提出问题的另一种方法是浏览器需要哪种支持?简短列表是:

  • 支持解析(需要理解[X] HTML,CSS和[ECMA / Java] Script)
  • 树行走/解释功能(解析和构建UI的一部分)
  • 支持加速图形
  • 快速联网
  • 对于更高级的浏览器:控制进程并隔离页面之间的内存
  • 必须在所有支持的平台上工作

大多数语言都具有某种解析支持。您具有用于C,C ++,C#,Java等的解析器生成器。但是,C和C ++在其余的替代方案上已有相当长的发展,因此算法和实现更加成熟。除非您有一些本机扩展来使其能够正常工作,否则访问Java中的加速图形是不可行的。C#上的WPF提供了对加速图形的访问,但是它太新了,无法使用该技术构建严肃的浏览器。

实际上,联网是选择C ++而不是Java或C#的最少原因。原因是通信比继续显示页面的其余处理慢许多倍。焊丝的原始速度是限制因素。Java和C#都具有无阻塞IO支持,C ++也是如此。因此,在这一领域确实没有明显的赢家。

为什么不使用Java? 您是否曾经尝试使用Java构建UI?与其他任何东西相比,它感觉麻烦且缓慢。没有加速图形在这里也是一个很大的负面影响。Java的沙箱非常好,如果使用正确,可以帮助提高浏览器的安全性,但是配置和工作很麻烦。更不用说图形格式支持落后于大多数现代浏览器。

为什么不使用C#? 如果您的唯一目标是Windows,则C#实际上可以很好地表示。当您想支持其他任何东西时,问题就来了。Mono还没有赶上足够多的精力来跨平台完成这项任务,尤其是在加速图形支持和WPF方面。谁知道更改需要多长时间。

为什么不C? 几乎所有平台(包括嵌入式设备)都有一个C编译器。但是,C 不能为您做很多事情,您必须格外警惕。您可以访问所有最低级别的API,但是大多数C开发人员都不使用GUI。甚至C GUI库也以面向对象的方式编写。一旦开始谈论UI,面向对象的语言就会变得更加有意义。

为什么不使用目标C? 如果您的唯一目标是苹果,那么这很有意义。但是,大多数开发人员都不了解Objective-C,而学习它的唯一原因是可以在NeXT或Apple包装盒上工作。当然,您可以将任何C库与Objective-C一起使用,并且有适用于许多平台的编译器,但是要找人工作会更加困难。谁知道?也许苹果可以扭转这种自觉的不足。

为什么要使用C ++? 几乎每个平台都有一个C ++编译器。几乎每个GUI库都有一个C ++接口,有时会更好,有时会有所不同。例如,Microsoft的ATL比win32 C函数调用甚至MFC库好得多。Unix上有用于GTK的C ++包装器,如果有人在Apple的Objective-C GUI库周围没有C ++包装器,我会感到惊讶。在C ++中,过程管理比Java或C#更容易(这些细节为您抽象了)。感觉到的速度更多来自硬件加速,而不是原始性能。与原始C语言相比,C ++确实为您提供了更多服务(例如,有界字符串),但仍然为您提供了调整事物的自由。

就目前而言,C ++确实在替代方案方面有所优势。


4
对于非Apple和非NeXT平台,有GNUStep集合。它几乎与可可兼容,并且到处都有。
greyfade

5
请记住,Java不得将GUI使用Swing(这是一个糟糕的库)。例如,我们有Qt绑定。
安托


2
我从未说过Opera是基于Qt的。我的意思是说,当有许多出色的免费选项时,非免费浏览器确实很难销售。
Berin Loritsch 2011年

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.技术问题

即使在现代,也需要一种相当快速的语言来处理呈现页面和运行Javascript的计算密集型部分。您可以选择使用高级语言来补充它,以构建GUI元素等(例如,C ++和Javascript的Firefox方法),但是您必须在这些语言之间进行紧密集成。您不能只说“好吧,C#和Lua”。除非您选择C或C ++作为基本语言,否则您可能必须自己构建和调试该桥。

跨平台开发是另一种蠕虫。您可以使用C#或F#并在GTK#和Mono未来还活着的时候投入精力。您可以尝试Common Lisp,Haskell,OCaml ...祝您在Windows Mac Linux 上都能正常工作。

4.语言能力

毕竟,您必须构建大量的功能,因此,如果选择低级语言,则需要比以前更大的编码人员。请注意,大约十五年来,没有人真正从头开始构建浏览器。部分原因是(惊讶!)很难。

具体来说,拥有Javascript解释器是问题3(习得一)或问题4(构建一)。

结论:

如果您今天(2011年初)开发了一种三平台(Windows / Mac / * nix)浏览器,那么有哪些选择?

  • 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:打败Java(4);(1)和(2),但它正在流行。
  • C和Javascript:作为一种特例,这很有吸引力,因为您已经必须构建或获取并吸收Java解释器。(因此使用Firefox。)(1、2、3和4)在工具包上;Mozilla人民建立了自己的IIRC。
  • C#:在(3)上玩得开心。您可能对GTK#感到困惑,但是这样做还是不错的,或者您可以在GTK#和Windows Forms之上构建自己的图层和渲染器。
  • Ruby / Python / Perl / Racket / Lua / Erlange等:您已经(3)了解跨平台窗口小部件库和速度。摩尔定律与您有关(4);浏览器日益增长的需求不利于您。
  • OCaml,Haskell,Common Lisp,Smalltalk:黑桃中的(1)和(2)。可能没有速度问题,但是(3)用于跨平台开发,您将必须构建自己的所有内容或以某种方式桥接到C / C ++库。
  • Objective-C:(3)我不确定在这里如何进行跨平台开发。

如果我们看到在未来几年内另一个主要的浏览器正在兴起,我敢打赌它将以C或C ++和一种动态语言(如Firefox)(无论是开源还是专有)编写。

编辑(2013年7月31日):Hacker News的评论者似乎在提及Rust and Go(并非专门针对我的回答),这模糊地属于“杂项快速”类别。试图保持这种语言的平等和最新状态将是一场失败的战斗,因此,在撰写本文时,我将其称为具有代表性的示例,不理会它。


4
+1表示最早开发特定浏览器的时间也起着重要作用。
Sparky

3
值得注意的是,尽管IE 今天可能不是跨平台的,但它肯定是一次,而且其当前的市场份额几乎可以肯定(至少部分地)来自于这种跨平台的能力。
杰里·科芬

2
需要注意的是IE浏览器跨平台绕一圈IE4。
JasonFruit 2011年

2
+1表示何时。那是唯一的原因。如果有人今天启动了一个浏览器项目,那么他们很可能不会使用C ++
Henry

4
@Henry,他们不太可能会排除使用C ++。答案指出,C ++仍将是难题的一部分。
匿名类型

36

速度

尽管很丑陋,但当您需要快速的应用程序并完全控制代码时,仍然使用C ++。

这就是为什么游戏,Office的非核心部分(例如文件导入器)以及更多内容仍使用C ++编写的原因。

编辑以包括来自MSalters的回复


3
除了游戏,我不认为这些原因就是为什么这些应用程序是用C ++编写的。虽然,如果您有第一手的知识,我很高兴被证明是错误的。
亨利

2
第一手知识?VS 2010,Office 2010都是庞大的应用程序套件,但是它们的运行速度非常快。尽管两者都具有相当大的COM遗产和MS遗产,但是性能对于用户来说仍然是最重要的。
匿名类型

8
办公室还会写些什么?VB?C和C ++是Microsoft编写大型应用程序的唯一选择。请不要说C#
Toby Allen

4
@Victor:我还没有看到VS2010的源代码,因此很可能完全用C#编写。
Ryan Hayes'2

3
如果office是C#应用程序,为什么原来的Ribbon是MFC控件,而我们不得不等待很长时间才能开发C#?这些巨大的应用程序都不会用C#重写,它们将被包装在WPF gui(如VS2010)中,并且大部分旧代码将被重用。甚至MS也没有资源完全重写其最大的应用程序-如果他们也想花时间在其上添加功能,则没有。
gbjbaanb

17

可移植性

我只能猜测,但是您提到的是针对多个平台的软件产品,并且C ++可以编译为任何平台。


+10-除了原始性能,我认为这是除了IE之外大多数浏览器都使用C ++的真正原因。大多数浏览器可在多个平台上工作,并且几乎没有语言/框架可以在同一级别上执行并且可以跨平台兼容。
乔丹·帕默

我一开始也这么认为,但是对于以GUI为中心的应用程序,例如Web浏览器。C ++是否真的比Java更具移植性?
JohnFx 2011年

1
浏览器真的以GUI为中心吗?
克里斯·范·贝尔

@JohnFx-正确,GUI部分可能不那么可移植。但是,例如浏览器应用程序的核心是关于处理HTML,创建DOM树,解析javascript并足够快地执行它。设计良好的应用程序可以轻松共享同一内核,并且每个平台具有不同的UI代码。是的,C ++比Java(但没有GUI)具有更大的可移植性,因为对于C ++,您只需要针对CPU的编译器。对于Java,您需要完整的框架。
皮特

据我了解,大多数HTML处理工作都是由WebKit等一些核心工具完成的。也许是因为整个浏览器都在C ++中?
JohnFx 2011年

13

(我在Firefox上工作了大约五年。)

发问者的观点是正确的,许多Firefox的代码都是C ++,实际上,如果按代码行数计算,C ++是大多数(尽管这并不能说明全部,因为我们有很多JavaScript,而JS则更多比C ++简洁)。

但实际上,Firefox是用许多不同的语言编写的:

  • C ++
  • C(NSS,NSPR,我们已导入的各种库)
  • x86和ARM组装
  • 的JavaScript
  • XUL(一种类似HTML的标记语言)和CSS
  • 目标C(仅限MacOS的代码)
  • Java(仅限Android的代码)
  • 多种自定义界面定义语言(XPIDL,IPDL)
  • WebIDL(另一种接口定义语言,尽管代码生成器是自定义的,但这不是自定义的)
  • Python(代码生成器)

我肯定会忘记一些。

此列表很重要,因为它暗示了Web浏览器背后令人难以置信的复杂性。

是的,Firefox有很多C ++代码,是的,这与在Netscape成立时C ++是这类事情的最佳语言这一事实​​有关。但是我也认为,对于我们所做的很多事情,今天没有更好的语言。

没有其他语言具有像库这样强大的生态系统(我们严重依赖外部代码)。很少有其他语言能像C ++那样为您提供全栈控制(我们会定期调整自定义堆分配器,并做各种内存不安全的事情以更快或更节省内存)。很少有其他语言可以让您以理智的方式重新实现大多数标准库(我们有自己的字符串和集合实现,可根据需要进行调整)。很少有其他语言可让您实现自己的垃圾收集器。等等。

尽管C ++是许多工作的明显选择,但那些建议我们可以用Java编写浏览器并在必要时编写我们自己的JVM的人仍在从事某些工作。本质上,这就是我们的工作,但是使用JavaScript而不是Java。当然,许多浏览器不是用JavaScript编写的。但是数量惊人。


这些内存不安全的操作是否导致安全问题?
Demi 2013年

12

那么,你不得不直接询问这些产品的开发得到答案,但我怀疑这是熟悉的组合(这就是那些开发者最清楚),性能(编译为本地二进制,而不是字节码),和工具(与C之类的语言相比,C ++充满了许多不错的省力的小工具,例如STL)。


10

历史

每个浏览器都有一些影响语言选择的历史。

例如,Chrome和Safari都基于WebKit,其起源于KDE项目的KHTML部分。KDE最初(部分地)是作为Qt GUI工具包的演示而创建的,因此KDE总体上是一个C ++项目。当时,所有新的KDE项目都是完全用C ++编写的,因此对于KHTML而言,这是合乎逻辑的选择。此后已被移植为使用其他GUI工具箱。

Opera的Presto引擎在编写时考虑到性能和较小的二进制大小:C ++是合乎逻辑的选择。

微软的IE是作为ActiveX组件的集合编写的,可以用具有COM绑定的任何语言来编写,但可能是用C ++的子集来编写的,因为它们的大多数代码库已经以该语言编写。

Netscape的Mozilla用C ++编写,可能是因为可移植性是他们的主要关注点。C和C ++编译器(实际上)无处不在,因此这是一个合理的选择。

这些选择没有内在的技术原因。它只是“当时看起来像个好主意”。


8

C和C ++中的网络易于优化,因为如果您不想使用库,则无需使用。我怀疑C ++是首选语言,因为它具有C的优点:

  • 速度
  • 优化
  • 一定程度的可移植性
  • 编译语言,未解释

加上OOP的优点:

  • 可扩展性
  • 可视化更容易
  • 更好的库支持非关键任务,例如字符串处理和数据结构

Java或C#不具有这些优势吗?
Nipuna

5
我在两者中都开发了应用程序,我想说对于有限的网络功能来说还不错。但是,我不想像浏览器那样构建任何以网络部分为中心的内容。我想要对发生的事情有更多的控制,并且想要一种编译的语言
Michael

Java和C#也被编译。在构建GUI时,C#将比Java更具优势-这是任何浏览器的关键部分。Java具有可移植性的优势。Java和C#都在目标平台上重新编译-可以说可以更好地提高速度。
Berin Loritsch 2011年

5
不,它们被解释了。它们编译为字节码并在虚拟机上运行。该VM的指令集与本地VM的指令集没有一一对应的关系。
Michael K'1

1
你再也不能倒退了!联网; 您可以花大价钱去卷曲,而浏览器也一样快。网络CODE不是慢速位。如果不是库,套接字是什么?字符串处理;这是任何HTML浏览器的核心,它不是非关键,我想不出有更糟糕的字符串处理比C ++以外C.单一语言
亨利

4

编写用于第一轮浏览器的第一行代码时,C#和Java不存在。露比也没有 Python可能已经存在,但那时它仍然是一个很小的自制项目。

基本上,除了C ++之外,实际上没有其他选择可以允许人们构建一种浏览器,该浏览器可以快速运行在许多不同的平台上。

那么为什么要用C ++编写呢?因为那是唯一可以写的语言。


1
不知道您所说的“新一轮”是什么意思。但是FF和IE的代码库可以追溯到90年代中期,大多数新的浏览器都使用一种渲染引擎(例如,Chrome使用WebKit)
GrandmasterB

2
FF摆脱了旧的Netscape代码(即90年代中期膨胀)并实现了自己的渲染引擎。WebKit还是一个相对较新的渲染引擎(Chrome和Safari使用)。IE仍然有遗留的膨胀,继续压低它。所以我不同意这里。
Berin Loritsch 2011年

2
至少根据Wikipedia所说,gecko和webkit都始于1998年左右。C#那时就没有了,而Java才是新出现的(当时gui当时超级迟钝,而且确实很糟糕),因此这不是一个可行的选择。所以我不知道其他什么语言会合适。也许是帕斯卡。
GrandmasterB

1
@Berin Loritsch:是的,但是他们一点都没有扔掉所有现有的代码,并从头开始(从所有内容开始),这几乎是他们转换成另一种语言所要做的。另外,对C ++足够了解/知道足以决定FF的人可能仍会改用其他语言。
杰里·科芬

2
@Berin Loritsch垃圾。FF仍然基于Gecko(1997),Webkit基于khtml(1998)。
亨利

4

因为用其他语言编写的浏览器(例如,HotJava,显然用Java编写的足够多)从未获得任何实质性的市场接受/渗透。

我无法说出HotJava 的当前迭代(或最近的-一段时间内没有更新),但是当我尝试使用它时,(至少在我看来)缺乏市场渗透似乎非常容易理解-难看,缓慢,并且与许多网页不兼容。最终,它似乎是基于一个从未出现过的前提:网络将主要由Java小程序组成,而HTML只不过是一个包装器,用于指示在何处显示小程序。

部分原因可能也是历史原因:大多数大型网络浏览器已经存在了很长时间。最初编写它们时,情况大不相同:C ++是一种“热门”新语言,因此它被用于许多新开发。浏览器已成为周围使用最广泛的软件,而从那时起,其他许多浏览器已逐渐淡出人们的视野。

我认为显示的语言“态度”也会产生影响:C ++(就像之前的C一样)一直强调实用性和实用主义。这种基本态度倾向于吸引也很务实的程序员。许多其他语言都更加强调诸如优雅之类的东西,因此,它们吸引了以同样方式思考的程序员。问题在于我称之为“ Lisp效应”。症状包括:

  1. 关于最琐碎的事情的优雅实现的无休止的争论。
  2. 无法冻结功能并完成可以交付的产品(即使存在缺陷)
  3. 无法妥协。任何不同意我的人不仅是错误的,而且必须是愚蠢或邪恶的。

还有更多,但是您已经有了大致的想法(是的,我在某种程度上夸大了,但只是在某种程度上)。是的,您获得的某些代码会非常惊人,但是很可能是迟到了六个月,而且几乎与系统(应该是)中的所有其他代码都不兼容,并且到您收到它时,一个相当公平的机会,其他事物已经发生了足够的变化,以致您根本无法使用它。

也有一些语言无疑可以很好地工作,但是(对或错)根本没有(或者在关键时刻没有)任何人使用过编写浏览器的市场份额。鉴于完整浏览器的大小和复杂性,开发一个浏览器需要很多人和大量时间。通过这种投资,许多人对诸如开发工具之类的东西变得相对保守。


1
WRT 3点,我一定会断言,没有资格,在C系列的软件,写作面向网络要么愚蠢或邪恶的,因为它涉及要么不知不觉(愚蠢),或明知(恶)与广为人知的引进安全系统的工作漏洞,造成伤害到你的用户。从道德上讲,这等同于给士兵涂上目标的防弹衣。
梅森惠勒

9
@梅森:您的确切偏见显示肯定受到赞赏。
杰里·科芬

2
@梅森:废话。一个安全漏洞(已经修复,但是许多系统管理员没有费心安装更新的代码)甚至无法证明以相同语言编写的所有代码都会“造成危害”或任何其他后果。OpenBSD的(对于一个例子)有相当更好的安全比历史上的MacOS的基于帕斯卡尔版本甚至渴望。
杰里·科芬

5
@梅森:不,你是。首先,Morris蠕虫利用了使用的proram gets,这是一个可怕的功能,但几乎是不可避免的(并且肯定不是该语言的“基础”,或类似的东西)。其次,C ++在任何情况下都不是与C语言相同的语言。第三,OpenBSD很好地证明了安全软件可以并且可以用C编写。没有“潜在的语言缺陷”可以阻止用C编写可靠的安全软件。OpenBSD的微小市场份额表明,安全并不是大多数人关注的主要问题人。
杰里·科芬

6
@Mason:缓冲区溢出gets是一个简单的结果,因为您没有将使用的缓冲区的长度传递给它。语言的基本内容都不是-您可以在Pascal中做同样的事情(我有)。无论语言如何,编写针对智能攻击者安全的软件都不容易。基于在所有三个经验,在C比帕斯卡轻松一点,和很多用C ++更容易比C.
杰里棺材

3

货物崇拜编程。仍然存在“ C ++速度很快”的感觉(尽管语言级别的特性考虑不周,尽管它的对象模型坏得很坏,导致速度变慢),人们希望浏览器速度很快,所以他们用C ++编写。

在一个理智的世界中,编写使用面向网络的软件的人们会因为使用C语言固有的所有安全性问题而感到震惊,而实际上这样做是犯罪行为。(仅查看​​过去15年左右对各种浏览器发现了多少缓冲区溢出漏洞!这些编码器造成了数百万美元的损失?)

还有其他能够创建快速二进制文件的编译语言。问题是他们没有和C家族一样的风险,因此我们所有人都要为此受苦。

有趣的事实:莫里斯·沃尔姆(Morris Worm)于1988年进入Internet时,最终证明了用C语言编写操作系统和面向网络的软件的问题(由于它们是该语言的固有缺陷,至今仍未解决。 ,)苹果已经发布了迄今为止用Pascal编写的迄今为止最先进的操作系统。


15
??我很喜欢Mac OS,但是称它为世界上最先进的OS却很愚蠢。它甚至与UNIX和VMS不在同一范围,更不用说IBM大型系统:单用户,无虚拟内存,有限的流程管理。可以肯定的是,它有一个非常不错的窗口系统,但即便如此,它还是从施乐帕克(Xerox Parc)和大量学术项目衍生而来的。我也认为许多Mac OS实际上是用M68k汇编编写的。这些库使用了Pascal函数调用标准,因为人们期望Pascal将成为主要的应用程序语言。
查尔斯E.格兰特

5
2000年前的Apple操作系统并没有比MS操作系统更稳定。当我在90年代从事两个项目时,一个使用Mac OS,另一个使用NT,我需要的崩溃和重新启动次数相同。现在它们都是某种基于C的语言。(Apple将Objective-C用于其当前版本)。在基于C的语言中,安全性可能会更加困难,但是使用其他语言并不能使其突然变得更加安全。
Berin Loritsch 2011年

13
@ Mason,Mac当时不需要这些功能的事实并不意味着这些功能并不重要。您毫无保留地声明Apple OS是世界上最先进的操作系统,但显然您真正要说的是它具有最复杂的用户界面。那是一个可以辩护的声明,但是没有您写的那么宏伟。编写可用的GUI很难。编写可靠的分页内存系统非常困难。说一个比另一个重要更重要。我们现在知道的消费者级计算不可能没有这两者。
Charles E. Grant

5
@梅森:您的经历在很多方面与所有人和其他人都明显不同。:-)
杰里·科芬

3
@Mason:大声笑,指Mac OSX之前的版本为“高级”。Apple OS一直是崩溃的源头,尤其是由于其极其原始的文件系统。
匿名类型

2

访问系统级API

所有浏览器都必须在某个时候与操作系统进行交互,并且大多数主要的操作系统都具有完善的C和C ++ API和库。使用C或C ++中的这些API通常比编写包装更容易。


0

控制性和便携性

大多数速度参数可以任意选择,但是在任何需要精确控制完成方式的事情中,许多高级语言都会在您的游行队伍中大放异彩。对此有一些例外,但是其中大多数都没有足够的跨平台来支持类似浏览器的功能。


0

旧版兼容性-无法丢弃旧代码

它与C ++与其他语言的优劣无关。您肯定可以使用Haskell这样的语言从头开始编写更好的浏览器。如果他们需要保证某些性能特征,那么这个重要的项目甚至可以实现自己的JVM。就像Facebook如何编写自己的PHP编译器/优化器。

破坏非标准标记的浏览器要比没用的糟糕。传统兼容性是如此关键和复杂,以至于不能重写。很多钱和时间都花在了经过战斗考验的安全性等上,您不能仅仅将这些投资扔掉。同样,就像Facebook 仍然是用PHP编写一样。


我能理解为什么人们可能不会对此赞不绝口,而是对它不满意?这很奇怪。这是您的+1。
Thomas Eding

您有一个(小)要点,但是您的第一句话就把那个丢掉了。当然,它确实与C ++与其他语言的优点有关。
Chiel 10 Brinke 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.