为什么不将C用于您的Web应用程序?


101

今天早上,当我遇到G-WAN时,我正在看几个不同的Web服务器。据我了解,它是一个用C编写的Web服务器,您必须通过用C编写您的网站/ webapps来使用它。一个明显的好处就是速度,就像G-WAN网站所建议的那样。

但是,在论坛上,G-WAN的创建者问为什么不将C用于基于Web的应用程序,除了困难之外,我无法想到一个原因(无论如何,对于我来说,我是C的新手)。除了使用这些语言轻松开发之外,我们还有其他更多原因需要使用PHP,Python,Ruby等。我认为这不是一个很好的理由。

所以我告诉你:为什么不为Web应用程序使用C?


34
为什么我们用炉子而不用火直接做饭?为什么步行或骑自行车会更健康,但为什么我们要开车呢?为什么...我可以继续...
Felix Kling

16
@Felix-正如我所说,除了困难之外,还要列举其他原因。这意味着我知道存在其他语言来抽象难度。
Abs

15
从未真正考虑过C难度。
3Dave 2010年

10
@David Lively如果您没有故意使'c'陷入困境,那真的很有趣。做得好:)
punkrockbuddyholly 2010年

11
@MrMisterMan只花了四个月的时间就发现了那个人。=)
3Dave 2010年

Answers:


79

要正确并安全地获得C程序,需要格外小心。这样的照顾意味着您需要有非常好的人来编写您的程序。那意味着您支付更多。

同样,C也没有像.NET(和其他主要的以网络为中心的平台)那样从巨大的单一标准功能库中受益。因此,您可能必须购买组件,执行互操作或使用“免费”附带的其他功能来扩展自己的功能,我们应该说“以网络为中心”的语言,例如PHP或C#或Ruby或其他。那意味着您支付更多。

将所有这些添加到单线程计算速度在网络上并不那么重要这一事实。如果您需要更多的可伸缩性,那么大多数组织可以经济地将更多的核心扔在这个问题上,并且可以。当然,并非所有人都如此。我以为Google引擎的核心是用C或类似语言编写的,不仅是为了提高速度,而且是为了节省电力成本。


48
哇,因为库而反对C的.NET参数?当然,stdlib较小,但是我们在C中拥有数十年的库(许多开源)。我很难想到.NET stdlib中没有成熟且免费的C库的任何内容。

3
我不认为他专门为.NET争论,我认为他只是意味着那里的语言有很多内聚的库。我确定C有负载,但是老实说我没有遇到过任何将它们全部收集在一个地方或打包的仓库。
Abs

16
@Ken字符串操作是一个非常常见的Web应用程序任务。为此,存在C库,但它们不及[选择高级语言]中的库那么多或不可用。
Andres Jaan Tack的

23
@Ken:当您具有一个受良好支持的单一功能集与众多在功能集,许可和支持方面差异很大的小型库时,存在着巨大的差异。
Dave Markle 2010年

49

哼...

看来我在讨论中有点晚了-但是我现在才发现它。我非常感谢大家的投入。

我是G-WAN的作者,这清楚表明我已经认真从事此工作:G-WAN的速度比所有其他Web服务器(无处理)所有其他Web应用程序服务器(您可以想象的任何处理)都快。

是的,ANSI C还可以使用功能更弱的CPU处理更多的静态内容(ANSI C不仅涉及动态内容的飞行)。

顺便说一句,G-WAN使用C脚本(不需要C编译器和链接器),因此不存在编译/链接周期/延迟。

在将G-WAN与.NET Java和PHP进行比较的过程中,我用所有4种语言编写了类似的应用程序:http : //gwan.ch/source/

而且,令我沮丧的是,现代脚本语言并不容易使用。

一项工作特别令人沮丧的是,拼命搜索将完成您想做的“神奇” API调用。

考虑一下如何做“成千上万”:

C#

String.Format("{0:n}"...

爪哇

new DecimalFormat("0.00"); ...

的PHP

number_format($amount, 2); ...

ANSI C

sprintf("%'.2f", amount);

“ ...”表示必须进行一些预配置或后处理。ANSI C显然更易于使用和记住。

当PHP具有超过5900个API调用(不远处的C#和Java)时,找到合适的 API调用本身就是一个挑战。浪费时间查找(然后查找实现本 API调用的严重程度),在下次需要它时需要学习它的时间,所有这些时间都使您失去了解决应用程序所需的时间问题。

我已经读过(上面),PHP比ANSI C更简洁?为什么然后使用"//:: this is a comment ::"而不是"// this is a comment"?为什么会有如此愚蠢的“上千个”语法?

另一个通常的论点是Java等提供了对Web应用程序的专用调用。

我找不到任何可以用Java逃脱HTML的东西,所以我写了它的版本:

  // 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();
  }

您是否真的相信ANSI C中的相同代码会更复杂?不,这将既简单快捷。

Java(源自C)要求程序员将多行字符串与“ +”链接
。C#(源自C)要求程序员将多行字符串与“ +”链接
。PHP(源自C)要求程序员用'。'链接多行字符串。

ANSI C现在没有这个完全愚蠢(过时)的要求。

那么,现代语言是否宣称了如此明显的进步?我还在寻找。

真诚的

皮埃尔。


10
我不太理解您对大约数千个额外处理的评论;对于您刚离开的C#, amount),PHP可以保持原样,并且您的ANSI C示例还需要两个自变量(缓冲区和缓冲区长度)。除了Java以外,您的示例似乎证明了相反的观点。另外,我以前从未见过这种//:: comment ::语法。PHP当然不需要它。
icktoofay 2012年

1
老实说,所有其他选项看起来都比ANSI C好得多,后者“显然更易于使用和记忆” [sic]。
Jarrod Mosen 2012年

如果两者都是用C编写的,那么G-WAN与NGINX相比如何?
m4l490n

47

出于同样的原因,我们在大多数编程中都不使用C。收益(主要是性能)不会超过成本(开发时间,缺乏自动内存管理,缺乏针对缓冲区溢出的自动保护,在编辑和测试阶段之间具有编译阶段等)。


10
在输入相同的内容时,您击败了我。我只想补充一点,保护网站免受恶意的行为是不够的一个挑战是因为,我们并不需要从内存管理,指针等的滥用添加潜在的攻击媒介
罗布·艾伦

@Jordan:我感觉到您还没有用C语言完成任何Web编程。您所说的不适合Web编程方式的模型。

2
假设您的网站可以通过URL或表单输入与用户进行交互,那么可以肯定。一旦将这些数据发送到服务器,程序员就应确保正确分配内存。G-WAN对查询参数有一些抽象,但这并不能完全节省您的时间。我并不是说正确完成C Web编程并不能保证安全和快速,但是它更容易受到更严重的错误的影响。
约旦

3
叹气 @Kinopiko:如果您不知道缓冲区溢出是什么,则不应该使用C进行编码欲了解更多信息:securecoding.cert.org/confluence/display/seccode/...
L̳o̳̳n̳̳g̳̳p̳o̳̳k̳̳e̳̳

29

大多数网络应用程序,尤其是Web服务器,受“ I / O限制”的影响要大得多-即它们能够以比网络可接受的速度快得多的速度抽出数据。因此,具有高CPU效率的东西并不是一个巨大的胜利,而具有可伸缩性和可维护性的东西却不是一个大赢家。因此,没有理由接受C的缺点并失去Java,.NET,Python,Perl或其他语言等托管环境的优势。


1
虽然C要快几吨。

14
如果我可以用Java或Perl填充网络管道(并且可以),那么C更快的事实就无关紧要了。
Paul Tomblin

1
@Kinopiko,您是说与eBay(Java),Stack Overflow(C#/。NET),Google或以高级语言编写的百万个使用率较高的网站中的任何一个相比,拥有更大的渠道,更多的页面点击量和更多的数据要发送?
Paul Tomblin 2010年

1
@Paul Tomblin:Web应用程序的目的不是填充网络管道,而是进行一些处理。如果只需要提供一些文本和图像,则应使用静态html页面,这些页面具有出色的性能。在大多数情况下,静态页面是从缓存提供的,因此您的服务器不需要执行任何操作。OTOH,当需要处理时,很可能是瓶颈(尽管更常见的是磁盘是瓶颈)。
PauliL 2010年

4
您需要记住,Web应用程序只是处理用户请求的“服务器堆栈”的一小部分,而不是对性能至关重要的部分。还有其他部分-OS内核(通常用C编写),文件系统(C),Web服务器(通常是C),语言解释器(C),数据库(通常是C或C ++)。Web应用程序通常只将数据从一个部分传递到另一部分,对其进行一些基本操作,而它的性能根本不是至关重要的。
el.pescado

15

C不是操纵字符串的便捷语言。

比较C#:

string foo = "foo";
string bar = "bar";
string foobar = foo + bar;

对应的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

4
PHP也不能正确处理Unicode,但是它是非常流行的面向Web的语言。
el.pescado

12
因此,我们应该使用C ++,因为它的性能与C差不多,但是像魅力一样编译您的C#示例?
tstenner 2010年

2
从字符串操作开始-Web批处理通常仅输出字符串,因此C printf可以完成此工作。
el.pescado

5
C通过运行时库函数可以很好地处理多字节和unicode。使用诸如strncpy之类的安全功能也使其非常安全。
justinhj 2010年

2
或者,您可以使用asprintf(&foobar,“%s%s”,foo,bar);
帕特里克·洛里奥2014年

11

如果难度和复杂性根本不是问题(哈!),那么我不会停在C上。我会编写x86汇编。自从我使用任何非x86的Web服务器已经有好几年了,而且每天看起来越来越少。

使用C(而不是汇编语言或更高级别的语言)表明C是程序员效率和计算机效率的最佳结合点。

对于我编写的程序而言,情况并非如此:C与我要编写的程序的匹配度很差,而且相对于像样的宏汇编器,它的优势并不那么重要。我现在正在选择的HLL并不难,但是无论是汇编语言还是C语言,它的复杂性都很高,以至于永远无法完成。我承认有足够时间的足够聪明的程序员可以使其在汇编或C语言中运行得更快,但我不是那个程序员。


7
  • 它的 不安全的
  • 它的 很难读
  • 很难维护,开发时间要慢一个数量级
  • 您的大多数Web内容可能都受I / O限制,因此加速甚至没有关系,尤其是当您使用Java或C#这样的快速语言时

2
“像Java或C#这样的快速语言”是什么意思?
RobS 2010年

3
@Kinopiko:动态语言有哪些弱点?当一个菜鸟程序员明确地说他想通过eval和PHP 执行任意代码include?请注意,在C / C ++中,您没有声明要执行任意代码,只是声明了。eval不是错误,而是程序员的意图。在C / C ++中,任何错误都可能导致以动态语言执行远程代码,除非某些傻瓜弄糟了,否则情况并非如此eval
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳ 2010年

1
也许“取决于您在做什么,并且比C / C ++快或快”,但是您仍在使用Java和C#来管理托管内存环境,这在高流量情况下可能会成为一个缺点。
RobS 2010年

5
“而且C肯定没有任何动态语言那么多的安全弱点” ,我的朋友,完全是胡说八道。为什么该评论有3个投票?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳ 2010年

2
@Kinopiko:实际上,您无法在任何地方解释它。没有解释。C具有很多比任何动态语言更大的问题。在动态语言中可能发生的最糟糕的事情是“找不到属性,糟糕”。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

7

我知道这个问题已经死了,但是到目前为止,在任何编程范例中,尤其是在Web开发中,有很多未必是程序员的人,到现在为止还没有提到的两件事对于成功至关重要。使用代码。

  1. 涉及到的,有用的社区,也就是已经解决了我的问题的人们。对于Google来说,即使最菜鸟也很容易理解为什么他们在PHP中收到“标头已发送”错误,而该信息可能不适用于场景中新出现的框架或语言,或者没有临界质量。
  2. 框架,以便大多数程序员可以解决业务问题,而不是一起修改代码。

如果我有一个需要极端性能的关键应用程序,那么我会使用C,但是编写它会花费更长的时间,所以我永远也不会进入市场。在出现#1或#2之前,我无法使用它。


6

C是用于许多用途的相当低级的语言:无OOP,很多手动资源管理。

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

但是,有C ++ Web框架,例如CppCMS用于高性能Web应用程序开发。

C ++使您可以享受对您正在做的事情的高度抽象和精细访问,从而为部署和开发大型应用程序提供了更好的选择。

但是,在性能和资源使用比上市时间和开发成本更为重要的情况下,您可以使用它们,因为通常情况下,使用适用于Java,Python或PHP的良好Web框架进行Web开发会更快。通常,同样的薪水,对于C ++的程序员比对Java / P *语言的程序员要少。

因此,这是优先级的问题,用于C ++ Web开发的工具要比用于PHP / Python / Perl或Java的工具少。


2
有趣的是,我不知道CppCMS是一个用C ++编写的低级Web框架。坐在C语言和Web语言之间,可能两全其美。
Abs

现在是低级框架,非常快速的是MVC Web框架。
Artyom

抱歉,我只将不是网络语言的内容称为低级。我了解虽然它是一个MVC Web框架。
Abs

没有“ Web语言”之类的东西,可能只有PHP可以称为Web语言。所有其他语言,包括Java,Python,Perl,Ruby和C#,都是用于Web的通用语言。
Artyom

1
好吧,如果我们想像这样具体一点,那就没有通用编程语言了。只有过程式的,结构化的,面向对象的,功能性的...等等
Abs

5

@乔里·塞布雷希茨

FUD的作用:

通过将硬件投入该问题,PHP,Python等易于扩展。

好吧,实际上没有。它们根本不垂直缩放,而水平缩放非常差。请参阅:http : //gwan.ch/en_scalability.html,其中说明了性能不佳的人要面对多少麻烦。

假设用PHP开发一个应用程序需要花费1人1年的精力,而用C进行开发则要花3年的时间(因为C要做相同的事情需要更多的精力)。

又错了。如果PHP库是用C编写的,那么它们可以直接从C使用-立即提供您声称PHP具有的“独特生产力”。

这意味着减少的C代码硬件需求必须代表2年的工资,才能使C变得有吸引力。在实践中(几乎)永远不会发生。

纯FUD(请参阅上面的答案)。

Facebook的规模是如此之大,以至于硬件成本足以应付。这就是为什么他们开发HipHop的原因,该结构将PHP交叉编译为C ++。它带来了两全其美的优势:PHP编程的简单性以及C ++的原始性能。Facebook仍然是用PHP开发的,但是当您使用它时,它都是本机代码。

毫无疑问,HipHop比PHP快得多。但是,如果将HipHop与纯C实现进行比较,则有两层开销:

  • PHP到C ++的接口(使用膨胀的C ++库);
  • C ++膨胀本身(使C ++比普通C慢2-10倍)。

另外,HipHop是以无知的低效率学术模式(与任何现实世界分离)编写的。当然,它可以打动PHP编码人员,但将这些代码显示给嵌入式程序员,他将为Facebook感到遗憾。

“实际上,一种不具备所有功能的语言比具有某种功能的语言更容易编程” –丹尼斯·里奇

与(大多数)编程语言END-USERS不同,丹尼斯似乎对此事有两点了解。


3
(1)不要那么个人化,因为我什至不知道您的产品,所以我也不愿意浪费您的产品。(2)您使用G-wan进行了有趣的概念证明,但是如果我不等待观察方法,直到我看到实际的Web应用程序正在使用它,希望您能对不起我,而不仅仅是几个综合基准。(3)您错误地描述了Facebook关于水平扩展的抱怨,因为它们的问题在于内存缓存和数据库多核性能,这是现实世界Web应用程序的瓶颈,这是G-wan无法解决的问题。(4)我确信HipHop欢迎您的代码贡献。
Joeri Sebrechts

1
谈到生产力问题。之前,很多月以前,我已经用C编写了Web应用程序,当时,它需要比PHP编写更多行代码来完成相同的工作,而崩溃或泄漏各种bug的风险却更大。(我只是对这些错误的“平均”水平,也就是说,我不时地编写这些错误。)我的判断基于这种经验,直到我看到真正的应用程序演示了不同的情况(例如,将C的wordpress端口不需要更多的代码行)。
Joeri Sebrechts 2010年

某些东西如何“不垂直扩展”?您是说它没有从更快的单核性能和更快的内存性能中受益吗?
rakslice 2015年

5

除了使用这些语言轻松开发之外,我们还有其他原因都需要使用PHP,Python,Ruby等

这是全部原因,也是唯一需要的原因。它有很多好处,其中最主要的是上市时间。如果您可以使用PHP在一个月内使Web应用程序联机,而不是使用C来运行两个月,那么您可能会成功。如果您可以在一周内使用Ruby on Rails添加新功能,而不是在两周内使用C添加新功能,那么您将再次获得成功。如果您可以在一天内使用Python修复错误,而不是使用C来修复错误,那么您将再次赢得胜利。如果您可以因为使用X语言而添加功能,而竞争对手却因为使用Y语言而根本无法添加功能,并且鉴于他们的资源限制,使用该语言太难了,那么您肯定会赢。

通过“赢”,我真的意味着你不会输。您的竞争对手正在使用高级语言和框架来开发其站点,因此,如果您使用C,则不会与其他使用C的人竞争,那么您就会与不使用C的其他人竞争。使用具有相似抽象级别的工具。

如果性能成为问题,则可以用性能更好的语言重写网站的慢速部分。或者,您也可以添加更多硬件。实际上,性能问题就是我们所说的“要解决的问题”,这意味着您已经成功了。但是,花费更多的时间来开发网站的基本功能几乎是一种选择。用C编写它以便更快地运行是过早的优化,正如Knuth告诉我们的那样,这是万恶之源。

所有这些都暗示着,如果您可以使用比Python或Ruby具有更高抽象水平的语言,那么您可能会与使用Python或Ruby的人抗衡。保罗·格雷厄姆(Paul Graham)关于他和他的团队如何将LISP用作开发网站的“秘密武器”的故事可能具有启发性。http://www.paulgraham.com/avg.html

当然,如果您出于娱乐目的而开发网站,则可以使用任意语言进行操作。而且,如果您的站点受CPU限制(几乎不受限制;它们通常受I / O限制),则请使用性能最快的语言。但是,如果您要进行创新,请使用具有最佳抽象的高级语言。


您忘记了via Web的大量订单处理位是用C编写的。请参阅paulgraham.com/avg.html底部的注释
吉尔斯·罗伯茨

4

您认为轻松并不是一个好理由。我认为这是一个很好的理由。如果您需要最终的性能,那么C语言就可以了,但是其他语言可以抽象出一些硬东西,以提高生产率,可维护性并减少缺陷。


6
为了获得最终的性能,您不仅需要C,还需要最终的C程序员。那些人通常想要比Java / P *程序员更多的钱。
el.pescado

4

考虑我不是网络开发人员,但无论如何都会提出这些问题,并提出一两个观点。

哪个网站只用一种语言编写?认真地说,这条线似乎假定一把锤子适合所有钉子。

上一次有人什么时候认真地说C很复杂?我的意思是,真的,您无法获得更多低水平的东西。我在这里不是在说C ++,因为这两个常常被共同引用。

C存在安全隐患,这是无法否认的,但是与所谓的PHP&Perl相比,安全隐患还少吗?无论哪种情况,安全的网站都是程序员的职责。

无论如何,要发表评论。使用任何给定语言的难度在很大程度上取决于手头的问题,尤其是C ++可以导致经验丰富的人快速解决问题。

Web服务器的工业用途,即嵌入式服务器/站点根本没有普通Web服务器可能具有的语言选择。因此,您最终会使用C的变体或可能使用诸如BASIC之类的东西。您的目标是提供设备所需的功能,而不用担心语言。在主流Web服务器上,大多数情况下,使用高级语言即可实现此目的。远离繁琐的工作,您的编程自由便出了门。

如果没有合适的库,在大多数情况下,用C语言进行基础的Web项目将是愚蠢的。这里缺乏良好的标准化库是一个很大的负面影响。


3

这里是一些用C编写的与Web相关的代码,在为Web构建自己的C库时值得一看:

  • cgic:用于CGI编程的ANSI C库
  • cgit:git存储库的Web前端
  • wbox:HTTP测试工具
  • wget html-parse.c
  • 卷曲cookie.c
  • Discount,David Parsons对John Gruber的Markdown文本的C实现为html语言
  • 原型线程(特别是对于嵌入式系统),http://www.sics.se/~adam/software.html
  • protothread,LarryRuane的Google代码项目
  • uriparser sourceforge项目
  • http-parser,Ryan Dahl在github上为c提供的http请求/响应解析器
  • Nginx的
  • ...

2

好吧,考虑到Web开发是拥有有用的库(PHP使用的库)的事实,那么我看不到C会没有用。

毕竟,过程逻辑是相同的:无论是C,PHP,.Net还是Perl,都执行while,for,if else等等。

C循环或测试并不难编写,因为它是用C编写的。

大多数PHP库都是用C语言编写的,因此缺少Web的C语言库参数看起来没有那么令人信服。

我的猜测是,Java(SUN)和.Net(MICROSOFT)的发起人没有将C宣传为Web编程语言,因为它们拥有自己的专有(已获得专利的)知识产权资产以推动采用。

作为免费的(未专利的)标准,C不会对开发人员提供任何“锁定”控制……因此,也许在学校和大学中进行游说以确保纳税人的钱将资助采用以私人利益为后盾的劣等技术。

如果C对于IBM和MICROSOFT足够好(它们没有在PHP或.Net中开发产品),但对最终用户来说还不够好,那么最终用户可能会想知道为什么要邀请他们采用这种双重标准。


1
嗯,Microsoft.com和sharepoint都在ASP.NET中。Visual Studio 2010的大部分内容都位于.NET(WPF)中。该声明显然是错误的。使用符合您的设计要求的最高级语言。对于Web而言,这意味着C#/ Python / etc,以及C / C ++ / etc中的性能成为问题的组件-尽管这种情况几乎从未发生过。
3Dave 2010年

2

在以下情况下,我将C用于Web应用程序:

  1. 我对托管服务器(小型VPS)有少量预算,而且我的时间并不昂贵。
  2. 我在Facebook,Twitter或需要减少服务器数量(有成千上万的用户)的人中工作。
  3. 我想学习C,需要找到一个可以使用它的真实应用程序。
  4. 我知道C比其他脚本语言好得多。
  5. 我是一个环保人士,我想减少应用程序的碳足迹。

G-WAN将代码作为脚本运行,是的,像Play一样的C脚本!框架适用于Java。G-WAN速度非常快,并且具有简单的API。当其他服务器无法执行此操作时,G-WAN可以将C / C ++用于Web应用程序。

一件事很清楚:您需要一个优秀的程序员才能用C编写网站,任何笨拙的开发人员都可以使用意大利面条PHP创建网站:-)有用于C的泄漏检测器,甚至是垃圾收集器。


2

您提到的所有语言实际上都是用C / ++编写的。唯一的区别是从C创建的高级类和库构成了现在这些其他解释器语言。这也是为什么它们被称为脚本语言的原因。

可以把它想象成烤蛋糕(PHP / JS):

  • 2个鸡蛋,1个杯子牛奶,2条黄油,4个杯子面粉,1个杯子糖,小苏打

但是想象一下,必须使这些东西组成所有要素。(C / ++)

  • 17 mg碳酸氢钠,15 tbs蛋白质,12 tbs卵黄膜,氨基酸,硫,...中子粒子

C是许多现代语言的基础。它是强大的语言,几乎是最强大的语言。您可以做到这一点,只需要投资构建这些其他语言已经完成的所有代码即可。就像从元素周期表中制作蛋糕一样。

学习它,您可以使它无所不能!


1

使用以下命令可以简化C中的字符串处理:

数据类型(libslack的一部分)

Libslack提供了一个称为List的通用可增长指针数组数据类型,一个称为Map的通用可增长哈希表数据类型以及一个带有函数堆的体面的String数据类型(许多从Perl中提炼出来)。也有带有可选的“可增长”自由列表的抽象单链和双链列表数据类型。

要么:

托管字符串库(用于C)

http://www.cert.org/secure-coding/managedstring.html


1

“ domachine”写道:

平台依赖性:C需要编译为本机代码。此代码并非在所有平台上都可以运行。解释器语言(如PHP)在存在解释器的任何地方运行。当然可以解决此问题,但是您会看到在这种特殊情况下使用PHP开发的优势。

您是否想过便携式 PHP解释器使用哪种语言编写?

在ANSI C中。

因此,在再次放弃ANSI C的可移植性之前,请问自己,您最喜欢的编程语言是用哪种语言编写的……(提示:几乎所有语言都是用C / C ++编写的)。

我必须使用的所有平台上均提供ANSI C编译器-PHP及其庞大的运行时并非如此。

关于可移植性的论点就这么多了。


2
好吧,PHP不是我最喜欢的语言。我还没有用PHP编写任何代码。我是C和C ++程序员。我从来没有忽视过C的可移植性!我唯一提到的是将PHP脚本轻松应用于现有WebSpace的便利性。向我展示一种情况,您可以在其中拥有编译器的情况下获得低预算的WebSpace。也许我错了,但我认为您是这些狂热的程序员中的一种,他们喜欢一种语言,却看不到其他(也许更合适)语言的优势。我喜欢C和C ++,但是我可以跳出思路。
domachine

0

与G-WAN相似,但对于Cocoa / Objective-C,Bombax是一个Web应用程序框架。

http://www.bombaxtic.com

说到Objective-C,我不禁指出MacRuby,它有可能改变我们一天内制作Web应用程序的方式。


好吧,MacRuby现在已经死了。
Banjocat

0

另一点可能是平台依赖性。C需要编译为本地代码。此代码并非在所有平台上都可以运行。

解释语言在存在解释器的任何地方运行。例如,许多提供程序都在其服务器上安装了Windows操作系统的PHP解释器。如果您现在正在Linux机器上进行开发。你有问题

当然可以解决此问题,但是您会看到在这种特殊情况下使用PHP开发的优势。

希望这对您有所帮助


0

通过将硬件投入该问题,PHP,Python等易于扩展。

假设用PHP开发一个应用程序需要花费1人1年的精力,而用C进行开发则要花3年的时间(因为C要做相同的事情需要更多的精力)。这意味着减少的C代码硬件需求必须代表2年的工资,才能使C变得有吸引力。在实践中(几乎)永远不会发生。

像每条规则一样,也有例外。Facebook的规模是如此之大,以至于硬件成本足以应付。这就是为什么他们开发了HipHop,它将PHP交叉编译为C ++。它带来了两全其美的优点:PHP编程的简单性以及C ++的原始性能。Facebook仍然是用PHP开发的,但是当您使用它时,它都是本机代码。


0

最后,您可以使用任何语言来开发站点,包括汇编程序(通过CGI等)。如果您是说我们为什么不使用编译语言,那么,我们已经有了.NET,Java和其他语言。


0

您必须爱您正在做的事才能获得结果。诸如Java和php之类的语言是经过大量努力而创建的,以使人们的生活更轻松。如今,Php特别使许多自学成才的Web程序员受益。您可以看到它在Web开发领域所提供的支持。

我确信Java的编写旨在为您提供当今世界上一切可能的帮助。这本庞大的书清楚地表明了这一点,并且如果您也迫切希望进行Web开发,那将是一头野兽。Python也是如此。这些都是很棒的语言和平台。难怪它们非常受欢迎。

我是C语言的奉献者,部分是由于某些限制,使我无法查看php等其他语言。我每天都用C写作,每天我为e感到自豪,并且还学习新东西。这使我感觉非常好,并且我还开始学习在通过Cgi为网站编写应用程序时C是如何作为默认选择的。这在其他平台中是抽象的,当您开发与数据库和Web服务有关的网站时,您需要了解幕后发生的事情。

但是,如果您了解所有这些并且仍然想使用脚本语言,则必须有一个正当的理由,我们不需要任何人对此提出建议。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.