Php 为什么不在web应用程序中使用C?
今天早上,当我看到一些不同的web服务器时。据我所知,这是一个用C编写的web服务器,你必须通过用C编写网站/web应用程序来利用它。一个明显的好处是G-WAN网站所建议的速度 然而,在论坛上,G-WAN的创建者问为什么不在基于web的应用程序中使用C,我想不出一个原因,除了它很难(对我来说,我是C的新手)。我们之所以使用PHP、Python、Ruby等,除了这些语言易于开发之外,肯定还有更多的原因。我不认为这是一个很好的理由Php 为什么不在web应用程序中使用C?,php,c,web-applications,Php,C,Web Applications,今天早上,当我看到一些不同的web服务器时。据我所知,这是一个用C编写的web服务器,你必须通过用C编写网站/web应用程序来利用它。一个明显的好处是G-WAN网站所建议的速度 然而,在论坛上,G-WAN的创建者问为什么不在基于web的应用程序中使用C,我想不出一个原因,除了它很难(对我来说,我是C的新手)。我们之所以使用PHP、Python、Ruby等,除了这些语言易于开发之外,肯定还有更多的原因。我不认为这是一个很好的理由 所以我想告诉你:为什么不在web应用程序中使用C?这与我们在大多数编
所以我想告诉你:为什么不在web应用程序中使用C?这与我们在大多数编程中不使用C的原因相同。好处(主要是性能)并不超过成本(开发时间、缺少自动内存管理、缺少缓冲区溢出的自动保护、在编辑和测试阶段之间有一个编译阶段等等)。要使C程序正确且安全,需要非常小心。这种关心意味着你需要有真正优秀的人来编写你的程序。那意味着你要付更多的钱 此外,C没有.NET(以及其他主要的以web为中心的平台)那样从庞大的单一标准功能库中获益。因此,您可能需要购买组件,或者执行互操作,或者使用“免费”的、以“web为中心”的语言(比如PHP、C#或Ruby等)来实现自己的功能。那意味着你要付更多的钱
加上所有这些,单线程计算速度在web上并不是那么重要。如果您需要更大的可伸缩性,大多数组织都可以在经济上投入更多的核心来解决这个问题,然后就没事了。当然,并非所有人都是这样。我可以想象,谷歌引擎的核心是用C语言或类似语言编写的,这不仅是为了速度,而且是为了节省真正的能源成本。你认为简单不是一个好理由。我认为这是一个很好的理由。如果您需要终极性能,那么C语言就可以了,但是其他语言会抽象掉一些困难的东西,以提高生产率、可维护性和减少缺陷。大多数网络应用程序,尤其是web服务器,都更“受I/O限制”——即它们输出数据的速度远远快于网络所能接受的速度。因此,CPU效率高的东西并不是巨大的胜利,而可扩展和可维护的东西则是巨大的胜利。因此,没有理由接受C语言的缺点,而失去Java、.NET、Python、Perl或其他语言等托管环境的优点。C语言不是一种操作字符串的方便语言 比较C#: 相应的C:
const char* foo = "foo";
const char* bar = "bar";
char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1);
strcpy(foobar, foo);
strcat(foobar, foo);
//todo: worry about when/where the foobar memory
//which was allocated by malloc will be freed
- 它是
- 它是
- 很难维持,开发时间在一个数量级上比较慢
- 您的大多数web内容可能都是I/O绑定的,因此加速甚至无关紧要,特别是当您使用Java或C之类的快速语言时#
<> P>这是优先级问题,对于C++开发的工具也较少,那么对于PHP/Python/Perl或java。 < P>我知道这个问题已经被回答到死亡,但是有2件事情至今没有提到,对于任何编程范例来说都是非常重要的。尤其是在web开发中,有很多人不一定是程序员,他们在使用代码
如果我有一个要求极高性能的关键应用程序,我会使用C语言,但编写它会花费很长时间,所以我永远无法进入市场。除非有#1或#2,否则使用它对我来说是不可行的。如果难度和复杂性根本不是问题(哈!),那么我不会停留在C上。我会编写x86汇编。我已经有好几年没有使用任何不是x86的web服务器了,而且它看起来越来越不可能了 使用C(而不是汇编或更高级的东西)意味着C是程序员效率和计算机效率的最佳选择
对于我编写的程序来说,情况并非如此:C与我想要编写的程序类型很不匹配,与一个像样的宏汇编程序相比,它的优势并不显著。我现在正在编写的程序在我选择的HLL中并不难,但无论是汇编还是C语言,它的复杂性都非常高,永远无法完成。我承认,一个足够聪明、有足够时间的程序员可以使它在汇编或C语言中运行得更快,但我不是那个程序员。下面是一些与web相关的代码
const char* foo = "foo";
const char* bar = "bar";
char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1);
strcpy(foobar, foo);
strcat(foobar, foo);
//todo: worry about when/where the foobar memory
//which was allocated by malloc will be freed
String.Format("{0:n}"...
new DecimalFormat("0.00"); ...
number_format($amount, 2); ...
sprintf("%'.2f", amount);
// all litteral strings provided by a client must be escaped this way
// if you inject them into an HTML page
public static String escape_html(String Name) {
int len = Name.length();
StringBuffer sb = new StringBuffer(len);
boolean lastWasBlankChar = false;
int c;
for(int i=0; i<len; i++) {
c = Name.charAt(i);
if(c == ' ') sb.append(" "); else
if(c == '"') sb.append("""); else
if(c == '&') sb.append("&"); else
if(c == '<') sb.append("<"); else
if(c == '>') sb.append(">"); else
if(c == '\n') sb.append("<br/>"); else {
c = c&0xffff; // unicode
if(c < 32 || c > 127) {
sb.append("&#");
sb.append(new Integer(c).toString());
sb.append(';');
} else
sb.append(c);
}
}
return sb.toString();
//szName = sb.toString();
}