Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不在web应用程序中使用C?_Php_C_Web Applications - Fatal编程技术网

Php 为什么不在web应用程序中使用C?

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编写的web服务器,你必须通过用C编写网站/web应用程序来利用它。一个明显的好处是G-WAN网站所建议的速度

然而,在论坛上,G-WAN的创建者问为什么不在基于web的应用程序中使用C,我想不出一个原因,除了它很难(对我来说,我是C的新手)。我们之所以使用PHP、Python、Ruby等,除了这些语言易于开发之外,肯定还有更多的原因。我不认为这是一个很好的理由


所以我想告诉你:为什么不在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之类的快速语言时#

C是一种非常低级的语言,有很多用途:没有面向对象编程,需要大量的手动资源管理

例如,C在web上的使用是有限的。它主要用于低资源的嵌入式应用程序案例

然而,也有类似的C++web框架用于高性能web应用程序开发

C++允许您享受对所做工作的高抽象和细粒度访问,为部署和开发大型应用程序提供了更好的选择

但在性能和资源使用更为关键的情况下,您可以使用它们 然后是上市时间和开发成本,因为通常web开发速度更快 为Java、Python或PHP等语言使用良好的web框架。一般来说 在C++中,除了相同的工资之外,java和P/*语言的程序员不太好。
<> P>这是优先级问题,对于C++开发的工具也较少,那么对于PHP/Python/Perl或java。

< P>我知道这个问题已经被回答到死亡,但是有2件事情至今没有提到,对于任何编程范例来说都是非常重要的。尤其是在web开发中,有很多人不一定是程序员,他们在使用代码

  • 参与,有用的社区,也就是已经解决了我问题的人。即使是最无趣的noob也可以很容易地向Google解释为什么他们在PHP中会收到“headers ready sent”错误,而这些信息可能不适用于新出现的框架或语言,或者没有临界质量
  • 框架,使大多数程序员能够解决业务问题,而不是一起破解代码

  • 如果我有一个要求极高性能的关键应用程序,我会使用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("&#32;");  else
              if(c == '"')  sb.append("&quot;"); else
              if(c == '&')  sb.append("&amp;");  else
              if(c == '<')  sb.append("&lt;");   else
              if(c == '>')  sb.append("&gt;");   else
              if(c == '\n') sb.append("&lt;br/&gt;"); 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();
      }