WebアプリにCを使用しないのはなぜですか?


101

今朝、G-WANに遭遇したとき、いくつかの異なるWebサーバーを調べていました。私が理解しているように、Cで記述されたWebサーバーであり、CでWebサイト/ Webアプリケーションを作成することによってそれを利用する必要があります。G-WANサイトが示唆するように、明確な利点の1つは速度です。

ただし、フォーラムでは、G-WANの作成者がWebベースのアプリにCを使用しないのはなぜかと質問しましたが、難しいこと以外は1つの理由を考えることができません(とにかく、私はCの初心者です)。これらの言語で開発するのが簡単であること以外に、PHP、Python、Rubyなどを使用する理由は他にもあります。それを正当な理由とは思いません。

だから私はそれをあなたに言います:なぜあなたはあなたのウェブアプリにCを使わないのですか?


34
なぜストーブを使用し、直接火で調理しないのですか?ウォーキングや自転車の方がはるかに健康的ですが、なぜ車を使うのですか?なぜ...私は
続ける

16
@Felix-言ったように、難しいこと以外の理由を挙げてください。これは、困難を抽象化するために他の言語が存在することを私が知っていることを意味します。
Abs

15
本当にC難しいとは思わなかった。
3Dave

10
@David Lively 'c'をわざと難しくするのに失敗した場合、それは本当に面白いです。よくできました:)
punkrockbuddyholly 2010年

11
@MrMisterManは、誰かを見つけるのに4か月しかかかりませんでした。=)
3Dave

回答:


79

Cプログラムを正しく安全にするには、細心の注意が必要です。つまり、プログラムを書くのに本当に優れた人が必要になるということです。それはあなたがもっと支払うことを意味します。

また、Cには、.NET(および他の主要なWeb中心のプラットフォーム)が持っているような機能の膨大な単一の標準ライブラリから描画する利点がありません。したがって、コンポーネントを購入するか、相互運用を実行するか、「無料」で追加される独自の機能をロールバックする必要があるかもしれません。PHPやC#、Rubyなどの「ウェブ中心の」言語と言います。それはあなたがもっと支払うことを意味します。

シングルスレッドの計算速度はWebではそれほど重要ではないという事実に、これらすべてを加えてください。より多くのスケーラビリティが必要な場合、ほとんどの組織は経済的に問題により多くのコアを投入するだけで問題ありません。もちろん、これはすべての人に当てはまるわけではありません。Googleのエンジンのコアは、速度だけでなく、電力コストの実質的なお金を節約するためにCまたは同様の言語で記述されていると思います。


48
うわー、ライブラリのためにCに対する.NETの議論は?確かに、stdlibの方が小さいですが、Cには数十年分のライブラリ(多くのオープンソース)があります。.NETstdlibには、成熟した無料のCライブラリがないことを考えるのに苦労しています。
Ken

3
彼が.NETについて具体的に主張していたとは思いません。まとまりのあるライブラリがたくさんある言語があることを意味しているだけだと思います。Cにはロードがあると確信していますが、正直に言うと、すべてを1か所に集めたりパッケージ化したりするようなリポジトリには出会ったことがありません。
Abs

16
@Ken文字列操作は、非常に一般的なWebアプリのタスクです。Cライブラリはそのために存在しますが、[高水準言語を選択]のライブラリほど多くないか、使用できません。
Andres Jaan Tack

23
@ケン:十分にサポートされている単一の機能セットと、機能セット、ライセンス、およびサポートが大きく異なる多数の小さなライブラリを使用している場合、違いの世界があります。
Dave Markle

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の同じコードがより複雑になると本当に信じますか?いいえ、それは非常に単純かつ高速です。

(C由来する)は、Javaである必要「+」とのリンクマルチラインストリングにプログラマ
(C由来)C#される必要「+」で複数行の文字列をリンクするためにプログラマ
(C由来)PHPされる必要にプログラマ複数行の文字列を「。」でリンクする

ANSI Cには、これは完全に愚かな(廃止された)要件はありません。

それで、現代の言語が主張するそれほど明白な進歩はあったのでしょうか?私はまだそれを探しています。

今後ともよろしくお願いいたします。

ピエール。


10
かなりの数千の追加処理についてのコメントはよくわかりません。中断したC#の場合, amount)、PHPはそのままで大丈夫です。ANSICの例では、さらに2つの引数(バッファーとバッファー長)が必要です。Javaの注目すべき例外を除いて、あなたの例は反対の点を証明しているようです。さらに、その//:: comment ::構文は今まで見たことがありません。PHPは確かにそれを必要としません。
icktoofay

1
正直に言うと、他のすべてオプションはANSI Cよりはるかに見栄えがよく、「明らかに使いやすく覚えやすい」です[sic]。
Jarrod Mosen、2012

両方がCで記述されている場合、G-WANはNGINXとどのように比較されますか?
m4l490n

47

ほとんどのプログラミングでCを使用しないのと同じ理由です。利点(主にパフォーマンス)はコスト(開発時間、自動メモリ管理の欠如、バッファオーバーフローからの自動保護の欠如、編集段階とテスト段階の間にコンパイル段階があるなど)を上回らない。


10
同じことを入力していて、あなたは私をそれに打ち負かしました。であると私は悪意のある動作からウェブサイトを保護することは挑戦のに十分であることを追加したい、我々は、メモリ管理、ポインタなどの誤用から潜在的な攻撃ベクトルを追加する必要はありません
ロブ・アレン

@ヨルダン: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の方が高速であるという事実は関係ありません。
ポールトンブリン2010年

1
@ Kinopiko、eBay(Java)、Stack Overflow(C#/。NET)、Google、または高水準言語で記述された100万の使用頻度の高いWebサイトよりも、パイプが大きく、ページヒットが多く、出荷するデータが多いと言っていますか? ?
ポールトンブリン2010年

1
@Paul Tomblin:Webアプリケーションの目的は、ネットワークパイプを満たすことではなく、いくつかの処理を行うことです。一部のテキストと画像のみを提供する必要がある場合は、優れたパフォーマンスを提供する静的なHTMLページを使用する必要があります。ほとんどの場合、静的ページはキャッシュから提供されるため、サーバーは何もする必要がありません。OTOH、処理が必要な場合、それがボトルネックになる可能性があります(より一般的にはディスクがボトルネックです)。
PauliL 2010年

4
Webアプリケーションは、ユーザーリクエストを処理する「サーバースタック」のほんの一部であり、パフォーマンスが重要な部分ではないことを覚えておく必要があります。その他の部分-OSカーネル(通常はCで記述)、ファイルシステム(C)、Webサーバー(通常はC)、言語インタープリター(C)、データベース(通常はCまたはC ++)。Webアプリケーションは通常、ある部分から別の部分にデータを渡し、それに基本的な操作を適用するだけです。そのパフォーマンスはまったく重要ではありません。
el.pescado 2010年

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 2010年

12
Cとほぼ同じパフォーマンスが得られますが、C#の例をチャームのようにコンパイルするため、C ++を使用する必要がありますか?
tstenner、2010年

2
文字列操作について-通常、Webアプリケーションは文字列のみを出力するため、Cが処理するprintf必要があります。
el.pescado 2010年

5
Cは、ランタイムライブラリ関数を介してマルチバイトとユニコードを適切に処理します。strncpyなどの安全な関数を使用すると、非常に安全になります。
justinhj

2
または、asprintf(&foobar、 "%s%s"、foo、bar);を使用できます。
Patrick Lorio、2014年

11

難しさと複雑さがまったく問題にならない場合は(ha!)、Cに止まらないでしょう。x86アセンブリを作成します。x86以外のWebサーバーを使用してから数年が経ちましたが、毎日のように見えなくなっています。

Cを使用する(アセンブリの代わりに、またはより高いレベルの)ことは、Cがプログラマー効率とコンピューター効率のスイートスポットであることを示唆しています。

私が作成するプログラムの場合、これは当てはまりません。Cは、作成するプログラムの種類との適合性が低く、まともなマクロアセンブラよりもCが優れている点はそれほど重要ではありません。私が今書いているプログラムは、選択したHLLで難しいことではありませんが、アセンブリまたはCでのプログラムの複雑さは非常に高いため、決して終了しません。十分な時間のある十分に賢いプログラマーは、アセンブリーまたはCでより速く実行できることを認めますが、私はそのプログラマーではありません。


7
  • それは安全ではありません
  • それはです読みづらいです
  • 維持するのは難しい、開発時間は桁違いに遅い
  • ほとんどのWeb要素はおそらくI / Oバウンドであるため、特にJavaやC#のような高速言語を使用する場合、速度の向上は問題になりません

2
「JavaやC#のような高速言語」とはどういう意味ですか?
RobS 2010年

3
@Kinopiko:動的言語にはどのような弱点がありますか?noobプログラマーが明示的にevalphp を介して任意のコードを実行したいと言ったときinclude?C / C ++では、任意のコードを実行することを表明せず、実行するだけです。evalバグではなく、プログラマの意図です。C / C ++では、バグが原因でリモートコードが実行される可能性があります。動的言語では、愚か者がをいじっていない限り、これは当てはまりませんeval
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

1
「そして何をしているのかに応じてC / C ++と同じかそれより速い」かもしれませんが、JavaとC#の両方でマネージドメモリ環境を処理しているため、トラフィックの多いシナリオではかなりの欠点になる可能性があります。
RobS

5
「そしてCには確かに、動的言語ほど多くのセキュリティ上の弱点はありません」それは、私の友人、まったくナンセンスです。そのコメントに3つの賛成票があるのはなぜですか?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

2
@きのぴこ:まあ、実際にはどこにも説明することはできません。説明はありません。Cには、動的言語よりもはるかに大きな問題があります。動的言語で起こり得るさらに悪いことは、「属性が見つかりません、フープディードゥー」です。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

7

この質問にはすでに回答済みですが、プログラミングパラダイムで成功するために、特にプログラマーではない多くの人々を獲得するWeb開発において、これまでに言及されていない2つのことが非常に重要です。コードでの作業。

  1. 関与している便利なコミュニティ、別名私の問題はすでに解決した人。PHPで「ヘッダーがすでに送信された」というエラーが発生する理由は、Googleの初心者にとっても非常に簡単ですが、その情報は、フレームワークやシーンに新しい言語では利用できないか、そうでない場合は利用できません。臨界質量。
  2. フレームワーク。これにより、ほとんどのプログラマーは、コードを一緒にハッキングするのではなく、ビジネス上の問題を解決できるようになります。

極端なパフォーマンスを必要とする重要なアプリがある場合、Cを使用しますが、書くのに非常に時間がかかり、市場に出ることはありません。#1か#2になるまで、私はそれを使うのは現実的ではありません。


6

Cは多くの目的のための非常に低レベルの言語です:非OOP、多くの手動リソース管理。

Kloneなど、Web用のCの使用には制限があります。これは主に、リソースの少ない組み込みアプリケーションの場合に使用されます。

ただし、高性能のWebアプリケーション開発に使用されるCppCMSなどのC ++ Webフレームワークがあります。

C ++を使用すると、大規模なアプリケーションをデプロイおよび開発するためのはるかに優れたオプションを提供して、実行中の作業への高度な抽象化と細かいアクセスを楽しむことができます。

ただし、一般にWeb開発はJava、Python、PHPなどの言語に適したWebフレームワークを使用する方が速いため、パフォーマンスとリソースの使用が市場投入までの時間や開発コストよりもはるかに重要な場合に使用します。また、一般的に、同じ給与のC ++言語よりもJava / P *言語の方が能力の低いプログラマーがいます。

したがって、優先順位の問題であり、C ++ Web開発用のツールよりもPHP / Python / PerlまたはJava用のツールが少なくなっています。


2
興味深いことに、C ++で記述された低レベルのWebフレームワークであるCppCMSについては知りませんでした。C言語とWeb言語の中間に位置し、両方の世界で最高の可能性があります。
Abs

現在は低レベルのフレームワークであり、非常に高速なのはMVC Webフレームワークです。
Artyom

申し訳ありませんが、私はウェブ言語でないものはすべて低レベルと呼びます。MVC Webフレームワークについても理解しています。
Abs

「Web言語」などはありません。おそらくPHPだけをWeb言語と呼ぶことができます。Java、Python、Perl、Ruby、C#を含む他のすべての言語は、Webで使用される汎用言語です。
Artyom

1
まあ、そのように具体的にしたいのであれば、汎用プログラミング言語などはありません。手続き型、構造化、オブジェクト指向、関数型などのみ...
Abs

5

@Joeri Sebrechts

FUDの実際:

PHP、Pythonなどは、問題にハードウェアを投入することで簡単にスケールアップできます。

まあ、実際には違います。垂直方向のスケーリングがまったくなく、水平方向のスケーリングが非常に不十分です。参照:http://gwan.ch/en_scalability.htmlを、多くの問題が先に不良パフォーマーのある方法を説明されています。

PHPでアプリを開発するのに1人1年の労力がかかり、Cで開発するのに3年かかると仮定します(Cが同じことを行うにはさらに労力が必要になるため)。

また違う。PHPライブラリがCで記述されている場合、それらはCから直接使用でき、PHPが主張する「独自の生産性」を即座に提供します。

つまり、Cコードのハードウェアの必要性が減ったことは、Cが魅力的になるために2年分の賃金を表さなければならないということです。実際には(ほとんど)決して起こらない。

純粋なFUD(上記の回答を参照)。

Facebookの規模は非常に大きいため、ハードウェアは十分に大きなコストです。これが、PHPをC ++にクロスコンパイルするHipHopを開発した理由です。これは、PHPでのプログラミングのシンプルさとC ++の生のパフォーマンスの両方の長所をもたらします。FacebookはまだPHPで開発されていますが、使用すると、すべてネイティブコードになります。

HipHopはPHPよりもはるかに高速です。ただし、HipHopをプレーンCの実装と比較すると、オーバーヘッドが2層あります。

  • PHPからC ++へのインターフェース(肥大化したC ++ライブラリを使用)
  • C ++膨張(C ++をプレーンCよりも2〜10倍遅くします)。

さらに、HipHopは無知な非効率的なアカデミックモードで作成されています(現実の現実から切り離されています)。確かに、それはPHPプログラマーを感動させることができますが、このコードを埋め込みプログラマーに見せれば、彼はFacebookを気の毒に思うでしょう。

「すべてを備えていない言語は、実際に備えている言語よりもプログラミングが簡単です」--Dennis M. Ritchie

(ほとんどの)プログラミング言語のエンドユーザーとは異なり、デニスはこの問題についていくつかのことを知っていたようです。


3
(1)個人的に物を持ちすぎないでください。私はあなたの製品さえ知らなかったので、あなたの製品を否定するつもりはありませんでした。(2)あなたはG-wanで興味深い概念実証を行っていますが、いくつかの合成ベンチマークだけでなく、それを使用している実際のWebアプリが表示されるまで、私が少し待ってアプローチする場合は失礼します。(3)水平スケーリングに関するfacebookの不満の特徴を誤って説明しました。これは、問題がmemcacheとデータベースのマルチコアパフォーマンスにあるためです。これは、G-wanが解決に役立つものではない、実際のWebアプリのボトルネックです。(4)HipHopは、きっとあなたのコードの貢献を歓迎します。
Joeri Sebrechts

1
生産性の問題といえば。私は以前CでWebアプリを作成したことがありましたが、その前に、PHPと同じことを行うには、クラッシュやリークのようなバグのリスクが非常に高いのに、より多くの行が必要でした。(私はそれらの種類のバグで「平均的」です、つまり私はそれらを時々書いていると言います。)私はそれ以外のことを示す実際のアプリが見つかるまでその経験に基づいて判断します(たとえば、Cへのwordpressポート)。より多くのコード行を必要としません)。
Joeri Sebrechts、2010

どのようにして「垂直方向に拡大縮小しない」のですか?シングルコアのパフォーマンスとメモリのパフォーマンスが向上してもメリットがないということですか?
rakslice 2015

5

これらの言語で簡単に開発できること以外に、PHP、Python、Rubyなどを使用する理由は他にもあるはずです。

これが完全な理由であり、唯一必要な理由です。これには多くの利点があり、その主なものは市場投入までの時間です。Cを使用して2か月ではなくPHPを使用して1か月でWebアプリをオンラインにできる場合は、勝つ可能性があります。Cを使用して2週間ではなく、Ruby on Railsを使用して1週間で新機能を追加できる場合は、再び成功します。Cを使用して2日ではなく、Pythonを使用して1日のバグを修正できる場合は、もう一度勝利します。言語Xを使用しているために機能を追加できるが、競合他社言語Yを使用しているために競合他社がまったく追加できず、リソースの制約を考えるとその言語では難しい場合は、確実に勝利します。

そして「勝つ」とは、あなたが負けないことを意味します。競合他社は高レベルの言語とフレームワークを使用してサイトを開発しているため、Cを使用する場合、Cを使用する他の人々と競合することはなく、Cを使用しない他の人々との間に負けています。競争するだけで、同様の抽象化レベルのツールを使用する。

パフォーマンスが問題になる場合は、サイトの遅い部分をパフォーマンスの高い言語で書き直すことができます。または、より多くのハードウェアを投入することもできます。本当に、パフォーマンスの問題は、私たちが「いい問題」と呼んでいるものです。つまり、すでに成功しているということです。しかし、サイトの基本的な機能の開発により多くの時間を費やすことはめったに選択肢になりません。Cでそれを高速で実行できるように書き込むのは時期尚早の最適化であり、Knuthが言うように、これはすべての悪の根源です。

これは、PythonやRubyよりも抽象度の高い言語を使用できれば、PythonやRubyを使用している人々に勝つ可能性があることを意味します。Paul Graham氏と彼のチームがWebサイトの開発においてLISPを「秘密兵器」としてどのように使用したかについての物語は有益かもしれません。http://www.paulgraham.com/avg.html

もちろん、あなたがあなた自身の娯楽のためにサイトを開発しているなら、あなたが好きな言語でそれをしてください。また、サイトがCPUにバインドされている場合(ほとんどありません。通常はI / Oにバインドされています)、できる限り高速に実行できる言語を使用します。ただし、革新しようとする場合は、最高の抽象概念を備えた高級言語を使用してください。


via webの大量注文処理ビットがCで記述されたことを忘れています。paulgraham.com/ avg.htmlの下部にあるメモを参照してください。
Giles Roberts、

4

あなたは簡単であることは正当な理由ではないと思います。それはもっともな理由だと思います。究極のパフォーマンスが必要な場合はCでも大丈夫ですが、他の言語では難しいものを抽象化して、生産性、保守性を向上させ、欠陥を減らします。


6
究極のパフォーマンスを得るには、Cだけでなく、究極のCプログラマーも必要です。そして、それらの人たちは通常、Java / P *プログラマーよりも多くのお金を望んでいます。
el.pescado 2010年

4

私はWeb開発者ではないが、とにかくこれらの質問をして、1つまたは2つのポイントを提供することを検討してください。

どのウェブサイトが1つの言語でのみ書かれていますか?真剣にこのスレッドは、1つのハンマーがすべての釘に合うと想定しているようです。

Cが複雑だと真剣に誰かが最後に言ったのはいつですか?つまり、これ以上低いレベルを取得することはできません。この2つはまとめて参照されることが多いため、ここではC ++について話していません。

Cにはセキュリティ上の懸念がありますが、それは否定できませんが、PHPとPerlと呼ばれるクラッジで見られるものよりも小さいのですか?どちらの場合も、安全なWebサイトはプログラマーの規律の機能です。

とにかくコメントへ。特定の言語を使用することの難しさは、当面の問題に大きく依存します。Cおよび特に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
  • ディスカウント、David ParsonsによるJohn GruberのMarkdownテキストのC言語によるHTML言語への実装
  • プロトスレッド(特に組み込みシステムの場合)、http: //www.sics.se/~adam/software.html
  • protothread、LarryRuaneによるGoogleコードプロジェクト
  • uriparser sourceforgeプロジェクト
  • GithubのRyan Dahlによるcのhttpパーサー、http要求/応答パーサー
  • nginx
  • ...

2

まあ、Web開発が有用なライブラリ(PHPで使用される種類)を使用することの問題であることを考えると、Cがどのように有用ではないのかわかりません。

結局のところ、手順のロジックは同じです。それがC、PHP、.Net、Perlのいずれであっても、しばらくの間、そうでない場合は、などです。

また、CループまたはテストはCで記述されているため、記述が難しくありません。

ほとんどのPHPライブラリはCで作成されているため、C-libraries-for-the-Web引数が不足していることはそれほど説得力がないように見えます。

私の推測では、CはJava(SUN)と.Net(MICROSOFT)のプロモーターによってWebプログラミング言語として宣伝されていなかったと考えられます。これは、Cが独自の(特許取得済み)知的資産を採用して推進したためです。

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

次の場合、私はWebアプリにCを使用します。

  1. ホスティングサーバー(小さなVPS)に少し予算があり、時間はそれほど高くありません。
  2. 私はFacebook、Twitter、またはサーバーの使用量を削減する必要がある人(数千から数百万のユーザー)のために働いています。
  3. Cを学びたいのですが、Cを使用できる実際のアプリを見つける必要があります。
  4. Cは他のスクリプト言語よりもはるかによく知っています。
  5. 私はエコ好きで、アプリの二酸化炭素排出量を削減したいと考えています。

G-WANはコードをスクリプトとして実行します。はい、PlayのようなCスクリプトです。フレームワークはJava用です。G-WANは非常に高速で、APIが簡単です。G-WANを使用すると、他のサーバーでC / C ++を使用できない場合にWebアプリでC / C ++を使用できます。

はっきりしていることは、CでWebサイトを作成するには優れたプログラマーが必要であり、くだらない開発者であれば、スパゲッティPHPを使用してサイトを作成できるということです。


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の移植性を却下したことはありません。私が言及した唯一のことは、既存のWebSpaceにPHPスクリプトを適用する容易さでした。コンパイラがある低予算のWebSpaceを入手できるケースを見せてください。多分私は間違っているかもしれませんが、あなたは1つの言語を崇拝しているが、おそらくより適切な他の言語の利点を理解していないこれらの狂信的なプログラマーの1人だと思います。CとC ++は大好きですが、箱から出して考えることはできます。
domachine

0

G-WANに似ていますが、Cocoa / Objective-CにはWebアプリケーションフレームワークであるBombaxがあります。

http://www.bombaxtic.com

Objective-Cといえば、MacRubyを指摘することに抵抗することはできません。MacRubyは、いつかWebアプリを作成する方法に革命を起こす可能性があります。


まあMacRubyはもう死んでいる。
Banjocat

0

別のポイントは、プラットフォームの依存関係かもしれません。Cはネイティブコードにコンパイルする必要があります。このコードはすべてのプラットフォームで実行できるわけではありません。

インタープリターが存在する場所であればどこでもインタープリター言語が実行されます。たとえば、多くのプロバイダーは、サーバーにインストールされているがWindows OSを備えたPHPインタープリターを提供しています。Linuxマシンで開発している場合。問題があります。

もちろん、この問題は解決できますが、この特定のケースではPHPで開発することの利点がわかります。

これが役に立てば幸い、domachine


0

PHP、Pythonなどは、問題にハードウェアを投入することで簡単にスケールアップできます。

PHPでアプリを開発するのに1人1年の労力がかかり、Cで開発するのに3年かかると仮定します(Cが同じことを行うにはさらに労力が必要になるため)。つまり、Cコードのハードウェアの必要性が減ったことは、Cが魅力的になるために2年分の賃金を表さなければならないということです。実際には(ほとんど)決して起こらない。

すべてのルールと同様に、例外があります。Facebookの規模は非常に大きいため、ハードウェアは十分に大きなコストです。そのため、PHPをC ++にクロスコンパイルするHipHopを開発しました。これは、PHPでのプログラミングのシンプルさとC ++の生のパフォーマンスの両方の長所をもたらします。FacebookはまだPHPで開発されていますが、使用すると、すべてネイティブコードになります。


0

最終的には、アセンブラー(CGIなど)を含め、サイトを開発するために絶対に任意の言語を使用できます。コンパイルされた言語を使用しないのはなぜかというと、.NET、Javaなどが既に用意されています。


0

結果を得るためには、自分がやっていることを愛さなければなりません。javaやphpなどの言語は、人々の生活を楽にするために多くの努力を払って作成されました。Phpは特に、今日多くの独学のWebプログラマーに利益をもたらしています。あなたはそれがウェブ開発の世界で持っている一種のサポートを見ることができます。

Java iamは、今日の世界で可能なすべてのことを支援するように書かれています。巨大な本は明確な兆候であり、Web開発も迫っているのであれば、それは獣です。Pythonについても同様です。これらは素晴らしい言語とプラットフォームです。彼らが非常に人気があるのも不思議ではありません。

私はCの信者であり、一部の制限により、phpなどの他の言語を見ることができませんでした。私は毎日Cで書いています。毎日eを誇りに思っており、新しいことも学んでいます。これにより、私は非常に気分が良くなり、Cgiを介してWebサイト用のアプリケーションを作成するときに、Cがデフォルトの選択である方法についても学び始めました。これは他のプラットフォームでは抽象化されており、データベースやWebサービスに関連するWebサイトを開発する場合は、舞台裏で何が起こっているかを知る必要があります。

ただし、それらすべてを知っていて、それでもスクリプト言語を使用したい場合は、正当な理由があるはずであり、それに対して誰かが助言する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.