Warum verwenden Sie C nicht für Ihre Web-Apps?

101

Ich habe mir heute Morgen einige verschiedene Webserver angesehen, als ich auf G-WAN gestoßen bin . Soweit ich weiß, handelt es sich um einen in C geschriebenen Webserver, den Sie nutzen müssen, indem Sie Ihre Websites / Webapps in C schreiben. Ein klarer Vorteil ist die Geschwindigkeit, wie die G-WAN-Site vorschlägt.

In den Foren fragte der Entwickler von G-WAN jedoch, warum C nicht für webbasierte Apps verwendet werden soll, und ich kann mir keinen einzigen Grund vorstellen, abgesehen davon, dass es schwierig ist (für mich bin ich sowieso ein Neuling, wenn es um C geht). Es muss weitere Gründe geben, warum wir alle PHP, Python, Ruby usw. verwenden, abgesehen davon, dass es einfach ist, in diesen Sprachen zu entwickeln. Ich sehe das nicht als guten Grund.

Also habe ich es Ihnen gesagt: Warum verwenden Sie C nicht für Ihre Web-Apps?

Abs
quelle
34
Warum benutzen wir Öfen und kochen unsere Mahlzeiten nicht direkt mit Feuer? Warum benutzen wir Autos, obwohl das Gehen oder das Fahrrad viel gesünder ist? Warum ... ich könnte weitermachen ...
Felix Kling
16
@Felix - wie gesagt, nenne andere Gründe, abgesehen davon, dass es schwierig ist. Was bedeutet, dass ich mir bewusst bin, dass andere Sprachen mit abstrakten Schwierigkeiten existieren.
Abs
15
Nie wirklich als schwierig angesehen.
3Dave
10
@ David Lively Wenn du es nicht geschafft hast, das 'c' absichtlich in schwierig zu setzen, ist das wirklich ziemlich lustig. Gut gemacht :)
Punkrockbuddyholly
11
@MrMisterMan hat nur vier Monate gebraucht, um diesen zu erkennen. =)
3Dave

Antworten:

79

Es erfordert viel Sorgfalt, um ein C-Programm korrekt und sicher zu machen. Diese Sorgfalt bedeutet, dass Sie wirklich gute Leute brauchen, die Ihre Programme schreiben. Das heißt, Sie zahlen mehr.

Außerdem hat C nicht den Vorteil, aus einer riesigen Standardbibliothek von Funktionen zu ziehen, wie es .NET (und die anderen wichtigen webzentrierten Plattformen) getan haben. Möglicherweise müssen Sie entweder Komponenten kaufen oder Interop ausführen oder Ihre eigene Funktionalität, die "kostenlos" mit einer mehr geliefert wird, erweitern. Sollen wir "webzentrierte" Sprache wie PHP oder C # oder Ruby oder was auch immer sagen. Das heißt, Sie zahlen mehr.

Fügen Sie all das der Tatsache hinzu, dass die Single-Thread-Rechengeschwindigkeit im Web einfach nicht so wichtig ist. Wenn Sie mehr Skalierbarkeit benötigen, können die meisten Unternehmen wirtschaftlich einfach mehr Kerne auf das Problem werfen und in Ordnung sein. Dies gilt natürlich nicht für alle. Ich würde mir vorstellen, dass der Kern der Google-Engine nicht nur aus Gründen der Geschwindigkeit in C oder einer ähnlichen Sprache geschrieben ist, sondern auch, um echtes Geld bei den Stromkosten zu sparen.

Dave Markle
quelle
48
Wow, ein Argument für .NET gegen C wegen Bibliotheken ? Sicher, die stdlib ist kleiner, aber wir haben jahrzehntelange Bibliotheken (viele Open-Source-Bibliotheken) in C. Ich habe Probleme, an irgendetwas in der .NET-stdlib zu denken, für das es keine ausgereifte und kostenlose C-Bibliothek gibt.
Ken
3
Ich glaube nicht, dass er speziell für .NET argumentiert hat. Ich denke, er meinte nur, dass es Sprachen gibt, die viele zusammenhängende Bibliotheken haben. Ich bin mir sicher, dass C jede Menge hat, aber um ehrlich zu sein, bin ich auf kein Repo gestoßen, das sie alle an einem einzigen Ort sammelt oder verpackt.
Abs
16
@ Ken String-Manipulation ist eine sehr häufige Web-App-Aufgabe. Dafür gibt es C-Bibliotheken, aber sie sind bei weitem nicht so zahlreich oder verwendbar wie Bibliotheken in [eine Hochsprache auswählen].
Andres Jaan Tack
23
@ Ken: Es gibt ein Universum von Unterschieden, wenn Sie einen einzigen, gut unterstützten Funktionsumfang gegenüber einer Vielzahl kleiner Bibliotheken haben, die sich in Bezug auf Funktionsumfang, Lizenzierung und Support stark unterscheiden.
Dave Markle
49

Summen...

Es scheint, dass ich etwas spät in dieser Diskussion bin - aber ich habe es gerade erst entdeckt. Und ich bin Ihnen allen für so viel Input dankbar.

Ich bin der Autor von G-WAN, was deutlich macht, dass ich ernsthaft an der Sache gearbeitet habe: G-WAN ist sowohl schneller als alle anderen Webserver (keine Verarbeitung) als auch alle anderen Webanwendungsserver (jede erdenkliche Verarbeitung).

Ja, ANSI C hat es auch ermöglicht, mehr statische Inhalte zu verarbeiten - mit weniger leistungsstarken CPUs (bei ANSI C geht es nicht nur darum, dynamische Inhalte zum Fliegen zu bringen).

Übrigens verwendet G-WAN C-Skripte (kein C-Compiler und Linker erforderlich), sodass der Kompilierungs- / Verknüpfungszyklus / die Verzögerung nicht vorhanden ist.

Beim Vergleich von G-WAN mit .NET Java und PHP habe ich ähnliche Anwendungen in allen vier Sprachen geschrieben: http://gwan.ch/source/

Und zu meiner Bestürzung waren die modernen Skriptsprachen nicht einfacher zu verwenden.

Ein Teil des Jobs, der besonders frustrierend ist, besteht darin, verzweifelt nach dem 'magischen' API-Aufruf zu suchen , der das tut, was Sie tun möchten.

Überlegen Sie, wie Sie "hübsche Tausende" in:

C #

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

Java

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C.

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

Das "..." bedeutet, dass eine Vorkonfiguration oder Nachbearbeitung erforderlich ist. ANSI C ist deutlich einfacher zu bedienen und zu merken.

Wenn PHP mehr als 5900 API-Aufrufe hat (C # und Java nicht weit entfernt), ist es eine Herausforderung , den richtigen API-Aufruf zu finden. Die Zeit, die verschwendet wird, um dies zu finden (und dann herauszufinden, wie schlecht der native API-Aufruf implementiert ist), die Zeit, um es für das nächste Mal, wenn Sie es benötigen, von hart zu lernen, entzieht Ihnen all diese Zeit die Zeit, die zum Auflösen Ihrer Anwendung erforderlich ist Probleme.

Ich habe (oben) gelesen, dass PHP prägnanter ist als ANSI C? Warum dann "//:: this is a comment ::"lieber verwenden als "// this is a comment"? Warum eine so dumm komplexe 'hübsche Tausend'-Syntax?

Das andere übliche Argument ist, dass Java und dergleichen dedizierte Aufrufe für Webanwendungen bereitstellen.

Ich konnte in Java nichts finden, um HTML zu entkommen, also schrieb ich meine Version davon:

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

Glauben Sie wirklich, dass der gleiche Code in ANSI C komplexer wäre? Nein, es wäre immens einfacher und schneller.

Java (abgeleitet von C) erfordert Programmierer Link mehrzeiligen strings mit einem ‚+‘
C # (abgeleitet von C) ist erforderlich Programmierer Link mehrzeiligen strings mit einem ‚+‘
PHP (abgeleitet von C) erfordert Programmierer Verknüpfen Sie mehrzeilige Zeichenfolgen mit einem '.'

ANSI C hat diese jetzt völlig dumme (veraltete) Anforderung nicht.

War der so offensichtliche Fortschritt, den die modernen Sprachen fordern? Ich suche immer noch danach.

Mit freundlichen Grüßen,

Pierre.

Pierre
quelle
10
Ich verstehe Ihren Kommentar zur zusätzlichen Verarbeitung von ziemlich Tausenden nicht ganz. Für C #, das Sie aufgehört haben , amount), ist PHP unverändert in Ordnung, und Ihr ANSI C-Beispiel benötigt zwei weitere Argumente (Puffer und Pufferlänge). Mit der bemerkenswerten Ausnahme von Java scheint Ihr Beispiel den gegenteiligen Punkt zu beweisen. Außerdem habe ich diese //:: comment ::Syntax noch nie gesehen . PHP benötigt es sicherlich nicht.
icktoofay
1
Um ehrlich zu sein, sehen alle anderen Optionen viel besser aus als ANSI C, das "eindeutig einfacher zu verwenden und zu merken ist".
Jarrod Mosen
Wie vergleicht sich G-WAN mit NGINX, wenn beide in C geschrieben wurden?
m4l490n
47

Aus dem gleichen Grund verwenden wir C für die meisten Programmierungen nicht. Die Vorteile (hauptsächlich Leistung) überwiegen nicht die Kosten (Entwicklungszeit, fehlende automatische Speicherverwaltung, fehlender automatischer Schutz vor Pufferüberläufen, Kompilierungsphase zwischen Bearbeitungs- und Testphase usw.).

QUentin
quelle
10
Ich habe das Gleiche getippt und du hast mich geschlagen. Ich möchte nur hinzufügen, dass der Schutz von Websites vor böswilligem Verhalten eine Herausforderung darstellt. Wir müssen keine potenziellen Angriffsmethoden aufgrund eines Missbrauchs von Speicherverwaltung, Zeigern usw. hinzufügen.
Rob Allen
@ Jordan: Ich habe das Gefühl, dass Sie in C keine Webprogrammierung durchgeführt haben. Was Sie sagen, passt nicht zum Modell der Webprogrammierung.
2
Sicher, vorausgesetzt, Ihre Website bietet Platz für Benutzerinteraktionen, sei es per URL oder Formulareingabe. Sobald diese Daten an den Server übergeben wurden, muss der Programmierer sicherstellen, dass der Speicher korrekt zugewiesen wird. G-WAN hat eine gewisse Abstraktion in Bezug auf Abfrageparameter, aber das wird Sie nicht vollständig retten. Ich sage nicht, dass die C-Web-Programmierung nicht sicher und schnell durchgeführt werden kann, aber sie ist anfälliger für härtere Fehler.
Jordanien
3
seufzen @Kinopiko: Wenn Sie nicht wissen , was ein Pufferüberlauf ist, sollten Sie nicht in C. Codierung werden die ‚nuff. Für weitere Informationen: Securecoding.cert.org/confluence/display/seccode/…
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
29

Die meisten Netzwerkanwendungen, insbesondere Webserver, sind weitaus "E / A-gebunden" - dh sie können Daten viel schneller auspumpen, als das Netzwerk sie akzeptieren kann. Daher ist etwas, das sehr CPU-effizient ist, kein großer Gewinn, während etwas, das skalierbar und wartbar ist, es ist. Es gibt also keinen Grund, die Nachteile von C zu akzeptieren und die Vorteile einer verwalteten Umgebung wie Java, .NET, Python, Perl oder anderen Sprachen zu verlieren.

Paul Tomblin
quelle
1
C ist allerdings viel schneller.
14
Wenn ich die Netzwerk-Pipe mit Java oder Perl füllen kann (und ich kann), ist die Tatsache, dass C schneller ist, irrelevant.
Paul Tomblin
1
@Kinopiko, sagen Sie, Sie haben eine größere Pipe, mehr Seitentreffer und mehr Daten als eBay (Java), Stack Overflow (C # /. NET), Google oder eine von Millionen häufig verwendeten Websites, die in höheren Sprachen geschrieben sind ?
Paul Tomblin
1
@Paul Tomblin: Der Zweck einer Webanwendung besteht nicht darin, die Netzwerkleitung zu füllen, sondern eine Verarbeitung durchzuführen. Wenn Sie nur Text und Bilder bereitstellen müssen, sollten Sie statische HTML-Seiten verwenden, die eine überlegene Leistung bieten. In den meisten Fällen werden die statischen Seiten aus dem Cache bereitgestellt, sodass Ihr Server nichts tun muss. OTOH, wenn eine Verarbeitung erforderlich ist, kann dies durchaus der Engpass sein (obwohl die Festplatte häufiger der Engpass ist).
PauliL
4
Sie müssen sich daran erinnern, dass Webanwendungen nur einen Bruchteil eines "Server-Stacks" darstellen, der Benutzeranforderungen verarbeitet, und keinen leistungskritischen Teil darstellen. Es gibt andere Teile - Betriebssystemkern (normalerweise in C geschrieben), Dateisystem (C), Webserver (normalerweise C), Sprachinterpreter (C), Datenbank (normalerweise C oder C ++). Die Webanwendung überträgt normalerweise nur Daten von einem Teil an einen anderen, wobei einige grundlegende Vorgänge darauf angewendet werden, und die Leistung ist überhaupt nicht entscheidend.
el.pescado
15

C ist keine bequeme Sprache zum Bearbeiten von Zeichenfolgen.

Vergleiche C #:

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

Entsprechendes 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
ChrisW
quelle
4
PHP verarbeitet Unicode ebenfalls nicht richtig, ist jedoch eine sehr beliebte weborientierte Sprache.
el.pescado
12
Wir sollten also C ++ verwenden, da es ungefähr die gleiche Leistung wie C erzielt, aber Ihr C # -Beispiel wie ein Zauber kompiliert?
tstenner
2
Bei der Manipulation von Zeichenfolgen gibt die Webanwendung normalerweise nur Zeichenfolgen aus, daher printfsollten Cs die Aufgabe übernehmen.
el.pescado
5
C verarbeitet Multibyte und Unicode über Laufzeitbibliotheksfunktionen einwandfrei. Die Verwendung der sicheren Funktionen wie strncpy usw. macht es auch ziemlich sicher.
Justinhj
2
Oder Sie könnten asprintf verwenden (& foobar, "% s% s", foo, bar);
Patrick Lorio
11

Wenn Schwierigkeit und Komplexität überhaupt kein Problem wären (ha!), Dann würde ich nicht bei C aufhören. Ich würde x86-Assembly schreiben. Es ist Jahre her, seit ich einen Webserver verwendet habe, der nicht x86 war, und es sieht von Tag zu Tag weniger wahrscheinlich aus.

Die Verwendung von C (anstelle von Assembly oder etwas höherem) bedeutet, dass C der Sweet Spot für Programmierereffizienz und Computereffizienz ist.

Für die Programme, die ich schreibe, ist dies nicht der Fall: C passt schlecht zu den Arten von Programmen, die ich schreiben möchte, und die Vorteile gegenüber einem anständigen Makro-Assembler sind einfach nicht so bedeutend. Das Programm, das ich gerade schreibe, ist nicht schwer in meiner HLL der Wahl, aber die Komplexität in Assembly oder C wäre so hoch, dass es niemals fertig werden würde. Ich erkenne an, dass ein ausreichend intelligenter Programmierer mit genügend Zeit die Ausführung in Assembly oder C beschleunigen könnte, aber ich bin nicht dieser Programmierer.

Ken
quelle
7
  • es ist unsicher
  • es ist schwer zu lesen
  • Es ist schwer zu warten, die Entwicklungszeit ist in der Größenordnung langsamer
  • Die meisten Ihrer Web-Inhalte sind wahrscheinlich E / A-gebunden, daher spielt die Beschleunigung keine Rolle, insbesondere wenn Sie eine schnelle Sprache wie Java oder C # verwenden
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
quelle
2
Was bedeutet "schnelle Sprache wie Java oder C #"?
RobS
3
@ Kinopiko: Welche Schwächen haben dynamische Sprachen? Wenn ein Noob-Programmierer ausdrücklich sagt, er möchte beliebigen Code über evalund PHPs ausführen include? Bitte geben Sie in C / C ++ nicht an, dass Sie beliebigen Code ausführen möchten, sondern nur. evalist kein Fehler, es ist die Absicht des Programmierers. In C / C ++ kann jeder Fehler zur Ausführung von Remotecode führen. In dynamischen Sprachen ist dies nur dann der Fall, wenn ein Dummkopf damit herumspielt eval.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
1
"und je nachdem, was Sie tun, so schnell oder schneller als C / C ++", aber Sie haben es immer noch mit einer verwalteten Speicherumgebung mit Java und C # zu tun, was in Szenarien mit hohem Datenverkehr zu einem ziemlichen Nachteil werden kann.
RobS
5
"Und C hat sicherlich nicht so viele Sicherheitslücken wie jede dynamische Sprache." Das , mein Freund, ist völliger Unsinn. Warum hat dieser Kommentar 3 positive Stimmen?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
2
@ Kinopiko: Nun, eigentlich kann man es nirgendwo erklären. Es gibt keine Erklärung dafür. C hat ein viel größeres Problem als jede dynamische Sprache. Das Schlimmste, was in einer dynamischen Sprache passieren kann, ist "Attribut nicht gefunden, whoop dee doo".
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
7

Ich weiß, dass diese Frage bereits zu Tode beantwortet wurde, aber es gibt zwei Dinge, die bisher nicht erwähnt wurden und die für den Erfolg in jedem Programmierparadigma außerordentlich wichtig sind, insbesondere in der Webentwicklung, in der viele Leute nicht unbedingt Programmierer sind. mit dem Code arbeiten.

  1. Beteiligte, nützliche Community, auch bekannt als People, die mein Problem bereits gelöst haben. Es ist selbst für die Noobiest-Noobs bei Google ziemlich einfach, warum sie in PHP "Header bereits gesendet" -Fehler erhalten, während diese Informationen möglicherweise nicht für ein Framework oder eine Sprache verfügbar sind, die neu in der Szene ist oder auf andere Weise nicht vorhanden ist kritische Masse.
  2. Frameworks, damit die meisten Programmierer Geschäftsprobleme lösen und nicht gemeinsam Code hacken können.

Wenn ich eine kritische App hätte, die extreme Leistung erfordert, würde ich C verwenden, aber das Schreiben würde so viel länger dauern, dass ich nie auf den Markt kommen würde. Bis es entweder # 1 oder # 2 gibt, ist es für mich nicht machbar, es zu benutzen.

Jordanien
quelle
6

C ist für viele Zwecke eine recht einfache Sprache: No-OOP, viel manuelles Ressourcenmanagement.

Es gibt eine begrenzte Verwendung von C für das Web, zum Beispiel Klone . Es wird hauptsächlich für eingebettete Anwendungsfälle mit geringen Ressourcen verwendet.

Es gibt jedoch C ++ - Webframeworks wie CppCMS , die für die Entwicklung von Hochleistungswebanwendungen verwendet werden.

Mit C ++ können Sie eine hohe Abstraktion und einen detaillierten Zugriff auf das, was Sie gerade tun, genießen. Dies bietet eine viel bessere Option für die Bereitstellung und Entwicklung großer Anwendungen.

Sie verwenden sie jedoch für den Fall, dass Leistung und Ressourcennutzung viel kritischer sind als die Markteinführungszeit und die Entwicklungskosten, da die Webentwicklung im Allgemeinen schneller ist, wenn gute Webframeworks für Sprachen wie Java, Python oder PHP verwendet werden. Auch im Allgemeinen gibt es weniger kompetente Programmierer für C ++ als Java / P * -Sprachen für das gleiche Gehalt.

Es ist also eine Frage der Prioritäten, auch gibt es weniger Tools für die C ++ Webentwicklung als für PHP / Python / Perl oder Java.

Artyom
quelle
2
Interessanterweise wusste ich nichts über CppCMS, ein in C ++ geschriebenes Low-Level-Webframework. Könnte das Beste aus beiden Welten sein und zwischen C und den Web-Sprachen sitzen.
Abs
Es ist jetzt ein Low-Level-Framework, es ist ein MVC-Webframework, das sehr SCHNELL ist.
Artyom
Entschuldigung, ich beziehe mich nur auf alles, was keine Web-Sprache ist, auf ein niedriges Niveau. Ich verstehe, obwohl es ein MVC-Webframework ist.
Abs
Es gibt keine "Web Language", wahrscheinlich kann nur PHP als Web One bezeichnet werden. Alle anderen Sprachen, einschließlich Java, Python, Perl, Ruby und C #, sind Allzwecksprachen, die für das Web verwendet werden.
Artyom
1
Nun, wenn wir so spezifisch sein wollen, gibt es keine universellen Programmiersprachen. Es gibt nur prozedurale, strukturierte, objektorientierte, funktionale ... etc ...
Abs
5

@Joeri Sebrechts

FUD in Aktion:

PHP, Python usw. lassen sich leicht skalieren, indem Hardware auf das Problem geworfen wird.

Nun, eigentlich nein. Sie skalieren überhaupt nicht vertikal und horizontal sehr schlecht. Siehe: http://gwan.ch/en_scalability.html, wo erklärt wird, wie viel Ärger vor schlechten Leistungsträgern liegt.

Angenommen, die Entwicklung einer App in PHP kostet 1 Person 1 Jahr und die Ausführung in C 3 Jahre (da C mehr Aufwand erfordert, um dasselbe zu tun).

Wieder falsch. Wenn PHP-Bibliotheken in C geschrieben wurden, können sie direkt von C aus verwendet werden und bieten sofort die von PHP behauptete "einzigartige Produktivität".

Das bedeutet, dass der reduzierte Hardwarebedarf des C-Codes einen Lohn von 2 Jahren darstellen muss, damit C attraktiv wird. In der Praxis passiert das (fast) nie.

Pure FUD (siehe Antwort oben).

Der Umfang von Facebook ist so groß, dass die Hardware für die Pflege hoch genug ist. Aus diesem Grund haben sie HipHop entwickelt, das PHP zu C ++ kompiliert. Es bringt das Beste aus beiden Welten: die Einfachheit der Programmierung in PHP und die rohe Leistung von C ++. Facebook ist noch in PHP entwickelt, aber wenn Sie es verwenden, ist alles nativer Code.

HipHop ist viel schneller als PHP, daran bestehen keine Zweifel. Wenn Sie HipHop jedoch mit einer einfachen C-Implementierung vergleichen, haben Sie zwei Overhead-Ebenen:

  • die PHP-zu-C ++ - Schnittstellen (die die aufgeblähten C ++ - Bibliotheken verwenden);
  • das C ++ bläht sich auf (was C ++ 2-10 mal langsamer macht als normales C).

Außerdem wurde HipHop im ahnungslosen, ineffizienten akademischen Modus geschrieben (losgelöst von jeder realen Realität). Sicher, es kann PHP-Codierer beeindrucken, aber zeigen Sie diesen Code einem eingebetteten Programmierer, und Facebook wird ihm leid tun.

"Eine Sprache, die nicht alles hat, ist tatsächlich einfacher zu programmieren als manche" - Tennis M. Ritchie

Im Gegensatz zu (den meisten) Programmiersprachen END-USERS wusste Dennis anscheinend ein paar Dinge über die Sache.

Pierre
quelle
3
(1) Nimm Sachen nicht so persönlich, ich wollte dein Produkt nicht dissen, weil ich dein Produkt nicht einmal kannte. (2) Sie machen mit G-wan einen interessanten Proof of Concept, aber ich hoffe, Sie entschuldigen mich, wenn ich abwarte, bis ich echte Web-Apps sehe, die ihn verwenden, und nicht nur einige synthetische Benchmarks. (3) Sie haben die Beschwerde von Facebook über die horizontale Skalierung falsch charakterisiert, da das Problem in der Multi-Core-Leistung von Memcache und Datenbank liegt, dem Engpass bei realen Web-Apps, der von G-wan nicht gelöst werden kann. (4) HipHop begrüßt Ihre Code-Beiträge, da bin ich mir sicher.
Joeri Sebrechts
1
Sprechen Sie mit dem Produktivitätsproblem. Ich habe vor vielen Monden Web-Apps in C geschrieben, und zu der Zeit waren viel mehr Zeilen erforderlich, um dasselbe zu tun als bei PHP, während das Risiko von Abstürzen / Leckagen viel größer war. (Ich bin nur "durchschnittlich" bei solchen Fehlern, das heißt, ich schreibe sie ab und zu.) Ich stütze mein Urteil auf diese Erfahrung, bis ich echte Apps sehe, die etwas anderes demonstrieren (z. B. einen WordPress-Port für C das erfordert nicht viel mehr Codezeilen).
Joeri Sebrechts
Wie skaliert etwas "nicht vertikal"? Meinen Sie damit, dass es nicht von einer schnelleren Single-Core-Leistung und einer schnelleren Speicherleistung profitiert?
Rakslice
5

Es muss mehr Gründe geben, warum wir alle PHP, Python, Ruby usw. verwenden, abgesehen davon, dass es einfach ist, in diesen Sprachen zu entwickeln

Dies ist der gesamte Grund und der einzige, der benötigt wird. Es hat viele Vorteile, von denen der Hauptzeitpunkt die Markteinführung ist. Wenn Sie Ihre Web-App in einem Monat mit PHP anstatt mit C in zwei Monaten online stellen können, gewinnen Sie möglicherweise. Wenn Sie in einer Woche eine neue Funktion mit Ruby on Rails anstelle von zwei Wochen mit C hinzufügen können, gewinnen Sie erneut. Wenn Sie einen Fehler an einem Tag mit Python anstelle von zwei Tagen mit C beheben können, gewinnen Sie erneut. Wenn Sie eine Funktion hinzufügen können, weil Sie Sprache X verwenden, die Ihre Konkurrenten überhaupt nicht hinzufügen können weil sie Sprache Y verwenden und es in dieser Sprache aufgrund ihrer Ressourcenbeschränkungen zu schwierig ist, dann gewinnen Sie definitiv.

Und mit "gewinnen" meine ich wirklich, dass Sie nicht verlieren.Ihre Konkurrenten verwenden übergeordnete Sprachen und Frameworks, um ihre Websites zu entwickeln. Wenn Sie also C verwenden, konkurrieren Sie nicht mit anderen Personen, die C verwenden, sondern verlieren gegen andere Personen, die C nicht verwenden. Nur um zu konkurrieren, haben Sie Werkzeuge mit ähnlichen Abstraktionsebenen zu verwenden.

Wenn die Leistung zu einem Problem wird, können Sie die langsamen Teile Ihrer Website in leistungsstärkeren Sprachen umschreiben. Oder Sie können einfach mehr Hardware darauf werfen. Wirklich, ein Leistungsproblem ist das, was wir als "schönes Problem" bezeichnen - es bedeutet, dass Sie bereits erfolgreich waren. Es ist jedoch selten eine Option, mehr Zeit mit der Entwicklung der grundlegenden Funktionen Ihrer Website zu verbringen. Es in C zu schreiben, damit es schneller läuft, ist eine vorzeitige Optimierung, die, wie Knuth uns sagt, die Wurzel allen Übels ist.

All dies impliziert, dass Sie gegen Leute gewinnen können, die Python oder Ruby verwenden, wenn Sie eine Sprache mit einem höheren Abstraktionsgrad als Python oder Ruby verwenden können. Die Geschichte von Paul Graham, wie er und sein Team LISP als "Geheimwaffe" bei der Entwicklung von Websites eingesetzt haben, mag aufschlussreich sein. http://www.paulgraham.com/avg.html

Wenn Sie eine Website für Ihre eigene Unterhaltung entwickeln, tun Sie dies natürlich in einer beliebigen Sprache. Und wenn Ihre Site CPU-gebunden ist (kaum eine; normalerweise E / A-gebunden), verwenden Sie die Sprache mit der schnellsten Leistung, die Sie können. Wenn Sie jedoch versuchen, Innovationen zu entwickeln, verwenden Sie eine Hochsprache mit den besten Abstraktionen, die Sie finden können.

kindall
quelle
Sie vergessen, dass das Bit für die Auftragsabwicklung mit hohem Volumen über das Web in C geschrieben wurde. Beachten Sie die Hinweise unten auf paulgraham.com/avg.html .
Giles Roberts
4

Sie denken, einfach zu sein ist kein guter Grund. Ich denke es ist ein guter Grund. Wenn Sie ultimative Leistung benötigen, ist C in Ordnung, aber andere Sprachen abstrahieren das harte Zeug, um die Produktivität, Wartbarkeit und Fehler zu verbessern.

Craig
quelle
6
Um ultimative Leistung zu erzielen, benötigen Sie nicht nur C, sondern auch den ultimativen C-Programmierer. Und diese Leute wollen normalerweise viel mehr Geld als Java / P * -Programmierer.
el.pescado
4

Bedenken Sie, dass ich kein Webentwickler bin, aber diese Fragen trotzdem stellen und ein oder zwei Punkte anbieten werde.

Welche Website ist nur in einer Sprache geschrieben? Im Ernst, dieser Faden scheint anzunehmen, dass ein Hammer auf alle Nägel passt.

Wann hat das letzte Mal jemand ernsthaft erklärt, dass C komplex ist? Ich meine wirklich Leute, man kann nicht viel niedriger sein. Ich spreche hier nicht von C ++, da die beiden häufig gemeinsam referenziert werden.

C hat Sicherheitsbedenken, die nicht geleugnet werden können, aber sind sie weniger als das, was in den Kludges namens PHP & Perl zu sehen ist? In beiden Fällen ist eine sichere Website eine Funktion der Programmiererdisziplin.

Auf jeden Fall ab zu den Kommentaren. Die Schwierigkeit, eine bestimmte Sprache zu verwenden, hängt stark vom jeweiligen Problem ab. C & insbesondere C ++ kann zu schnellen Lösungen für ein Problem in erfahrenen Händen führen.

Industrielle Anwendungen für Webserver, dh eingebettete Server / Sites, haben einfach nicht die Sprachauswahl, die ein normaler Webserver haben könnte. Sie verwenden also eine Variante von C oder möglicherweise etwas wie BASIC. Ihr Ziel ist es, die für das Gerät erforderliche Funktionalität anzubieten und sich nicht um Sprachen zu kümmern. Auf einem Mainstream-Webserver ist dies meistens mit Hochsprachen möglich. Gehen Sie weg von großen Eisen und Ihre Programmierfreiheit geht aus der Tür.

Ohne die richtigen Bibliotheken wäre es in den meisten Fällen dumm, ein grundlegendes Webprojekt in C durchzuführen. Das Fehlen guter standardisierter Bibliotheken ist hier ein großer Nachteil.

David Frantz
quelle
3

Hier ist ein weiterer webbezogener Code, der in C geschrieben wurde und einen Blick wert ist, wenn Sie Ihre eigene C-Bibliothek für das Web erstellen:

  • cgic: eine ANSI C-Bibliothek für die CGI-Programmierung
  • cgit: ein Web-Frontend für Git-Repositories
  • wbox: HTTP-Testtool
  • wget html-parse.c
  • curl cookie.c
  • Discount, David Parsons 'C-Implementierung von John Grubers Markdown-Text in HTML-Sprache
  • Protothreads (insbesondere für eingebettete Systeme), http://www.sics.se/~adam/software.html
  • Protothread, Google-Code-Projekt von LarryRuane
  • uriparser sourceforge projekt
  • http-Parser, http-Anforderungs- / Antwort-Parser für c von Ryan Dahl auf github
  • Nginx
  • ...
ceeit
quelle
2

Nun, angesichts der Tatsache, dass es bei der Webentwicklung darum geht, nützliche Bibliotheken zu haben (wie sie von PHP verwendet werden), sehe ich nicht, wie C nicht nützlich wäre.

Immerhin ist die prozedurale Logik dieselbe: mache während, für, wenn dann sonst usw., ob dies C, PHP, .Net oder Perl ist.

Und eine C-Schleife oder ein Test ist nicht schwieriger zu schreiben, da er in C geschrieben ist.

Die meisten PHP-Bibliotheken werden in C erstellt, sodass das Argument der fehlenden C-Bibliotheken für das Web nicht so überzeugend aussieht.

Meine Vermutung ist , dass C nicht als Web - Programmiersprache , die von den Promotoren von Java (SUN) und .NET (Microsoft) beworben wurde , weil sie ihre eigene hatte proprietäre (stark patentiert) geistige Bereicherung für Push zur Annahme vorgelegt.

Als kostenloser (nicht patentierter) Standard bietet C Entwicklern keinen "Lock-in" -Griff ... daher möglicherweise die schwere Hand der Lobbyarbeit in Schulen und Universitäten, um sicherzustellen, dass Steuerzahlergelder die Einführung von a finanzieren minderwertige Technologie, die von privaten Interessen gestützt wird.

Wenn C für IBM und MICROSOFT gut genug ist (sie entwickeln ihre Produkte nicht in PHP oder .Net), aber für Endbenutzer nicht gut genug, fragen sich Endbenutzer möglicherweise, warum sie zu dieser Doppelmoral eingeladen sind.

Vince
quelle
1
Uhhhh Microsoft.com und Sharepoint befinden sich beide in ASP.NET. Ein Großteil von Visual Studio 2010 befindet sich in .NET (WPF). Diese Aussage ist offensichtlich falsch. Verwenden Sie die Sprache der höchsten Ebene, die Ihren Designanforderungen entspricht. Für das Web bedeutet dies C # / Python / etc und Komponenten in C / C ++ / etc, bei denen die Leistung zum Problem wird - obwohl dies fast nie der Fall ist.
3Dave
2

Ich würde C für eine Web-App verwenden, wenn:

  1. Ich habe ein kleines Budget für den Hosting-Server (kleines VPS) und meine Zeit ist nicht teuer.
  2. Ich arbeite für Facebook, Twitter oder jemanden, der die Anzahl der verwendeten Server reduzieren muss (mit Tausenden bis Millionen von Benutzern).
  3. Ich möchte C lernen und muss eine reale App finden, in der ich sie verwenden kann.
  4. Ich kenne C viel besser als andere Skriptsprachen.
  5. Ich bin ein Öko-Typ und möchte den CO2-Fußabdruck meiner App reduzieren.

G-WAN führt Code als Skripte aus, ja C-Skripte wie Play! Framework funktioniert für Java. G-WAN ist sehr schnell und verfügt über eine einfache API. G-WAN ermöglicht die Verwendung von C / C ++ für Webanwendungen, wenn andere Server dies nicht getan haben.

Eines ist klar: Sie brauchen einen guten Programmierer, um eine Website in C zu schreiben. Jeder beschissene Entwickler kann eine Website mit Spaghetti PHP erstellen :-) Es gibt Lecksucher und sogar Müllsammler für C.

Rtacconi
quelle
2

Alle von Ihnen erwähnten Sprachen sind tatsächlich in C / ++ geschrieben. Der einzige Unterschied besteht in den erweiterten Klassen und Bibliotheken, die aus C erstellt wurden und die heutigen anderen Interpretersprachen bilden. Aus diesem Grund werden sie auch als Skriptsprachen bezeichnet.

Stellen Sie sich vor, Sie backen einen Kuchen (PHP / JS):

  • 2 Eier, 1 Tasse Milch, 2 Stück Butter, 4 Tassen Mehl, 1 Tasse Zucker, Backpulver

Aber stellen Sie sich vor, Sie müssten alles machen, woraus diese Dinge bestehen. (C / ++)

  • 17 mg Natriumbicarbonat, 15 EL Protein, 12 EL Vitellinmembran, Aminosäure, Schwefel, ... Neutronenpartikel

C ist das Fundament vieler moderner Sprachen. Es ist großartig und fast die mächtigste Sprache im Aufbau. Sie können es tun, Sie müssen nur in die Erstellung des gesamten Codes investieren, den diese anderen Sprachen bereits erstellt haben. Als würde man einen Kuchen aus dem Periodensystem bauen.

Lerne es, du kannst es buchstäblich dazu bringen, alles zu tun!

GetBackerZ
quelle
1

Die Handhabung von Zeichenfolgen in C kann vereinfacht werden, indem:

Datentypen (Teil von libslack)

Libslack bietet einen generischen Growable-Pointer-Array-Datentyp namens List, einen generischen Growable-Hash-Tabellendatentyp namens Map und einen anständigen String-Datentyp mit vielen Funktionen (viele davon aus Perl). Es gibt auch abstrakte, einfach und doppelt verknüpfte Listendatentypen mit optionalen "erweiterbaren" Freelisten.

oder:

Verwaltete String-Bibliothek (für C)

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

ceeit
quelle
1

"domachine" schrieb:

Plattformabhängigkeit: C muss in nativen Code kompiliert werden. Dieser Code läuft nicht auf allen Plattformen. Interpretierte Sprachen (wie PHP) werden überall dort ausgeführt, wo ein Interpreter vorhanden ist. Natürlich könnte dieses Problem gelöst werden, aber Sie sehen den Vorteil der Entwicklung in PHP in diesem speziellen Fall.

Haben Sie sich jemals gefragt, in welcher Sprache der tragbare PHP-Interpreter geschrieben ist?

In ANSI C.

Bevor Sie die Portabilität von ANSI C wieder schließen, fragen Sie sich, in welcher Sprache Ihre bevorzugte Programmiersprache geschrieben wurde ... (Tipp: Fast alle wurden in C / C ++ geschrieben).

ANSI C-Compiler sind auf allen Plattformen verfügbar, auf denen ich arbeiten musste - und das gilt nicht für PHP und seine gigantische Laufzeit.

Soviel zum Portabilitätsargument .

CClue
quelle
2
Nun, PHP ist NICHT meine Lieblingssprache. Ich habe noch nichts in PHP codiert. Ich bin ein C- und C ++ - Programmierer. Ich habe die Portabilität von C nie verworfen! Das einzige, was ich erwähnte, war die Leichtigkeit, PHP-Skripte auf einen vorhandenen WebSpace anzuwenden. Zeigen Sie mir den Fall, in dem Sie einen Low-Budget-WebSpace erhalten können, in dem Sie einen Compiler haben. Vielleicht irre ich mich, aber ich denke, Sie sind einer dieser fanatischen Programmierer, die eine Sprache lieben, aber die Vorteile anderer, vielleicht passenderer Sprachen nicht sehen. Ich liebe C und C ++, aber ich kann über den Tellerrand hinaus denken.
Domachine
0

Ähnlich wie G-WAN, jedoch für Cocoa / Objective-C ist Bombax ein Webanwendungsframework.

http://www.bombaxtic.com

Apropos Objective-C Ich kann nicht widerstehen, auf MacRuby hinzuweisen, das das Potenzial hat, die Art und Weise zu revolutionieren, wie wir eines Tages Web-Apps erstellen werden.

gregg
quelle
Nun, MacRuby ist jetzt tot.
Banjocat
0

Ein weiterer Punkt könnte die Plattformabhängigkeit sein. C muss in nativen Code kompiliert werden. Dieser Code läuft nicht auf allen Plattformen.

Interpretierte Sprachen werden überall dort ausgeführt, wo ein Dolmetscher vorhanden ist. Viele Anbieter bieten beispielsweise PHP-Interpreter an, die auf ihren Servern installiert sind, jedoch ein Windows-Betriebssystem haben. Wenn Sie jetzt auf einem Linux-Computer entwickeln. Du hast ein Problem.

Natürlich könnte dieses Problem gelöst werden, aber Sie sehen den Vorteil der Entwicklung in PHP in diesem speziellen Fall.

Hoffe das hilft, Grüße Domachine

Domachine
quelle
0

PHP, Python usw. lassen sich leicht skalieren, indem Hardware auf das Problem geworfen wird.

Angenommen, die Entwicklung einer App in PHP kostet 1 Person 1 Jahr und die Ausführung in C 3 Jahre (da C mehr Aufwand erfordert, um dasselbe zu tun). Das bedeutet, dass der reduzierte Hardwarebedarf des C-Codes einen Lohn von 2 Jahren darstellen muss, damit C attraktiv wird. In der Praxis passiert das (fast) nie.

Wie bei jeder Regel gibt es eine Ausnahme. Der Umfang von Facebook ist so groß, dass die Hardware für die Pflege hoch genug ist. Aus diesem Grund haben sie HipHop entwickelt , das PHP zu C ++ kompiliert. Es bringt das Beste aus beiden Welten: die Einfachheit der Programmierung in PHP und die rohe Leistung von C ++. Facebook ist noch in PHP entwickelt, aber wenn Sie es verwenden, ist alles nativer Code.

Joeri Sebrechts
quelle
0

Am Ende können Sie absolut jede Sprache verwenden, um Websites zu entwickeln, einschließlich Assembler (über CGI usw.). Wenn Sie gemeint haben, warum wir keine kompilierte Sprache verwenden, haben wir bereits .NET, Java und andere.

Andrei Rînea
quelle
0

Sie müssen lieben, was Sie tun, um Ergebnisse zu erzielen. Sprachen wie Java und PHP wurden mit viel Aufwand erstellt, um das Leben der Menschen zu erleichtern. PHP hat heute vor allem vielen selbstgelernten Webprogrammierern geholfen. Sie können sehen, welche Unterstützung es in der Welt der Webentwicklung hat.

Java wurde mit Sicherheit geschrieben, um Ihnen bei allem zu helfen, was in der heutigen Welt möglich ist. Das riesige Buch ist ein klarer Hinweis, und es ist ein Biest, wenn Sie sich auch für die Webentwicklung abzeichnen. Gleiches gilt für Python. Dies sind so fantastische Sprachen und Plattformen. Kein Wunder, dass sie sehr beliebt sind.

Ich bin ein C-Anhänger und teilweise liegt es an bestimmten Einschränkungen, die mich daran hinderten, andere Sprachen wie PHP zu betrachten. Ich schreibe täglich in C und jeden Tag bin ich stolz darauf, etwas Neues zu lernen. Dadurch fühle ich mich sehr gut und habe auch gelernt, wie C die Standardauswahl beim Schreiben von Anwendungen für Websites über Cgi war. Dies wird auf anderen Plattformen abstrahiert. Wenn Sie Websites entwickeln, die mit Datenbanken und Webdiensten zu tun haben, müssen Sie wissen, was hinter den Kulissen passiert.

Wenn Sie dies alles wissen und dennoch eine Skriptsprache verwenden möchten, muss es einen gültigen Grund geben, und wir brauchen niemanden, der davon abrät.

Viz
quelle