为什么不使用C作为您的网络应用程序?

时间:2010-06-20 12:07:04

标签: php c web-applications

今天早上遇到G-WAN时,我正在看几个不同的网络服务器。据我所知,它是一个用C编写的Web服务器,您必须通过在C中编写您的网站/ Web应用程序来利用它。一个明显的好处是G-WAN网站建议的速度。

但是,在论坛上,G-WAN的创建者问为什么不将C用于基于网络的应用程序,除了难以理解之外我无法想到一个单一的原因(对我来说,无论如何,我是新手,当涉及到C)。除了很容易用这些语言开发之外,我们都必须有更多的理由来使用PHP,Python,Ruby等。我不认为这是一个很好的理由。

所以我把它告诉你:你为什么不在你的网络应用程序中使用C?

25 个答案:

答案 0 :(得分:76)

要使C程序正确且安全,需要非常谨慎。这种关心意味着你需要有非常优秀的人来编写你的程序。这意味着你付出更多。

此外,C不具备从.NET(以及其他主要的以Web为中心的平台)所具有的巨大单一标准功能库中获取的优势。因此,你可能不得不购买组件,或执行互操作,或推出自己的功能,“免费”使用更多,我们会说“以网络为中心”的语言,如PHP或C#或Ruby或其他。这意味着你需要付出更多。

将所有这些添加到单线程计算速度在Web上并不重要的事实上。如果您需要更高的可扩展性,大多数组织可以经济地在问题上投入更多内核并且没问题。当然,这对每个人都不是这样。我认为Google引擎的核心是用C语言或类似语言编写的,不仅仅是为了提高速度,还为了节省电力成本。

答案 1 :(得分:46)

...坎

我在讨论中似乎有点迟了 - 但我现在才发现它。我非常感谢你们所有人的投入。

我是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现在没有这个完全愚蠢(过时)的要求。

那么,现代语言声称的明显的进展是什么?我还在寻找它。

此致

皮尔。

答案 2 :(得分:45)

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

答案 3 :(得分:27)

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

答案 4 :(得分: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

答案 5 :(得分:10)

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

使用C(而不是汇编或更高级别的东西)是建议C是程序员效率和计算机效率的最佳点。

对于我编写的程序,情况并非如此:C与我想编写的程序类型不匹配,并且它优于宏观汇编程序的优点并不那么重要。我现在正在编写的程序在我选择的HLL中并不难,但是它在程序集或C中的复杂性都会很高,以至于它永远不会完成。我承认,一个足够聪明的程序员有足够的时间可以使它在汇编或C中运行得更快,但我不是那个程序员。

答案 6 :(得分:7)

  • 它是insecure
  • 它是hard to read
  • 很难维护,开发时间在数量级上慢了
  • 你的大部分网页内容都可能是I / O绑定的,所以加速甚至不重要,特别是当你使用像Java或C#这样的快速语言时

答案 7 :(得分:6)

C是用于许多目的的非常低级别的语言:no-OOP,大量的手动资源管理。

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

然而,有像<{3}}这样的 C ++ Web框架,用于高性能Web应用程序开发。

C ++允许您享受高度抽象和细粒度的访问权限,从而为部署和开发大型应用程序提供更好的选择。

但是,如果性能和资源使用更为关键,则使用它们 然后是上市时间和开发成本,因为通常的Web开发速度更快 为Java,Python或PHP等语言使用良好的Web框架。一般而言 对于C ++而言,那些不太称职的程序员,以及相同薪水的Java / P *语言。

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

答案 8 :(得分:6)

我知道这个问题已经被解决了,但到目前为止还没有提到的两件事对于任何编程范例的成功都非常重要,特别是在网络开发中你会得到很多不是必须是程序员,使用代码。

  1. 参与,有用的社区,又名已经解决了我的问题的人。对于谷歌来说,即使是最愚蠢的新手也很容易为什么他们在PHP中获得“已经发送的标题”错误,而这些信息可能不适用于场景新的框架或语言,或者没有临界质量。
  2. 框架,以便大多数程序员可以解决业务问题,而不是一起黑客代码。
  3. 如果我有一个需要极端性能的关键应用程序,我会使用C,但写入需要更长的时间,我永远不会进入市场。在有#1或#2之前,我不可能使用它。

答案 9 :(得分:5)

  

除了易于使用这些语言开发之外,我们都必须有更多理由使用PHP,Python,Ruby等

这是完整的原因,也是唯一需要的原因。它有许多好处,其主要部分是上市时间。如果你可以使用PHP在一个月内使用PHP而不是两个月使用C在线获取Web应用程序,那么你可能会获胜。如果你可以使用Ruby on Rails在一周内添加新功能而不是使用C两周,那么你再次获胜。如果您可以使用Python在一天内修复错误而不是使用C两天,那么您将再次获胜。如果您可以添加一项功能,因为您正在使用语言X,而您的竞争对手根本无法添加,因为他们使用的是语言Y,并且鉴于资源限制,该语言太难了,那么您肯定会获胜。< / p>

通过“赢”我的意思是你不输。你的竞争对手正在使用更高级别的语言和框架来开发他们的网站,所以如果你使用C,你就不会与之竞争其他使用C的人,你正在与其他不使用C的人相比。只是为了竞争,你必须使用具有相似抽象级别的工具。

如果性能成为问题,您可以使用效果更好的语言重写网站的慢速部分。或者你可以扔掉更多的硬件。实际上,性能问题就是我们所说的“很好的问题” - 这意味着你已经成功了。但是花费更多时间来开发网站的基本功能很少是一种选择。在C语言中写它只会这样运​​行得更快就是过早的优化,正如Knuth告诉我们的那样,这是所有邪恶的根源。

所有这些意味着,如果您可以使用比Python或Ruby更高抽象级别的语言,那么您可以赢得使用Python或Ruby的人。 Paul Graham关于他和他的团队如何使用LISP作为开发网站的“秘密武器”的故事可能具有指导意义。 http://www.paulgraham.com/avg.html

当然,如果您正在开发一个自己娱乐的网站,请以您想要的任何语言进行。如果您的站点受CPU限制(几乎没有;它们通常是I / O绑定的),那么请使用性能最快的语言。但是,如果您正在尝试创新,请使用具有最佳抽象功能的高级语言。

答案 10 :(得分:4)

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

哪个网站只用一种语言编写?严重的是,这个线程似乎假设一把锤子适合所有钉子。

最后一次有人严厉地说C很复杂的时候是什么时候?我的意思是真的是你们不能得到更低级别的人。我不是在谈论C ++,因为这两者经常被集体引用。

C存在安全问题,这是不容否认的,但它们是否比在PHP&amp; Perl的?在任何一种情况下,安全的网站都是程序员纪律的功能。

无论如何都要发表评论。使用任何给定语言的难度很大程度上取决于手头的问题C&amp;特别是C ++可以在经验丰富的人手中快速解决问题。

Web服务器的工业用途,即嵌入式服务器/站点,根本没有普通Web服务器可能具有的语言选择。所以你最终会使用C的变体或类似BASIC的变体。您的目标是提供设备所需的功能,而不必担心语言。在主流Web服务器上,大多数情况下使用高级语言的方法是这样做。远离大铁,你的编程自由就会消失。

如果没有合适的图书馆,在大多数情况下用C进行一个完整的网络项目将是愚蠢的。缺乏良好的标准化图书馆在这里是一个很大的负面因素。

答案 11 :(得分:4)

@Joeri Sebrechts

F.U.D。在行动:

  

PHP,Python等很容易通过抛出问题来扩展硬件。

嗯,实际上没有。它们根本不垂直缩放,水平缩放非常差。 请参阅:http://gwan.ch/en_scalability.html,其中解释了前面会有多少麻烦 坏表演。

  

假设用PHP开发应用程序花费1个人1年的时间,并且成本很高   他们用C做3年(因为C需要更多的努力来做同样的事情)。

再次错了。如果PHP库是用C语言编写的,那么它们可以直接使用 从C -instantly提供'独特的生产力',你声称PHP有。

  

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

Pure F.U.D. (见上面的答案)。

  

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

HipHop比PHP快得多,毫无疑问。但如果你比较 使用plain-C实现的HipHop有两层开销:

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

另外,HipHop已经写成了无能为力的低效学术模式 (脱离任何现实世界的现实)。当然,它可以打动PHP编码器 但是这个代码显示给嵌入式程序员,他会为此感到遗憾 主页。

“没有一切的语言实际上更容易编程 比起一些“ - 丹尼斯·里奇”

与(大多数)编程语言END-USERS不同,丹尼斯知道一对 关于此事的事情,似乎。

答案 12 :(得分:4)

你认为这很容易并不是一个好理由。我认为这是一个很好的理由。如果你需要最终的性能,那么C就可以了,但是其他语言抽象了硬件,以提高生产力,可维护性并减少缺陷。

答案 13 :(得分:3)

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

  • cgic:用于CGI编程的ANSI C库
  • cgit:git存储库的Web前端
  • wbox:HTTP测试工具
  • wget html-parse.c
  • curl cookie.c
  • 折扣,David Parsons将John Gruber的Markdown文本实现为html语言
  • Protothreads(尤其适用于嵌入式系统),http://www.sics.se/~adam/software.html
  • protothread,LarryRuane的Google代码项目
  • uriparser sourceforge project
  • http-parser,来自ganub的Ryan Dahl的c请求/响应解析器
  • nginx的
  • ...

答案 14 :(得分:2)

嗯,鉴于Web开发是一个有用的库(PHP使用的那种)的问题,那么我不知道C将如何无用。

毕竟,程序逻辑是相同的:do while,for,if then else,等等,这是C,PHP,.Net还是Perl。

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

大多数PHP库都是用C语言编写的,因此缺少C-libraries-for-the-Web参数看起来并不那么令人信服。

我的猜测是,Java(SUN)和.Net(MICROSOFT)的推广者并没有将C宣传为Web编程语言,因为他们拥有自己的专有(获得专利的专利)知识资产。推动收养。

作为一个免费(非专利)标准,C不会对开发人员提供任何“锁定”控制权......因此,可能是学校和大学游说的重手,以确保纳税人资金将资助采用以私人利益为后盾的劣质技术。

如果C对IBM和MICROSOFT(他们不用PHP或.Net开发他们的产品)足够好但对最终用户不够好,那么最终用户可能想知道为什么他们被邀请遭受这种双重标准。

答案 15 :(得分:2)

如果符合以下条件,我会将C用于网络应用:

  1. 我对托管服务器(小VPS)有一点预算,而且时间也不贵。
  2. 我在Facebook,Twitter或有需要的人工作,以减少使用的服务器数量(有数千到数百万用户)。
  3. 我想学习C,我需要找到一个可以使用它的真实世界应用程序。
  4. 我比其他脚本语言更了解C语言。
  5. 我是一个生态家伙,我想减少我的应用程序的碳足迹。
  6. G-WAN将代码作为脚本运行,是的,像Play这样的C脚本!框架适用于Java。 G-WAN非常快,并且具有简单的API。当其他服务器未能做到这一点时,G-WAN可以将C / C ++用于Web应用程序。

    有一件事是清楚的:你需要一个优秀的程序员用C编写一个网站,任何蹩脚的开发人员都可以创建一个带有意大利面条PHP的网站:-)还有泄漏探测器,甚至是C的垃圾收集器。

答案 16 :(得分:1)

使用以下命令可以更轻松地处理C中的字符串处理:

  

数据类型(libslack的一部分)

     

Libslack提供了一个名为List的通用可扩展指针数组数据类型,一种名为Map的通用可扩展哈希表数据类型,以及一系列功能很强大的字符串数据类型(很多都是从Perl中提取的)。还有抽象的单链接和双链接列表数据类型,以及可选的“可扩展”自由列表。

或:

托管字符串库(适用于C)

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

答案 17 :(得分:1)

“domachine”写道:

  

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

你有没有想过用 portable PHP解释器编写哪种语言?

在ANSI C中。

所以,在你再次忽略ANSI C的可移植性之前,请问 自己用哪种语言编写自己喜欢的编程语言 已写完......(提示:几乎所有都是用C / C ++编写的)。

我可以在所有平台上使用ANSI C编译器 工作 - 对于PHP及其巨大而言,情况并非如此 运行时。

portability 参数。

答案 18 :(得分:1)

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

想起来就像烤蛋糕(PHP / JS):

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

但是想象一下,必须将这些东西组成的所有元素都做成。 (C / ++)

  • 碳酸氢钠17毫克,蛋白质15汤匙,卵黄质膜,氨基酸,硫,中子粒子12汤匙

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

了解它,您可以使它无所不能!

答案 19 :(得分:0)

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

http://www.bombaxtic.com

说到Objective-C我无法抗拒地指出MacRuby,它有可能彻底改变我们有朝一日制作网络应用的方式。

答案 20 :(得分:0)

另一点可能是平台依赖。 C需要编译为本机代码。此代码不能在所有平台上运行。

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

当然这个问题可以解决,但你会发现在这种特殊情况下用PHP开发的优势。

希望这有帮助, 关于domachine

答案 21 :(得分:0)

PHP,Python等很容易通过抛出问题来扩展硬件。

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

与所有规则一样,有一个例外。 Facebook的规模如此之大,以至于硬件成本足够大。这就是他们开发HipHop的原因,它将PHP交叉编译为C ++。它带来了两全其美:PHP编程的简单性和C ++的原始性能。 Facebook仍然是用PHP开发的,但是当你使用它时,它都是本机代码。

答案 22 :(得分:0)

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

答案 23 :(得分:0)

你必须喜欢你正在做的事情才能取得成果。像java和php这样的语言是通过大量努力创建的,以使人们的生活更轻松。 Php特别受益于许多自学的网络程序员。您可以看到它在Web开发领域的支持。

Java iam肯定是为了帮助你在今天的世界中提供任何可能的帮助。这本巨大的书是一个明确的指示,如果你正在迫近网络开发,它就是一头野兽。 Python也是如此。这些是非常棒的语言和平台。难怪他们非常受欢迎。

我是C奉献者,部分是由于某些限制导致我无法查看其他语言,如php。我每天都在写C,每天我都很自豪地学习新东西。这让我感觉很好,我也开始学习在通过Cgi编写网站应用程序时C是如何默认选择。这是在其他平台上抽象的,当您开发与数据库和Web服务有关的网站时,您需要知道幕后发生的事情。

但是,如果你知道所有这些并且仍然想使用脚本语言,那么必须有一个正当的理由,我们不需要任何人提出反对意见。

答案 24 :(得分:0)

自从 OP 提出这个问题以来已经过去了 10 多年,Google 搜索趋势(在网络编程类型内)仍然表明这是一场积极的辩论。我想在 2021 年回答这个问题,因为我从 1979 年开始从事专业编程,并且详尽地使用了上述每种语言,我觉得很有资格回答。

  • 使用 C 语言的互联网设备比任何其他语言都多。它们本身通常不是面向公众的设备(Cisco、F5 网络等——它们的核心都是用 C 编译的)。但这些是具有目的功能的嵌入式平台,需要几乎类似于 RTOS 的稳定性。 C 将继续成为这里的主导语言 - 它太老了,不稳定性问题不是一个因素。

  • Big Tech 一直使用 C 语言;您不会在他们的堆栈中找到执行日志刷新或备份的 cron 作业,这些作业是用 bash 或 PHP 编写的;如果它很复杂,很可能是一个 gcc 链接的二进制文件在做繁重的工作。没有什么比 C 更可靠了,因为它一直存在并且我们没有在 gcc 中发现新的错误。

  • 1990 年代的科技公司确实构建了我们今天使用的技术的核心,而 C 的使用[根本] 并不性感。许多应用程序是使用 Java Servlet 和小程序开发的,这很快有助于 MVC 模型它是跨平台的。后者非常很重要——我会解释的。

  • 微软并没有完全接受 C 或 C++。与 Borland 相比,他们的 Visual C 是一个糟糕的 IDE。但是,Visual Basic 对他们来说很受欢迎,这就是 VB 成为 ASP 经典的原因——许多网站今天仍在使用它。它是 IIS 官方支持的第一种语言(VB 或 Basic)。经典 ASP 被认为是一种不再受 MSFT 支持的旧语言,但它的使用在希望使用 Windows NT(或服务器)进行开发的早期 Web 应用程序中很普遍。比尔盖茨真的写了当时最好的 Basic 解释器,Basic 的简单性允许非常快速的学习周期成为一名开发人员。然而,Borland 的 IDE 非常棒,但公司却破产了(连同 Novell 和其他 90 年代的伟人)。

  • 在 1990 年代,头脑正常的人还没有为 Linux 开发 Web 应用程序,真的......其他 Unix 衍生产品,是的 - 但它们的商业版本。许多人完全部署了完全不同的操作系统(想想这里的 AIX 或 DEC VMS)。 “免费”和“伟大的软件”这两个词通常不是白话的一部分。成为事实上的原始网站管理员的 IT 经理不希望他们的薪水依赖免费的东西 (Linux),因为部分发行版是分散的(可能不包括 RedHat 或 Mandrake 的)。

  • IT 经理不是程序员 - 因此脚本语言在 Web 开发中变得越来越流行。完全用 bash 编写的网站并非闻所未闻。

  • Java(基于 C)可能成为 Web 未来最流行的概念,部分原因是 Sun 拥有出色的硬件并且以其 Solaris 操作系统而闻名。大多数对 Web 感兴趣的 C 程序员转向了 Java,Java 非常相似,并提供并发性(C 不是被设计为并发语言)以及大多数稳定的垃圾收集和内存清理技术。

  • VB 转移到 MS,并为 IIS 寻找一种编译语言,将其转移到现在的 .NET 框架,它只是 VB 或 C# 包裹在复杂性中。但是 IIS 的弱点被 Windows NT/2000 部署的绝对数量克服了。

  • 泡沫破灭,Oracle 的 Java、Solaris 和 DBs 不是 IT 经理的最爱(尽管它是高管的最爱,因为 Oracle 的销售团队是一流的)。一方面,甲骨文的产品非常昂贵,而且他们没有(现在仍然没有)被称为尖端技术公司。技术上的。

  • 在 Y2K 之后,Linux out 部署了几乎所有网络上的内容,因为这些发行版开始真正进入商业级别。开源的整个想法正在奏效。 Windows 一再遭受病毒问题的困扰,而 Apple 则被视为已死的实体而被注销。随着 CFO 收紧预算,商业平台越来越受到抨击。

  • Linux 从一开始就使用传统的 PHP 解释器,并且该语言从那里得到了真正的发展。大多数部署 Apache 的人都会使用这种语言,因为它很稳定。同样,在这一点上,我们仍有 IT 经理负责这些工作。

  • 2000 年代中期,当营销职能部门开始接管各自公司的网络业务时,需求迅速发生了变化。营销人员喜欢测试(想想多变量 A/B 活动),因此脚本语言确实开始成为实现快速更改的最佳方式,无需对 HTML 进行硬编码即可将更改推送到网络。

  • 我们忘记了,ECMAScript (Javascript) 真的起飞了,Flash 开始消亡,所以当越来越快的浏览器能够利用 UI 时,如何控制 DOM 的整个想法就出现了。

  • 在所有现代语言中,框架通常确实负责推动新语言的成功。当移动设备出现时,Bootstrap 很快被吸收,并且与传统 PHP 应用程序的集成比与硬编码的 C 应用程序相比更容易。我们开始看到大部分脚本取代编译语言成为首选,尽管 .NET 在某些事情上占有一席之地,尽管在过去 2-3 年中这种情况有所减少。

最终,C 仍然是互联网“背后”使用最广泛的语言。路由器、负载平衡器、入侵检测系统……都将使用 C(或 C++,但更有可能是 C)。这些设备现在正在转向软件部署,但大型数据中心仍在使用硬件设备。例如,AWS 在一组 Cisco 交换机周围有一个包装器,可以根据 ToD(一天中的时间)预测更改路由。亚马逊、谷歌、Facebook 都意识到负载平衡的“follow the sun”模型是一个很好的起点,并且真的只能相信低级硬件设备能够正确地做到这一点。脚本语言,甚至编译语言都在浮出水面——出于所有预期目的——无论如何都确实基于 C。但是随着 k8s 和 Docker 的出现,更有意义的是放弃 node.js 框架并开始处理一个可以独立推送其他代码片段的小代码单元。外包在早期被大量使用,这是在更大的开发环境中对系统进行编程而不会发生冲突的唯一可靠方法。

我们仍处于互联网的开端.. 换句话说,再过 10 年将会有另一个周期,而且很可能会远离打字。拖放 DAG 节点将用于创建 Web 应用程序,其方式与 VFX 艺术家使用 Nuke 或 Maya 构建运动图形剪辑的方式类似。 Twilio 做到了这一点,甚至已经使用 Peltarion 以这种方式训练了 ML 模型。

我们还没有达到可能的最高级别语言,因为我们在 Ruby 或 PHP 中的抽象仍然类似于 C,并且在 STEM 教育上投入大量资金不会吸引大量孩子学习计算机科学。然而,进入门槛将不断降低,但复杂应用程序或需要“某些东西”(例如直接寻址 CUDA 核心)的特定应用程序仍然需要对语言的多样化理解(例如)。

正如里奇本人所预测的那样,我们只是看到了语言的多样性。框架已经成熟,因此在启动 Angular 脚手架需要 5 分钟的时间时,让新开发人员参与 C+CGI 项目是没有意义的。

事实上,这是 1980 年代我们大多数人都预料到的。随着程序员变得多样化,解决他们面前问题的方法也变得多样化。随着开源变得越来越可能(而且令人难以置信!),从头开始根本没有经济优势。无头 CMS 系统实际上已经被部署,因此 CMS 的后端不需要开发团队编写一行代码——他们只担心用户体验……即便如此,工具也越来越成熟.

我的观点是:C 肯定在网络上使用,而嵌入式系统一直在使用它。 MVC 应用程序已经发展到一个框架可以在一个小时内为您构建一个简单的应用程序,而无需编译,而且这些框架在较新的语言上更具可扩展性。对我来说,这是一个苹果与橙子的比较——我仍然使用 C 来做数据规范化(例如),但如果我得到报酬来编写一个网络应用程序,我可以一边喝啤酒一边开始一个 Vue.js 应用程序,那为什么更努力?