ste*_*efs 31
脚本语言可能比C慢,但这是一个问题吗?几乎从不.如果性能成为问题,您开始只翻译关键部分.
twitter/ruby就是一个很好的例子; 红宝石很慢.一些语言功能(首先让ruby很好)只是防止不同类型的优化(jruby家伙有一篇很棒的文章关于这个...是ola bini?不记得了).
仍然,Twitter由红宝石提供动力,因为红宝石足够快.不久前,"博客"报道Twitter出于性能原因迁移到scala ......事实是,只有消息队列(以及后端的其他部分)转移到scala.雅虎运行各种语言; php用于前端,其他更快的语言用于性能至关重要的地方.
那么,为什么表现不那么重要?有几个原因:
另一个支持脚本的点:许多脚本语言支持内联或包含快速(C)代码:
我认为,特别是在网络开发中,高级脚本的优点远远超过了缺点.
Ben*_*oyt 22
几年前,我或多或少地在工作中学习了网络应用程序编程.C是我所熟悉的主要语言,所以我用C.写错了(相当大规模的)Web应用程序.C的字符串处理和内存管理很繁琐,而且由于我缺乏Web应用程序的经验,它很快就变成了一个难以维护的项目.
C++会明显更好,主要是因为std::string它比char*.
但是,现在我每次都使用Python(虽然PHP不是一个糟糕的选择,也许更容易开始使用).Python的字符串处理非常棒,它可以无缝地处理Unicode.Python比C++有更好的Web工具和框架,它的正则表达式处理和标准库(urllib,电子邮件等)工作得很好.而且您不必担心内存管理.
我可能只在网络应用程序中使用C或C++,如果我受到严格的RAM限制(如在嵌入式微型计算机上),或者我在Google工作并编写了一个必须响应数千个查询的搜索引擎每秒.
Mic*_*rdt 11
使用C++可能会导致应用程序比PHP,Perl或Python快得多,并且比C#或Java快一些 - 除非它花费大部分时间等待数据库,在这种情况下不会有差别.这实际上是最常见的情况.
另一方面,由于benhoyt提到的原因,用C++开发Web应用程序需要更长的时间并且难以维护.此外,它更有可能包含严重的安全漏洞(现在每个人都最担心SQL注入和XSS - 但如果他们用C++编写他们的webapps,那将是缓冲区溢出,并且它们将被整个网络变为pnwned而不仅仅是数据).
这就是为什么现在几乎没有人用C++编写Web应用程序.
小智 8
我认为有人应该成为Webapp/C++主题的先驱,进行测试并提供概念验证解决方案.
随着STL的到来和Boost解析文本的开发在C++中变得非常容易.两年前,如果我必须解析CSV数据,我会使用Python或PHP.现在我使用C++和STL/Boost.将CSV文件读入矢量?没问题,简单的getline + boost :: split + lexical_cast.计算对矢量中的数据总和?没问题:
pair<int, double> sum_int_double(pair<int,double> & total, pair<struct in_addr, pair<int,double> > & a) {
total.first += a.second.first;
total.second += a.second.second;
return total;
}
pair<int,double> mixedSum = accumulate(mixedVec.begin(), mixedVec.end(), emptyPair, sum_int_double);
Run Code Online (Sandbox Code Playgroud)
将数据从地图传输到对的向量?没问题:
mixedVec.assign(amap.begin(), amap.end());
Run Code Online (Sandbox Code Playgroud)
一切都很明确和尖锐.字符串操作,正则表达式,算法,OOP等等.在C++中,一切都已经很好地定义和成熟.如果您的应用程序将是真正的应用程序,而不是解析基于文本,那么C++也是其OOP功能的不错选择.
问题是"创造价值的地方在哪里?"
如果您认为该值是在内存管理中创建的,请仔细进行类设计并使每晚构建工作,然后使用C++.您将花费大量时间编写大量代码来执行重要操作,例如删除不再引用的对象.
如果您认为该值是在部署人们可以使用的应用程序,那么将Python与Django框架一起使用.Django教程告诉您,在大约20分钟内,您可以启动并运行应用程序.它是生产就绪的,你可以专注于重要的事情:
该模型.只需在Python中编写模型,ORM层就可以为您处理所有数据库交互.没有SQL.没有手动映射.
演讲.只需在HTML中设计一些{{}}"在这里填写一个值" {% for thing in object_list %}的页面和一些结构,您的页面就可以开始了.没有字符串操作.
视图功能.编写简单的Python函数来封装站点的处理部分.不是验证(那些是在表单中),不是表示(在模板中),而不是底层模型(在模型类中),而是一些授权检查,查询处理和响应公式.由于Python有一组丰富的集合类,因此这段代码非常简短.
其他的东西.URL映射是Python正则表达式.表格与您的模型相匹配; 您可以子类化默认值以添加自定义输入验证和处理.
用于低级模型功能以及端到端操作的精彩单元测试框架.
没有内存管理,没有抽象和接口的严谨的类设计.不用担心如何优化字符串操作.没有夜间建造.只需创造真正有价值的东西.
如果您希望能够在现有的运行进程(例如守护进程)中实现Web服务,该进程是用C/C++编写的.使该进程实现该接口的FastCGI协议是有意义的.让Apache处理HTTP(双向SSL等)到外部世界,并通过套接字通过FastCGI进行现场请求.如果您在PHP中执行此操作,则必须让PHP与您的流程进行通信,这意味着维护PHP代码以及您的流程.