Pourquoi n'utilisez-vous pas C pour vos applications Web?


101

J'étais en train de jeter un œil à quelques serveurs Web différents ce matin quand je suis tombé sur G-WAN . Si je comprends bien, c'est un serveur Web écrit en C et vous devez l'utiliser en écrivant vos sites Web / applications Web en C. Un avantage évident est la vitesse, comme le suggère le site G-WAN.

Cependant, sur les forums, le créateur de G-WAN a demandé pourquoi ne pas utiliser C pour les applications basées sur le Web et je ne peux pas penser à une seule raison en dehors de la difficulté (pour moi en tout cas, je suis novice en matière de C). Il doit y avoir plus de raisons pour lesquelles nous utilisons tous PHP, Python, Ruby, etc. en plus d'être facile à développer dans ces langages. Je ne vois pas cela comme une bonne raison.

Alors je vous le dis: pourquoi n'utilisez-vous pas C pour vos applications Web?


34
Pourquoi utilisons-nous des cuisinières et ne cuisinons pas nos repas directement au feu? Pourquoi utilisons-nous des voitures alors que marcher ou utiliser le vélo est beaucoup plus sain? Why ... I could go on ...
Felix Kling

16
@Felix - comme je l'ai dit, nommez d'autres raisons en dehors de la difficulté. Ce qui implique que je suis conscient que d'autres langues existent à difficulté abstraite.
Abs

15
Jamais vraiment considéré C difficile.
3Dave

10
@David Lively Si vous n'avez pas réussi à mettre le «c» en difficulté exprès, c'est vraiment assez drôle. Bien joué :)
punkrockbuddyholly

11
@MrMisterMan n'a mis que quatre mois à quelqu'un pour le repérer. =)
3Dave

Réponses:


79

Il faut beaucoup de soin pour obtenir un programme C correct et sécurisé. Cette attention signifie que vous devez avoir de très bonnes personnes pour rédiger vos programmes. Cela signifie que vous payez plus.

De plus, C n'a pas l'avantage de tirer parti d'une énorme bibliothèque standard unique de fonctionnalités comme .NET (et les autres grandes plates-formes centrées sur le Web). Vous devrez peut-être soit acheter des composants, soit effectuer une interopérabilité, soit déployer votre propre fonctionnalité qui vient "gratuitement" avec un langage plus, dirons-nous "centré sur le Web" comme PHP ou C # ou Ruby ou autre. Cela signifie que vous payez plus.

Ajoutez tout cela au fait que la vitesse de calcul à un seul thread n'est tout simplement pas si importante sur le Web. Si vous avez besoin de plus d'évolutivité, la plupart des organisations peuvent simplement lancer plus de cœurs sur le problème et s'en sortir. Ce n'est pas vrai pour tout le monde, bien sûr. J'imagine que le cœur du moteur de Google est écrit en C ou dans un langage similaire non seulement pour la vitesse, mais pour économiser de l'argent réel sur les coûts d'énergie.


48
Wow, un argument pour .NET contre C à cause des bibliothèques ? Bien sûr, le stdlib est plus petit, mais nous avons des décennies de bibliothèques (beaucoup open-source) en C. J'ai du mal à penser à quoi que ce soit dans le .NET stdlib pour lequel il n'y a pas de bibliothèque C mature et gratuite.
Ken

3
Je ne pense pas qu'il défendait spécifiquement .NET, je pense qu'il voulait simplement dire qu'il existe des langages qui ont beaucoup de bibliothèques cohérentes. Je suis sûr que C a beaucoup de choses, mais pour être honnête, je n'ai rencontré aucune sorte de dépôt qui les rassemble tous en un seul endroit ou les conditionne.
Abs

16
La manipulation de @Ken String est une tâche très courante dans les applications Web. Les bibliothèques C existent pour cela, mais elles ne sont pas aussi nombreuses ou utilisables que les bibliothèques dans [choisissez un langage de haut niveau].
Andres Jaan Tack

23
@Ken: Il y a un univers de différence lorsque vous avez un seul ensemble de fonctionnalités bien pris en charge par rapport à une pléthore de petites bibliothèques qui diffèrent largement en termes d'ensemble de fonctionnalités, de licences et de support.
Dave Markle

49

Fredonner...

Il semble que je sois un peu en retard dans cette discussion - mais je viens de le découvrir maintenant. Et je vous suis reconnaissant à tous pour votre contribution.

Je suis l'auteur de G-WAN, ce qui montre clairement que j'ai sérieusement travaillé sur le sujet: G-WAN est à la fois plus rapide que tous les autres serveurs Web (aucun traitement) et tous les autres serveurs d'applications Web (tout traitement que vous pouvez imaginer).

Oui, ANSI C a également permis de traiter plus de contenu statique - avec des processeurs moins puissants (ANSI C ne consiste pas seulement à faire voler des contenus dynamiques).

En passant, G-WAN utilise des scripts C (aucun compilateur C ni éditeur de liens n'est nécessaire), de sorte que le cycle / délai de compilation / liaison n'existe pas.

En train de comparer G-WAN à .NET Java et PHP, j'ai écrit des applications similaires dans les 4 langues: http://gwan.ch/source/

Et, à ma grande consternation, les langages de script modernes n'étaient pas plus faciles à utiliser.

Une partie du travail qui est particulièrement frustrante est de rechercher désespérément l'appel d'API «magique» qui fera ce que vous voulez faire.

Réfléchissez à la façon de faire de jolis milliers de:

C #

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

Java

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

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

Le "..." signifie qu'une pré-configuration, ou un post-traitement, est nécessaire. ANSI C est clairement plus facile à utiliser et à retenir.

Lorsque PHP a plus de 5900 appels d'API (C # et Java non loin), trouver le bon appel d'API est un défi en soi. Le temps perdu pour trouver cela (et ensuite pour trouver à quel point l' appel API natif est mis en œuvre), le temps de l'apprendre par cœur pour la prochaine fois que vous en aurez besoin, tout ce temps vous prive du temps nécessaire pour résoudre votre application problèmes.

J'ai lu (ci-dessus) que PHP est plus concis que ANSI C? Pourquoi alors utiliser "//:: this is a comment ::"plutôt que "// this is a comment"? Pourquoi avoir une syntaxe si stupidement complexe de «jolis milliers»?

L'autre argument habituel est que Java et autres fournissent des appels dédiés pour les applications Web.

Je n'ai rien trouvé pour échapper au HTML en Java, alors j'en ai écrit ma version:

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

Pensez-vous vraiment que le même code en ANSI C serait plus complexe? Non, ce serait à la fois immensément plus simple et plus rapide.

Java (dérivé de C) oblige les programmeurs à lier des chaînes multilignes avec un '+'
C # (dérivé de C) oblige les programmeurs à lier des chaînes multilignes avec un '+'
PHP (dérivé de C) oblige les programmeurs à liez les chaînes multilignes avec un '.'

ANSI C n'a pas cette exigence maintenant complètement stupide (obsolète).

Alors, est-ce que le progrès si évident est revendiqué par les langues modernes? Je le cherche toujours.

Cordialement,

Pierre.


10
Je ne comprends pas tout à fait votre commentaire sur le traitement supplémentaire de quelques milliers; pour C # que vous avez laissé , amount), PHP est correct tel quel, et votre exemple ANSI C a besoin de deux arguments supplémentaires (tampon et longueur de tampon). À l'exception notable de Java, votre exemple semble prouver le contraire. De plus, je n'ai jamais vu cette //:: comment ::syntaxe auparavant; PHP n'en a certainement pas besoin.
icktoofay

1
Pour être honnête avec vous, toutes les autres options sont bien plus belles que ANSI C, qui "est clairement plus facile à utiliser et à retenir" [sic].
Jarrod Mosen

Comment G-WAN se compare-t-il à NGINX si les deux ont été écrits en C?
m4l490n le

47

La même raison pour laquelle nous n'utilisons pas C pour la plupart des programmes. Les avantages (qui sont principalement les performances) ne l'emportent pas sur les coûts (temps de développement, manque de gestion automatique de la mémoire, manque de protection automatique contre les débordements de tampon, avoir une étape de compilation entre les étapes d'édition et de test, etc.).


10
Je tapais la même chose et tu m'as battu. Je veux juste ajouter que la protection des sites Web contre les comportements malveillants est un défi suffisant en l'état, nous n'avons pas besoin d'ajouter des vecteurs d'attaque potentiels provenant d'une mauvaise utilisation de la gestion de la mémoire, des pointeurs, etc.
Rob Allen

@Jordan: J'ai l'impression que vous n'avez pas fait de programmation Web en C. Ce que vous dites ne correspond pas au modèle de la façon dont la programmation Web est effectuée.

2
Bien sûr, en supposant que votre site Web ait une place pour l'interaction de l'utilisateur, que ce soit par URL ou par saisie de formulaire. Une fois que ces données sont transmises au serveur, c'est au programmeur de s'assurer d'allouer correctement la mémoire. G-WAN a une certaine abstraction autour des paramètres de requête, mais cela ne vous sauvera pas complètement. Je ne dis pas que correctement fait, la programmation Web C ne peut pas être sécurisée et rapide, mais elle est plus sujette à des erreurs plus graves.
Jordan

3
soupir @Kinopiko: Si vous ne savez pas ce qu'est un débordement de tampon, vous ne devriez pas coder en C. 'dit nuff. Pour plus d'informations: securecoding.cert.org/confluence/display/seccode/…
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

29

La plupart des applications réseau, en particulier les serveurs Web, sont beaucoup plus «liées aux E / S» - c'est-à-dire qu'elles sont capables de pomper des données beaucoup plus rapidement que le réseau ne peut les accepter. Par conséquent, quelque chose qui est très efficace pour le processeur n'est pas une énorme victoire, alors que quelque chose qui est évolutif et maintenable l'est. Il n'y a donc aucune raison d'accepter les inconvénients de C et de perdre les avantages d'un environnement géré comme Java, .NET, Python, Perl ou d'autres langages.


1
C est des tonnes plus rapide cependant.

14
Si je peux remplir le canal réseau avec Java ou Perl (et je le peux), le fait que C soit plus rapide n'a pas d'importance.
Paul Tomblin

1
@Kinopiko, dites-vous que vous avez un plus gros canal, plus de visites de pages et plus de données à expédier qu'eBay (Java), Stack Overflow (C # / .NET), Google ou l'un des millions de sites Web très utilisés écrits dans des langages de niveau supérieur ?
Paul Tomblin

1
@Paul Tomblin: Le but d'une application web n'est pas de remplir le canal réseau mais de faire des traitements. Si vous ne devez diffuser que du texte et des images, vous devez utiliser des pages HTML statiques, qui offrent des performances supérieures. Dans la plupart des cas, les pages statiques sont servies à partir du cache, votre serveur n'a donc rien à faire. OTOH, lorsqu'un traitement est nécessaire, cela peut bien être le goulot d'étranglement (bien que le plus souvent le disque soit le goulot d'étranglement).
PauliL

4
Vous devez vous rappeler que les applications Web ne sont qu'une fraction d'une «pile de serveurs» qui gère les demandes des utilisateurs et ne constituent pas une partie essentielle aux performances. Il y a d'autres parties - noyau du système d'exploitation (généralement écrit en C), système de fichiers (C), serveur Web (généralement C), interpréteur de langage (C), base de données (généralement C ou C ++). Les applications Web ne transmettent généralement que les données d'une partie à une autre, en y appliquant certaines opérations de base, et ses performances ne sont pas du tout cruciales.
el.pescado

15

C n'est pas un langage pratique pour manipuler des chaînes.

Comparez C #:

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

Correspondant 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 ne gère pas non plus correctement Unicode, mais est un langage orienté Web très populaire.
el.pescado

12
Nous devrions donc utiliser C ++, car il obtient à peu près les mêmes performances que C, mais compile votre exemple C # comme un charme?
tstenner

2
En ce qui concerne la manipulation de chaînes - les applications Web ne produisent généralement que des chaînes, les C printfdevraient donc faire le travail.
el.pescado

5
C gère très bien le multi-octet et l'unicode via les fonctions de la bibliothèque d'exécution. L'utilisation des fonctions sûres comme strncpy et ainsi de suite le rend également assez sûr.
justinhj

2
Ou vous pouvez utiliser asprintf (& foobar, "% s% s", foo, bar);
Patrick Lorio

11

Si la difficulté et la complexité n'étaient pas du tout un problème (ha!), Alors je ne m'arrêterais pas à C. J'écrirais l'assemblage x86. Cela fait des années que j'utilise un serveur Web qui n'est pas x86, et cela semble de moins en moins probable chaque jour.

Utiliser C (au lieu de l'assemblage, ou quelque chose de plus haut niveau), c'est suggérer que C est le point idéal de l'efficacité du programmeur et de l'efficacité informatique.

Pour les programmes que j'écris, ce n'est pas le cas: C est une mauvaise correspondance avec les types de programmes que je veux écrire, et les avantages de celui-ci par rapport à un assembleur de macro décent ne sont tout simplement pas si significatifs. Le programme que j'écris en ce moment n'est pas difficile dans mon HLL de choix, mais la complexité de celui-ci dans l'assemblage ou en C serait si élevée qu'il ne serait jamais terminé. Je reconnais qu'un programmeur suffisamment intelligent avec suffisamment de temps pourrait le faire fonctionner plus rapidement en assemblage ou en C, mais je ne suis pas ce programmeur.


7
  • ce n'est pas sûr
  • c'est difficile à lire
  • il est difficile à maintenir, le temps de développement est plus lent de l'ordre d'une grandeur
  • la plupart de vos données Web sont probablement liées aux E / S, donc l'accélération n'a même pas d'importance, surtout lorsque vous utilisez un langage rapide comme Java ou C #

2
que signifie «langage rapide comme Java ou C #»?
RobS

3
@Kinopiko: quelles sont les faiblesses des langages dynamiques? Quand un programmeur noob dit explicitement qu'il veut exécuter du code arbitraire via evalet php include? S'il vous plaît, en C / C ++, vous n'indiquez pas que vous voulez exécuter du code arbitraire, c'est juste le cas. evaln'est pas un bug, c'est l'intention du programmeur. En C / C ++, tout bogue peut conduire à l'exécution de code à distance, dans les langages dynamiques, ce n'est pas le cas à moins qu'un imbécile ne joue avec eval.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

1
«et aussi rapide ou plus rapide que C / C ++ selon ce que vous faites» peut-être, mais vous avez toujours affaire à un environnement de mémoire gérée avec Java et C #, ce qui peut devenir un inconvénient dans les scénarios à fort trafic.
RobS

5
"et C n'a certainement pas autant de faiblesses en matière de sécurité que n'importe quel langage dynamique." Cela , mon ami, est complètement absurde. Pourquoi ce commentaire a-t-il 3 votes positifs?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

2
@Kinopiko: En fait, vous ne pouvez l'expliquer nulle part. Il n'y a aucune explication à cela. C a un problème beaucoup plus important que n'importe quel langage dynamique. La pire chose qui puisse arriver dans un langage dynamique est "attribut introuvable, whoop dee doo".
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

7

Je sais que cette question a déjà été résolue à mort, mais il y a 2 choses non mentionnées jusqu'à présent qui sont extrêmement importantes pour réussir dans tout paradigme de programmation, et en particulier dans le développement Web où vous obtenez beaucoup de gens qui ne sont pas nécessairement des programmeurs, travailler avec le code.

  1. Communauté impliquée et utile, alias les personnes qui ont déjà résolu mon problème. Il est assez facile pour le plus noble des noobs à Google de savoir pourquoi ils obtiennent des erreurs "en-têtes déjà envoyés" en PHP, alors que ces informations peuvent ne pas être disponibles pour un framework ou un langage nouveau sur la scène, ou qui n'ont pas masse critique.
  2. Frameworks, afin que la plupart des programmeurs puissent résoudre des problèmes commerciaux et ne pas pirater du code ensemble.

Si j'avais une application critique qui nécessitait des performances extrêmes, j'utiliserais C, mais cela prendrait tellement plus de temps à écrire que je ne parviendrais jamais sur le marché. Jusqu'à ce qu'il y ait le n ° 1 ou le n ° 2, je ne peux pas l'utiliser.


6

C est un langage de bas niveau pour de nombreuses raisons: pas de POO, beaucoup de gestion manuelle des ressources.

L'utilisation de C pour le Web est limitée, par exemple Klone . Il est principalement utilisé pour les cas d'applications embarquées à faibles ressources.

Cependant, il existe des frameworks Web C ++ comme CppCMS qui sont utilisés pour le développement d'applications Web haute performance.

C ++ vous permet de profiter d'une abstraction élevée et d'un accès précis à ce que vous faites exactement, ce qui vous offre une bien meilleure option pour le déploiement et le développement de grandes applications.

Mais vous les utilisez dans le cas où les performances et l'utilisation des ressources sont beaucoup plus critiques que les délais de mise sur le marché et les coûts de développement, car le développement Web est généralement plus rapide en utilisant de bons frameworks Web pour des langages tels que Java, Python ou PHP. Il y a aussi généralement des programmeurs moins compétents pour les langages C ++ que Java / P * pour le même salaire.

C'est donc une question de priorités, il y a aussi moins d'outils pour le développement Web C ++ que pour PHP / Python / Perl ou Java.


2
Intéressant, je ne connaissais pas CppCMS, un framework Web de bas niveau écrit en C ++. Peut-être le meilleur des deux mondes, entre C et les langages Web.
Abs

C'est maintenant un framework de bas niveau, c'est un framework web MVC qui est très RAPIDE.
Artyom

Désolé, je me réfère simplement à tout ce qui n'est pas un langage Web comme de bas niveau. Je comprends bien que ce soit un cadre Web MVC.
Abs

Il n'existe pas de "langage Web", seul PHP peut probablement être appelé web one. Tous les autres langages, y compris Java, Python, Perl, Ruby et C # sont des langages à usage général qui sont utilisés pour le Web.
Artyom

1
Eh bien, si nous voulons être précis comme ça, il n'y a pas de langages de programmation à usage général. Il n'y a que procédural, structuré, orienté objet, fonctionnel ... etc ...
Abs

5

@Joeri Sebrechts

FUD en action:

PHP, Python et ainsi de suite sont faciles à mettre à l'échelle en lançant du matériel sur le problème.

Eh bien, en fait non. Ils ne sont pas du tout mis à l'échelle verticalement et très mal mis à l'échelle horizontalement. Voir: http://gwan.ch/en_scalability.html où il est expliqué à quel point les problèmes attendent les mauvais.

Supposons que cela coûte 1 personne 1 an d'efforts pour développer une application en PHP, et que cela leur coûte 3 ans pour le faire en C (car C nécessite plus d'efforts pour faire la même chose).

Encore faux. Si les bibliothèques PHP ont été écrites en C, elles sont directement utilisables à partir de C - fournissant instantanément la «productivité unique» que vous prétendez que PHP possède.

Cela signifie que le besoin matériel réduit du code C doit représenter 2 ans de salaire pour que C devienne attractif. En pratique, cela n'arrive (presque) jamais.

Pure FUD (voir la réponse ci-dessus).

L'échelle de Facebook est si grande que le matériel coûte assez cher pour s'en occuper. C'est pourquoi ils ont développé HipHop, qui compile PHP en C ++. Il apporte le meilleur des deux mondes: la simplicité de la programmation en PHP et les performances brutes du C ++. Facebook est toujours développé en PHP, mais lorsque vous l'utilisez, tout est du code natif.

HipHop est beaucoup plus rapide que PHP, aucun doute là-dessus. Mais si vous comparez HipHop avec une implémentation plain-C, vous avez deux couches de surcharge:

  • les interfaces PHP vers C ++ (qui utilisent les bibliothèques C ++ gonflées);
  • le gonflement du C ++ lui-même (ce qui rend le C ++ 2 à 10 fois plus lent que le C pur).

De plus, HipHop a été écrit dans le mode académique inefficace et désemparé (détaché de toute réalité du monde réel). Bien sûr, cela peut impressionner les codeurs PHP mais montrer ce code à un programmeur intégré et il se sentira désolé pour Facebook.

"Un langage qui n'a pas tout est en fait plus facile à programmer que d'autres" --Dennis M. Ritchie

Contrairement à la plupart des utilisateurs finaux du langage de programmation, Dennis savait quelques choses à ce sujet, semble-t-il.


3
(1) Ne prenez pas les choses si personnellement, je n'étais pas là pour dissiper votre produit parce que je ne connaissais même pas votre produit. (2) Vous faites une preuve de concept intéressante avec G-wan, mais j'espère que vous m'excuserez si je prends une approche attentiste jusqu'à ce que je vois des applications Web du monde réel l'utiliser, et pas seulement quelques repères synthétiques. (3) Vous avez mal interprété la plainte de Facebook concernant la mise à l'échelle horizontale, car leur problème concerne les performances multicœurs de Memcache et de base de données, le goulot d'étranglement des applications Web du monde réel, ce que G-wan n'aide pas à résoudre. (4) HipHop accueille vos contributions de code, j'en suis sûr.
Joeri Sebrechts

1
Parlant du problème de la productivité. J'ai écrit des applications Web en C avant, il y a de nombreuses lunes, et à l'époque, il fallait beaucoup plus de lignes pour faire la même chose que PHP, tout en ayant un risque beaucoup plus grand de plantages / fuites de bogues. (Je suis juste "moyen" pour ce genre de bugs, c'est-à-dire que je les écris de temps en temps.) Je base mon jugement sur cette expérience jusqu'à ce que je vois de vraies applications qui démontrent le contraire (par exemple un port wordpress vers C qui ne nécessite pas beaucoup plus de lignes de code).
Joeri Sebrechts

Comment quelque chose "ne se met-il pas à l'échelle verticalement"? Voulez-vous dire qu'il ne bénéficie pas de performances monocœur plus rapides et de performances mémoire plus rapides?
rakslice

5

Il doit y avoir plus de raisons pour lesquelles nous utilisons tous PHP, Python, Ruby, etc. en plus d'être facile à développer dans ces langages

C'est la raison entière et la seule nécessaire. Il présente de nombreux avantages, dont le principal est le délai de mise sur le marché. Si vous pouvez mettre votre application Web en ligne en un mois en utilisant PHP au lieu de deux mois en C, vous pourriez bien gagner. Si vous pouvez ajouter une nouvelle fonctionnalité en une semaine en utilisant Ruby on Rails au lieu de deux semaines en utilisant C, vous gagnez à nouveau. Si vous pouvez corriger un bogue en une journée en utilisant Python au lieu de deux jours en C, vous gagnez une fois de plus. Si vous pouvez ajouter une fonctionnalité parce que vous utilisez la langue X que vos concurrents ne peuvent pas du tout ajouter parce qu'ils utilisent la langue Y et que c'est trop difficile dans cette langue compte tenu de leurs contraintes de ressources, alors vous gagnez définitivement.

Et par «gagner», je veux vraiment dire que vous ne perdez pas. Vos concurrents utilisent des langages et des frameworks de haut niveau pour développer leurs sites, donc si vous utilisez C, vous n'êtes pas en concurrence avec d'autres personnes qui utilisent C, vous perdez contre d'autres personnes qui n'utilisent pas C. Juste pour rivaliser, vous avez d'utiliser des outils avec des niveaux d'abstraction similaires.

Si les performances deviennent un problème, vous pouvez réécrire les parties lentes de votre site dans des langues plus performantes. Ou vous pouvez simplement y ajouter plus de matériel. Vraiment, un problème de performance est ce que nous appelons un «problème intéressant» - cela signifie que vous avez déjà réussi. Mais passer plus de temps à développer les fonctionnalités de base de votre site est rarement une option. L'écrire en C juste pour qu'il s'exécute plus vite est une optimisation prématurée qui, comme Knuth nous le dit, est la racine de tout mal.

Tout cela implique que si vous pouvez utiliser un langage avec un niveau d'abstraction plus élevé que Python ou Ruby, vous pourriez gagner contre des personnes utilisant Python ou Ruby. L'histoire de Paul Graham sur la façon dont lui et son équipe ont utilisé LISP comme «arme secrète» dans le développement de sites Web peut être instructive. http://www.paulgraham.com/avg.html

Bien sûr, si vous développez un site pour votre propre amusement, faites-le dans la langue de votre choix. Et si votre site est lié au processeur (il n'y en a pratiquement pas; ils sont généralement liés aux E / S), utilisez le langage le plus performant possible. Si vous essayez d'innover, utilisez un langage de haut niveau avec les meilleures abstractions que vous puissiez trouver.


Vous oubliez que le bit de traitement des commandes à volume élevé de via web a été écrit en C. Voir les notes en bas de paulgraham.com/avg.html .
Giles Roberts

4

Vous pensez qu'être facile n'est pas une bonne raison. Je pense que c'est une bonne raison. Si vous avez besoin de performances ultimes, C est correct, mais d'autres langages résument les choses difficiles pour améliorer la productivité, la maintenabilité et réduire les défauts.


6
Pour obtenir des performances optimales, vous avez besoin non seulement de C, mais également d'un programmeur C ultime. Et ces types veulent généralement beaucoup plus d'argent que les programmeurs Java / P *.
el.pescado

4

Considérez que je ne suis pas un développeur Web mais que je poserai ces questions de toute façon et offrirai un point ou deux.

Quel site Web n'est rédigé que dans une seule langue? Sérieusement, ce fil semble supposer qu'un marteau convient à tous les clous.

À quand remonte la dernière fois que quelqu'un a déclaré sérieusement que C était complexe? Je veux dire vraiment les gars, vous ne pouvez pas obtenir un niveau beaucoup plus bas. Je ne parle pas de C ++ ici car les deux sont souvent référencés collectivement.

C a des problèmes de sécurité, qui ne peuvent être niés, mais sont-ils inférieurs à ce que l'on voit dans les kludges appelés PHP & Perl? Dans les deux cas, un site Web sécurisé est une fonction de la discipline du programmeur.

Dans tous les cas, off aux commentaires. La difficulté d'utiliser un langage donné est très dépendante du problème à résoudre. C & surtout C ++ peut conduire à des solutions rapides à un problème entre des mains expérimentées.

Les utilisations industrielles des serveurs Web, c'est-à-dire que les serveurs / sites intégrés n'ont tout simplement pas les choix de langue qu'un serveur Web normal pourrait avoir. Vous finissez donc par utiliser une variante de C ou peut-être quelque chose comme BASIC. Votre objectif est d'offrir les fonctionnalités dont l'appareil a besoin et de ne pas vous soucier des langues. Sur un serveur Web grand public, la manière de le faire est d'utiliser des langages de haut niveau la plupart du temps. Éloignez-vous du gros fer et votre liberté de programmation disparaîtra.

Sans les bonnes bibliothèques, il serait insensé dans la plupart des cas de faire un projet Web de base en C. Le manque de bonnes bibliothèques standardisées est un gros inconvénient ici.


3

Voici encore plus de code lié au Web écrit en C qui vaut la peine d'être examiné lors de la création de votre propre bibliothèque C pour le Web:

  • cgic: une bibliothèque ANSI C pour la programmation CGI
  • cgit: une interface web pour les dépôts git
  • wbox: outil de test HTTP
  • wget html-parse.c
  • cookie curl.c
  • Discount, l'implémentation C de David Parsons du texte Markdown de John Gruber en langage html
  • Protothreads (en particulier pour les systèmes embarqués), http://www.sics.se/~adam/software.html
  • protothread, projet de code Google par LarryRuane
  • projet sourceforge uriparser
  • http-parser, analyseur de requête / réponse http pour c par Ryan Dahl sur github
  • nginx
  • ...

2

Eh bien, étant donné que le développement Web consiste à avoir des bibliothèques utiles (du type utilisé par PHP), je ne vois pas en quoi C ne serait pas utile.

Après tout, la logique procédurale est la même: faire while, for, if then else, etc. que ce soit C, PHP, .Net ou Perl.

Et une boucle ou un test C n'est pas plus difficile à écrire car il est écrit en C.

La plupart des bibliothèques PHP sont faites en C, donc l'argument C-bibliothèques-pour-le-Web manquant ne semble pas très convaincant.

Je suppose que C n'a pas été annoncé comme un langage de programmation Web par les promoteurs de Java (SUN) et .Net (MICROSOFT) parce qu'ils avaient leur propre actif intellectuel propriétaire (fortement breveté) pour pousser à l'adoption.

En tant que norme gratuite (non brevetée), C n'offre aucune emprise `` verrouillée '' sur les développeurs ... d'où peut-être la main lourde du lobbying dans les écoles et les universités pour s'assurer que l'argent des contribuables financera l'adoption d'un technologie inférieure soutenue par des intérêts privés.

Si C est assez bon pour IBM et MICROSOFT (ils ne développent pas leurs produits en PHP ou .Net) mais pas assez bon pour les utilisateurs finaux, alors les utilisateurs finaux pourraient se demander pourquoi ils sont invités à subir ce double standard.


1
Uhhhh Microsoft.com et sharepoint sont tous deux dans ASP.NET. Une grande partie de Visual Studio 2010 est en .NET (WPF). Cette affirmation est manifestement fausse. Utilisez le langage de plus haut niveau qui répond à vos exigences de conception. Pour le Web, cela signifie C # / Python / etc, et des composants en C / C ++ / etc où les performances deviennent un problème, bien que cela n'arrive presque jamais.
3Dave

2

J'utiliserais C pour une application Web si:

  1. J'ai un petit budget pour le serveur d'hébergement (petit VPS) et mon temps n'est pas cher.
  2. Je travaille pour Facebook, Twitter ou quelqu'un qui a besoin de réduire le nombre de serveurs utilisés (avec des milliers à des millions d'utilisateurs).
  3. Je veux apprendre C et j'ai besoin de trouver une application du monde réel où je peux l'utiliser.
  4. Je connais bien mieux le C que les autres langages de script.
  5. Je suis un éco-responsable et je souhaite réduire l'empreinte carbone de mon application.

G-WAN exécute le code sous forme de scripts, oui des scripts C comme Play! Framework fait pour Java. G-WAN est très rapide et dispose d'une API simple. G-WAN permet d'utiliser C / C ++ pour les applications Web lorsque d'autres serveurs n'ont pas réussi à le faire.

Une chose est claire: il faut un bon programmeur pour écrire un site web en C, tout développeur de merde peut créer un site avec spaghetti PHP :-) Il existe des détecteurs de fuites et même des garbage collector pour C.


2

Tous les langages que vous avez mentionnés sont en fait écrits en C / ++. La seule différence réside dans les classes avancées et les bibliothèques créées à partir de C qui composent ce qui est maintenant ces autres langages d'interprétation. C'est aussi pourquoi ils sont appelés langages de script.

Pensez-y comme si vous préparez un gâteau (PHP / JS):

  • 2 œufs, 1 tasse de lait, 2 bâtonnets de beurre, 4 tasses de farine, 1 tasse de sucre, bicarbonate de soude

Mais imaginez devoir créer tous les éléments dont ces choses sont composées. (C / ++)

  • 17 mg de bicarbonate de sodium, 15 cuillères à soupe de protéines, 12 cuillères à soupe de membrane vitelline, acide aminé, soufre, ... Particules neutroniques

C est le fondement de nombreuses langues modernes. C'est génial et presque les langages les plus puissants en cours d'assemblage. Vous pouvez le faire, il vous suffit d'investir dans la construction de tout le code que ces autres langages ont déjà fait. Comme construire un gâteau à partir du tableau périodique.

Apprenez-le, vous pouvez littéralement lui faire faire n'importe quoi!


1

La gestion des chaînes en C peut être facilitée en utilisant:

Types de données (partie de libslack)

Libslack fournit un type de données générique de tableau de pointeurs évolutif appelé List, un type de données générique de table de hachage évolutif appelé Map et un type de données String décent qui est livré avec des tas de fonctions (dont beaucoup proviennent de Perl). Il existe également des types de données de liste abstraites simples et doublement liées avec des freelists facultatifs et "évolutifs".

ou:

Bibliothèque de chaînes gérée (pour C)

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


1

"domachine" a écrit:

dépendance de la plateforme: C doit être compilé en code natif. Ce code ne fonctionne pas sur toutes les plateformes. Les langages interprétés (comme PHP) fonctionnent partout où un interpréteur existe. Bien sûr, ce problème pourrait être résolu mais vous voyez l'avantage de développer en PHP dans ce cas particulier.

Vous êtes-vous déjà demandé dans quelle langue l' interpréteur PHP portable est écrit?

Dans ANSI C.

Donc, avant de rejeter à nouveau la portabilité d'ANSI C, demandez-vous dans quelle langue votre langage de programmation préféré a été écrit ... (astuce: presque tous ont été écrits en C / C ++).

Les compilateurs ANSI C sont disponibles sur toutes les plates-formes sur lesquelles je devais travailler - et il n'en est pas de même pour PHP et son gigantesque runtime.

Voilà pour l' argument de la portabilité .


2
Eh bien, PHP n'est PAS ma langue préférée. Je n'ai encore rien codé en PHP. Je suis un programmeur C et C ++. Je n'ai jamais rejeté la portabilité de C! La seule chose que j'ai mentionnée, c'est la facilité d'appliquer des scripts PHP à un espace Web existant. Montrez-moi le cas où vous pouvez obtenir un WebSpace à petit budget où vous avez un compilateur. Peut-être que je me trompe, mais je pense que vous êtes l'un de ces programmeurs fanatiques qui adorent une langue mais ne voient pas les avantages d'autres langues, peut-être plus appropriées. J'adore C et C ++ mais je suis capable de sortir des sentiers battus.
domachine

0

Similaire à G-WAN, mais pour Cocoa / Objective-C, Bombax est un framework d'applications Web.

http://www.bombaxtic.com

En parlant d'Objective-C, je ne peux pas m'empêcher de souligner MacRuby, qui a le potentiel de révolutionner la façon dont nous créerons des applications Web un jour.


Eh bien MacRuby est mort maintenant.
Banjocat

0

Un autre point pourrait être la dépendance de la plate-forme. C doit être compilé en code natif. Ce code ne fonctionne pas sur toutes les plateformes.

Les langues interprétées fonctionnent partout où un interprète existe. De nombreux fournisseurs par exemple fournissent des interpréteurs PHP installés sur leurs serveurs mais avec un système d'exploitation Windows. Si vous développez maintenant sur une machine Linux. Vous avez un problème.

Bien sûr, ce problème pourrait être résolu mais vous voyez l'avantage de développer en PHP dans ce cas particulier.

J'espère que cela aide, en ce qui concerne domachine


0

PHP, Python et ainsi de suite sont faciles à mettre à l'échelle en lançant du matériel sur le problème.

Supposons que cela coûte 1 personne 1 an d'efforts pour développer une application en PHP, et que cela leur coûte 3 ans pour le faire en C (car C nécessite plus d'efforts pour faire la même chose). Cela signifie que le besoin matériel réduit du code C doit représenter 2 ans de salaire pour que C devienne attractif. En pratique, cela n'arrive (presque) jamais.

Comme pour toute règle, il y a une exception. L'échelle de Facebook est si grande que le matériel coûte assez cher pour s'en occuper. C'est pourquoi ils ont développé HipHop , qui compile PHP en C ++. Il apporte le meilleur des deux mondes: la simplicité de la programmation en PHP et les performances brutes du C ++. Facebook est toujours développé en PHP, mais lorsque vous l'utilisez, tout est du code natif.


0

Au final, vous pouvez utiliser absolument n'importe quel langage pour développer des sites, y compris l'assembleur (via CGI etc.). Si vous vouliez dire pourquoi nous n'utilisons pas un langage compilé, eh bien, nous avons déjà .NET, Java et autres.


0

Vous devez aimer ce que vous faites pour obtenir des résultats. Des langages comme java et php ont été créés avec beaucoup d'efforts pour faciliter la vie des gens. Php a particulièrement profité à de nombreux programmeurs Web autodidactes aujourd'hui. Vous pouvez voir le type de soutien dont il dispose dans le monde du développement Web.

Java iam a été écrit pour vous aider dans tout ce qui est possible dans le monde d'aujourd'hui. L'énorme livre est une indication claire, et c'est une bête si vous vous profilez également pour le développement Web. Il en va de même pour Python. Ce sont tellement de langages et de plates-formes fantastiques. Pas étonnant qu'ils soient extrêmement populaires.

Je suis un adepte du C et cela est en partie dû à certaines limitations qui m'empêchaient de jeter un œil à d'autres langages comme php. J'écris quotidiennement en C et chaque jour je suis fier d'e et d'apprendre une nouvelle chose aussi. Cela me fait du bien et j'ai également commencé à apprendre comment C était le choix par défaut lors de l'écriture d'applications pour des sites Web via Cgi. Ceci est résumé dans d'autres plates-formes et lorsque vous développez des sites Web liés aux bases de données et aux services Web, vous devez savoir ce qui se passe dans les coulisses.

Cependant, si vous savez tout cela et que vous voulez toujours utiliser un langage de script, il doit y avoir une raison valable, et nous n'avons besoin de personne pour le déconseiller.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.