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

评论

Firefox用C ++和Javascript编写,而不仅仅是C ++。

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

这是这个问题的正确小组吗?

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

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

#1 楼

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


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

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

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

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

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

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

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

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

暂时,C ++确实淘汰了替代方法。

评论


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

– Greyfade
2011年1月31日20:13

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

–安托
2011年1月31日20:16

根据my.opera.com/kilsmo/blog/2008/01/29/opera-is-not-based-on-qt,Opera不基于Qt

–安托
2011年1月31日20:33

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

–贝琳·洛里奇(Berin Loritsch)
2011年1月31日21:00

解析器生成器的可用性并不是真正重要的-在所有浏览器中,HTML,XML和JS解析器都是手写的,而CSS在某些浏览器中。

– gsnedders
13年7月31日在16:29

#2 楼

我决定写一本关于这本书的小说,希望人们能掩饰并赞扬我。不,不,只是在开玩笑!我受不了每个字。每个字,我都告诉你!

在“为什么”之前问“何时”

所有主流的网络浏览器都可以追溯到90年代。 Konqueror成为Safari和Chrome; Netscape成为Firefox; IE和Opera仍然是IE和Opera。这些浏览器在现有功能上都有15年的领先优势。

我建议您甚至尝试命名一种可以接受的跨平台(Windows / Mac / Unix,甚至更糟糕)的语言,该语言在1995年左右可用。现代浏览器的起源。要用C / C ++以外的任何东西构建内核,您可能不得不构建或购买和修改编译器和平台库。

今天怎么样?有哪些替代方案?

为了好玩,让我们今天思考一下这个问题。是的,有替代方法,但仍然存在主要问题。

语言选择至少会带来以下问题:


知识问题-雇用/培训开发人员或吸引人才贡献者
组织/社会问题-语言接受
语言实施:速度,平台支持,工具
语言能力

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。语言能力

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

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

结论:

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


C ++:选择跨平台工具包或构建一个(1、2、3和4)工具很有趣。玩得开心(4)在其中构建稳定,安全的浏览器。
C或C ++和HLL:最好的选择。用动态语言挑选毒药;参见(1)和(2)。好的语言太多,每种语言的追随者太少。 (1、2、3和4)在工具包上。
Java:如果您要讨好中层管理人员,那就是第二好的选择。见(4);在Java中构建大量东西比在此列表上的任何其他东西上花费的代码要多得多,但是可能需要使用C。
Scala:击败Java on(4); (1)和(2),但仍在流行。
C和Javascript:作为一种特殊情况,这很有吸引力,因为您已经必须构建或获取并吸收Javascript解释器。 (因此使用Firefox。)(1、2、3和4)在工具包上; Mozilla人民建立了自己的IIRC。
C#:在(3)上玩得开心。您可能对GTK#感到困惑,但是这样做还是不错的,或者您可以在GTK#和Windows窗体之上构建自己的图层和渲染器。
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(并非专门针对我的回答),这模糊地落入了“杂项快速”存储桶。试图保持这种语言列表的平等和最新将是一场失败的战斗,因此,在撰写本文时,我将其称为具有代表性的示例,不理会它。

评论


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

–闪闪发光
2011年1月31日20:47

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

–杰里·科芬(Jerry Coffin)
2011年1月31日20:58

请注意,IE曾经围绕IE4跨平台。

–JasonFruit
2011年1月31日21:01

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

–亨利
2011年1月31日21:39

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

–匿名类型
2011年1月31日21:49

#3 楼

速度

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

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

经过编辑,以包含来自MSalters的响应

评论


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

–亨利
2011年1月31日21:37

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

–匿名类型
2011年1月31日21:42

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

–托比·艾伦(Toby Allen)
2011年1月31日23:45

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

– Ryan Hayes
2011年2月1日,0:05

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

– gbjbaanb
2011年4月11日23:14

#4 楼

可移植性

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

评论


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

–乔丹·帕默(Jordan Parmer)
2011年1月31日19:40

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

–JohnFx
2011年1月31日21:44

浏览器真的以GUI为中心吗?

–克里斯·范·贝尔(Kris Van Bael)
2011年1月31日22:34

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

– Pete
2011年2月1日7:37

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

–JohnFx
2011年2月1日下午14:08

#5 楼

(我已经在Firefox上工作了大约五年。)发问者说的很对,Firefox的很多代码都是C ++,实际上,如果按代码行数计算,C ++是大多数(尽管并不能说明全部问题,但由于我们有很多JavaScript,而JS比C ++更为简洁。)

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

C ++
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编写的。但是令人惊讶的是。

评论


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

–黛米
2013年12月23日0:24在

#6 楼

好吧,您必须直接请那些产品的开发人员获得答案,但是我怀疑这是熟悉度(这是那些开发人员最了解的),性能(编译为本地二进制而不是字节码)和工具(与C之类的语言相比,C ++充满了许多不错的省力的小工具,例如STL)。

#7 楼

历史记录
每种浏览器都有一些影响语言选择的历史记录。
例如,Chrome和Safari都基于WebKit,而WebKit起源于KDE项目的KHTML部分。 KDE最初(部分地)是作为Qt GUI工具包的演示而创建的,因此KDE总体上是一个C ++项目。当时,所有新的KDE项目都是完全用C ++编写的,因此对于KHTML而言,这是一个合理的选择。此后已移植到其他GUI工具包中。
Opera的Presto引擎在编写时考虑到性能和较小的二进制大小:C ++是合乎逻辑的选择。
Microsoft的IE被编写为ActiveX组件的集合。 ,它可以用任何具有COM绑定的语言编写,但很可能是用C ++的子集编写的,因为它们的大部分代码库已经用该语言编写了。
Netscape的Mozilla用C ++编写了,可能是因为可移植性是他们的主要关注点。 C和C ++编译器(实际上)无处不在,因此这是一个合理的选择。
这些选择没有内在的技术原因。它只是“当时看起来像个好主意。”

#8 楼

C和C ++中的网络易于优化,因为如果您不需要的话,就不必使用库。我怀疑C ++是首选语言,因为它具有C的优势:


速度
优化
一定程度的可移植性
编译语言,而不是解释性的

,并结合了OOP的优点:作为字符串处理和数据结构


评论


Java或C#没有这些优势吗?

– Nipuna
2011年1月31日在18:29

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

– Michael K
2011年1月31日18:32



Java和C#也已编译。就构建GUI而言,C#将比Java更具优势-这是任何浏览器的关键部分。 Java具有可移植性的优势。 Java和C#都在目标平台上重新编译-可以说是更好的速度改进。

–贝琳·洛里奇(Berin Loritsch)
2011年1月31日19:35

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

– Michael K
2011年1月31日20:28

你再也不能倒退了!联网;您可以花大价钱去卷曲,而浏览器也一样快。网络CODE不是慢速位。如果不是库,套接字是什么?字符串处理;这是任何html浏览器的核心,它不是非关键的,我想不出一种语言的字符串处理能力比C语言(而不是C语言)要差。

–亨利
2011年1月31日21:53

#9 楼

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

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

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

评论


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

–GrandmasterB
2011年1月31日在20:08

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

–贝琳·洛里奇(Berin Loritsch)
2011年1月31日20:18

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

–GrandmasterB
2011年1月31日20:28

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

–杰里·科芬(Jerry Coffin)
2011年1月31日20:40

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

–亨利
2011年1月31日21:46

#10 楼

因为用其他语言编写的浏览器(例如,HotJava,显然用Java编写的足够多)从未达到任何程度的市场接受/渗透。或最新的(HotJava已有相当一段时间没有更新),但是当我尝试时,缺乏市场渗透似乎(至少对我而言)非常容易理解-难看,缓慢且与Windows不兼容相当多的网页。最终,它似乎基于一个从未出现过的前提:网络将主要由Java小程序组成,而HTML只是一个包装器,用于告诉哪些小程序显示在何处。

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

我认为所显示的语言“态度”也会产生影响:C ++ C)始终强调实用性和实用主义。这种基本态度倾向于吸引也很务实的程序员。许多其他语言都更多地强调了优雅之类的东西-这样,它们吸引了以同样方式思考的程序员。问题在于我称之为“ Lisp效应”。症状包括:对最琐碎的事情的最优雅实现的无休止的争论。
无法冻结功能并完成可以交付的产品(即使有缺陷)
/>无法妥协。任何不同意我的人不仅是错误的,而且必须是愚蠢或邪恶的。

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

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

评论


WRT第3点,我肯定会毫无保留地断言,在C系列中编写面向网络的软件要么是愚蠢的,要么是邪恶的,因为它要么在不知不觉中(愚蠢)要么在有意地(邪恶)使用众所周知的引入安全性的系统工作会对用户造成伤害的漏洞。从道德上讲,这等同于给士兵涂上目标的防弹衣。

–梅森·惠勒
2011年1月31日在20:03

@梅森:您的确切偏见有关的显示肯定会受到赞赏。

–杰里·科芬(Jerry Coffin)
2011年1月31日20:10

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

–杰里·科芬(Jerry Coffin)
2011年1月31日20:20



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

–杰里·科芬(Jerry Coffin)
2011年1月31日20:48



@Mason:gets中的缓冲区溢出是一个简单的结果,因为您没有将使用的缓冲区的长度传递给它。语言的基本内容都没有,您可以在Pascal中做同样的事情(我有)。无论语言如何,编写针对智能攻击者安全的软件都不容易。基于这三个方面的经验,C语言比Pascal语言要容易一些,而C ++语言比C语言要容易得多。

–杰里·科芬(Jerry Coffin)
2011年1月31日在21:17



#11 楼

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

在一个理智的世界中,编写面向网络软件的人们只会想到使用一种语言,而这种语言背负着所有C固有的安全性问题,这真是一件令人震惊的事情,而实际上这样做是一种行为。刑事过失。 (只要看看在过去的15年左右的时间里针对各种浏览器发现了多少缓冲区溢出漏洞利用这些编码器就要造成几百万美元的损失?)

还有其他编译语言能够创建快速的二进制文件。问题在于他们与C家族的接触程度不同,我们所有人都为此受苦。

有趣的事实:当Morris Worm最终在1988年进入互联网时,演示了用C语言编写操作系统和面向网络的软件时存在的问题(由于它们是语言的固有缺陷,至今仍未解决),苹果公司一直在发布世界上最先进的操作系统,因此到目前为止,已经用Pascal编写了好几年了。

评论


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

–Charles E. Grant
2011年1月31日19:18

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

–贝琳·洛里奇(Berin Loritsch)
2011年1月31日19:29

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

–Charles E. Grant
2011年1月31日19:39



@梅森:您的经历在很多方面与任何人和其他人都明显不同。 :-)

–杰里·科芬(Jerry Coffin)
2011年1月31日20:27

@Mason:大声笑,指Mac OSX之前的版本为“高级”。 Apple OS一直是导致崩溃的源头,尤其是由于其极其简陋的文件系统。

–匿名类型
2011年1月31日21:52

#12 楼

访问系统级API

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

#13 楼

控制性和可移植性

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

#14 楼

旧版兼容性-无法丢弃旧代码
与C ++与其他语言的优点无关。您肯定可以使用Haskell这样的语言从头开始编写更好的浏览器。如果他们需要保证某些性能特征,那么这个重要的项目甚至可以实现自己的JVM。就像Facebook编写自己的PHP编译器/优化器的方式一样。
破坏非标准标记的浏览器要比没用的糟糕。传统兼容性是如此关键和复杂,以至于不能重写。很多钱和时间都花在了经过战斗考验的安全性等上,您不能只是舍弃这些投资。同样,就像Facebook仍然是用PHP编写一样。

评论


我能理解为什么人们可能不会对此赞不绝口,但会否决?那真是怪了。这是您的+1。

–托马斯·埃丁
13年11月14日,0:10

您有一个(小)要点,但是您的第一句话就把那个丢掉了。当然,它确实与C ++与其他语言的优点有关。

–智利十克林克
2014年4月27日上午10:38