为什么在Web开发中不使用C ++?

很多人看到Java和C ++的相似之处。

但是当涉及到web开发时,JavaEE正在被使用。 而C ++几乎没有支持呢? C ++很快。 那么为什么它不被用在web开发中呢?

由于瓶颈是数据库和networkingI / O,C ++的可能更快的执行速度通常无关紧要。

因此,从简单/开发速度,安全性(当您的Web应用程序核心转储时真的很糟糕)和框架的可用性的好处将超过执行速度收益许多应用程序的好处。

C ++的执行速度可能会很快,但是Java,C#,PHP等在上市时间上更快。

恕我直言,这是关于工具链。 Java,Ruby等已经有了成熟的Web开发工具链。 这些工具在大多数情况下使开发更快。 C ++有一些环境,但没有一个具有广泛的用法。 另一个主要的原因是,大多数较新的语言都是先开发应用程序,再开发通用计算。

我会和Karl Voigtland的回答一样(尽pipe我也喜欢Dan Diplo),但是我想补充一点,我个人是为速度就是一切的公司工作的(类似于google的方式),我仍然不会使用C ++对于networking应用程序,因为性能差异将是绝对可以忽略不计的,尤其是与I / O瓶颈和networking延迟相比,无论如何这都是真正的问题。

C ++使您成为一个标准的,有据可查的,广泛使用的框架(无论哪一个恰好是这样),这就构成了您不得不复制的大量工作,并将您牢牢地置于崩溃服务器的领域出错。

这么多的努力和这么多的风险没有获得任何收益。 C ++是一个更古老的文明时代的武器,它不是networking。

我曾经在C ++中用一个定制框架完成了一个非常高性能的网站。 我们没有使用Apache–我们有一个特定领域的Web服务器,可以快速高效地为C ++中的手工编码提供特定的内容。

该服务器处理来自当时最高收视率的黄金时段电视节目的请求。 (主机会说“login到……”),即时有10万以上的人在冲击服务器,一台普通的PC能够处理负载,但是我们有3次运行,只是万一有人下楼等

事实是,我们现在用于Web开发的系统是非常浪费的。 为了易于维护,我们正在交易CPU周期。

看看像http://acme.com/software/thttpd/这样的架构,它们是非常快速的Web服务器。;

如果你曾经用C ++开发一个Web应用程序,你会知道为什么。 基本上,没有任何东西可以接近.NET,Java或PHP所具有的框架,也没有像ROR或Django这样的特定于Web的东西。

Web开发充斥着编辑HTML的人,而从C ++或C那里得到的人却less得多。对于大多数Web开发人员来说,倾向于select垃圾收集的简单语言,优先性能快速的结果。 C ++真的不是这样的语言。

但这只是一个肤浅的阅读。 主要是关于时尚。

我正在用C ++构build一个浏览器游戏,是的,一些部分明确地吸引(比如使用FastCGI,它不能一次支持多个连接,除非你正在实现你自己的FastCGI-Handler,CGI甚至更糟糕, t支持多路复用(但实现的魅力),并​​使用自定义服务器API是不可移植的),但是,一旦你build立了环境,开发并不困难。

例如,下面的代码打印出所有的cookies:

for( map<string,string>::const_iterator it=data[cookie].begin(); it!=data[cookie].end(); ++it) { cout << "<b>" << it->first << "</b>: " << it->second << "<br>\n"; } 

或者,如果您想像使用Qt一样deviseWeb应用程序,请查看Wt ,这可以减less开发C ++ – Web应用程序到手动内存pipe理的痛苦。

我认为答案比历史更重要。

早在Web开发之前,C ++就是为系统编程等任务而创build的。 由于它长期坚持ISO标准,因此语言本身避免了解决具体问题领域。

就networking开发而言,C ++是由Java压缩的,其后的所有其他东西都有Web开发工具。

但是C ++是一个顽强的小野兽,由于(恕我直言)它的效率和优雅的强大组合。 当你谈论Web开发等相当高级的function时,你通常不得不将C ++看成库。 C ++的一stream库boost,具有devise良好的低级同行评审multithreading联网工具( boost :: asio )。 已经提供了简单的http客户端和服务器示例 ,并且将会增长和稳定。

我认为C ++正在这个领域上升,因为它从最后的地方开始工作。

更新: 这里是一个严格的审查过程之前的任何事情将被接受进入升压(在这种情况下,拒绝进程库)的一个例子。 而且你可以想象,真正进入C ++标准的审查过程会更高。 有一个明确的目的是保持C ++(和boost)的范围紧密和坚如磐石。

C ++ 曾经是Web开发的通用语言。 然而,当时没有什么可行的select。 诸如C#和Java之类的语言是为了应用程序开发而devise的,而不是通用的,因此它们是Web应用程序的更好select。

你们有些人需要研究这个概念:资源获取是初始化。 此外,我还没有一个Coredump写在现代C ++代码在….年? C ++可能不太stream行,因为它被devise成一种可在许多架构上编译的便携式机器代码语言。 因此,没有标准的networking或线程库,这就上链到Web框架。

networking首次出来时速度不是什么大不了的。 我们在Unix机器上运行服务器,这些机器有足够的功率来填充10Mb以太网。 用户的handfull在拨号上,网站大多是文本。 所以我们使用Perl,只是因为很容易做string操作,我们中的一些人甚至使用了TCL(不寒而栗)。

到networking腾飞的时候,需要更大更复杂的系统,dynamic语言已经变得更好了,并带有许多有用的库(特别是Perl)。 然后,企业以一种很大的方式买进了Java – Sun实际上设法推销了一些东西!

没有理由我们不能在C ++中拥有所有的Java / C#的Web特性,但是这些库没有被开发出来,或者从来没有被广泛吸引。

在C ++中有很多web开发,但是通常在自定义web服务器上执行非常高性能的任务。

我是一个C ++开发人员,他首先移植到Java(Scala),然后部分移回到C ++ 11。
C ++没有广泛用于Web开发的一些原因是:

  • 安全性:解释器和“托pipe”语言(如JVM)提供了一种防止恶意代码执行的缓冲区溢出,内存损坏等问题。每个大型程序都有错误,但在Java中,这些错误很less导致一个cookies控制你的网站。 在C ++中,导致系统崩溃的错误(或者使用导致错误的库)很容易。 “系统”编程语言中的这个“缺陷”现在可以通过像AppArmor这样简单的系统防火墙来缓解。 我为我的所有C / C ++程序设置了一个AppArmorconfiguration文件,如果这样的系统防火墙不可用,我将不会返回到C ++。
  • 易于开发:C ++最近只获得了自动内存pipe理(shared_ptr),匿名函数,for循环,types推断等。现代C ++ 11是一种体面的语言,但是旧的C ++比其他的更难以开发。
  • 太多样了:在Java中有一个标准的Web开发方式(Sevlets),在C ++中必须通过反复试验find不同的库和框架之间的路。 C ++的好的组合方式可能需要很多年的时间。

首先,Java和C#库/框架比C ++要大得多。 “标准”C ++几乎没有什么有趣的网页开发。 标准的C ++库甚至没有与networking,线程或便携式文件系统访问有关的丝毫事情。 我怀疑C ++速度是一个很重要的因素:在服务器设置中,Java和C#通常和C ++一样快(在这里你可以使用运行时的全部JITfunction,因为开始时间和co是没有关系的)。

因为C ++很难学。

对于每种types的工作,你都需要一个合适的工具。 可以用一把钳子将钉子钉入板子,但锤子更适合于它。

因为Web开发涉及很多HTML。 在Java的旧时代,只有Servlet,这是适得其反的。 所以他们发明了JSP。

从这个angular度来看,C ++甚至比Servlet更差。

在过去的几天,Assembly Guys假装C ++是蹩脚的,而使用Assembly语言要好得多,所以你的问题涉及到同样的观点。

因为我每天早上都想跳出窗口来上class。

同意框架是重要的,并为您解决了许多典型的问题。 c ++将不会为你提供这些框架。 此外,您可能正在优化一个级别的性能,但这可能不会导致最优化的解决scheme。 数据库访问时间是一个较大的站点,可能是一个更大的问题,最值得担心的可能是应用程序执行时间。

另外,你正在谈论事情发生变化的Web开发。 c ++并不是这个领域的select语言,你应该静静地试图赶上其他人一起玩的人群。

坚持与人群,使用什么在那里。 不要在本地进行优化。 你过的更好

想象一下,你需要一个网站。 有两种select可供您使用:1.支付x金额,并在y时间内使用.net / java / python / ruby​​ / ect开发一个站点。 2.使用C ++(FastCGI)支付xn金额并在ym的时间内开发 。 n和m是3-5 +。 你喜欢什么?

另一个原因是在C ++中编写隐含不安全的代码(缓冲区溢出等)比在具有适当边界的语言中检查抽象的原始内存远离开发人员要容易得多。 C ++比替代方法需要更多的安全使用技巧。

C ++对于Web开发来说不是很方便,因为程序员必须考虑到对象被正确的破坏。 在像C#和JAVA这样的语言中,不需要创build析构函数,因为实例化对象只存在于一定的范围内。 所以实际上你可以说C#和JAVA这样的语言比C ++更适合于Web应用程序。