Je jetais un coup d'oeil à différents serveurs Web ce matin lorsque 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 des avantages évidents est la rapidité, 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 Web et je ne peux pas penser à une seule raison, sinon difficile (pour moi, je suis novice en matière de C). Il doit y avoir plus de raisons pour lesquelles nous utilisons tous PHP, Python, Ruby, etc., à part le fait qu'il est facile de développer dans ces langages. Je ne vois pas cela comme une bonne raison.
Alors je vous pose la question suivante: Pourquoi n'utilisez-vous pas C pour vos applications Web?
Il est très important d’obtenir un programme C correct et sécurisé. Ces soins signifient que vous devez avoir de très bonnes personnes pour écrire vos programmes. Cela signifie que vous payez plus.
En outre, C n'a pas l'avantage de puiser dans une énorme bibliothèque de fonctionnalités standard unique, contrairement à .NET (et aux autres grandes plates-formes Web). Ainsi, vous devrez peut-être acheter des composants, effectuer des opérations d'interopérabilité ou déployer votre propre fonctionnalité fournie "gratuitement" avec un autre langage, dirons-nous "centré sur le Web", comme PHP, C # ou Ruby, etc. 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 d'une plus grande évolutivité, la plupart des entreprises peuvent, sur le plan économique, simplement jeter plus de cœurs sur le problème et résoudre le problème. Ce n'est pas vrai pour tout le monde, bien sûr. J'imagine que le noyau du moteur de Google est écrit en C ou dans un langage similaire, non seulement pour la vitesse, mais également pour économiser de l'argent en coûts d'énergie.
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 Tu peux imaginer).
Oui, ANSI C a également permis de traiter davantage de contenu statique, avec des processeurs moins puissants (ANSI C ne consiste pas uniquement à faire voler du contenu dynamique).
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.
Dans le processus de comparaison de G-WAN à .NET Java et PHP, j’ai écrit similaire applications dans les 4 langues: http://gwan.ch/source/
Et, à mon grand désarroi, les langages de script modernes étaient pas plus faciles à utiliser.
Une partie du travail qui est particulièrement frustrante consiste à (rechercher désespérément) l'appel à l'API «magique» qui fera ce que vous voulez.
Pensez à la façon de faire des "jolis milliers" dans
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 compte plus de 5900 appels d'API (C # et Java non loin de là), trouver l'appel d'API à droite constitue un défi en soi. Le temps perdu à trouver ceci (et ensuite à trouver à quel point l'appel de l'API natif est mal implémenté), le temps d'apprendre en le hart pour la prochaine fois que vous en avez besoin, tout ce temps vous prive de la le temps nécessaire pour résoudre vos problèmes d'application.
J'ai lu (ci-dessus) que PHP est plus concis que la norme ANSI C? Pourquoi alors utiliser "//:: this is a comment ::"
plutôt que "// this is a comment"
? Pourquoi avoir une syntaxe si bêtement complexe de "jolies milliers"?
L’autre argument habituel est que Java, entre autres, fournit des appels dédiés aux applications Web.
Je n'ai rien trouvé qui puisse échapper au HTML en Java, alors j'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(" "); else
if(c == '"') sb.append("""); else
if(c == '&') sb.append("&"); else
if(c == '<') sb.append("<"); else
if(c == '>') sb.append(">"); else
if(c == '\n') sb.append("<br/>"); 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();
}
Croyez-vous vraiment que le même code dans ANSI C serait plus complexe? Non, ce serait immensément plus simple et plus rapide.
Java (dérivé de C) est le obligatoire programmeurs lier des chaînes multilignes avec un '+'
C # (dérivé de C) est obligeant les programmeurs à lier des chaînes multilignes avec un '+'
PHP (dérivé de C) est obligatoire programmeurs lier des chaînes multilignes avec un '.'
ANSI C n’a pas cette exigence maintenant complètement stupide (obsolète).
Alors, les si évidences avancées sont-elles revendiquées par les langues modernes? Je le cherche toujours.
Cordialement,
Pierre.
La même raison pour laquelle nous n'utilisons pas le C pour la plupart des programmes. Les avantages (principalement liés aux performances) ne compensent pas les coûts (temps de développement, absence de gestion automatique de la mémoire, absence de protection automatique contre les dépassements de mémoire tampon, possibilité de compilation entre les étapes de modification et de test, etc.).
La plupart des applications réseau, notamment 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, une efficacité énergétique élevée du processeur n’est pas un gain énorme, alors qu’elle est évolutive et maintenable. 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.
C n'est pas un langage commode pour manipuler des chaînes.
Comparer C #:
string foo = "foo";
string bar = "bar";
string foobar = foo + bar;
C correspondant:
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
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 x86 Assembly. Cela fait des années que je n'ai pas utilisé de serveur Web autre que x86, et cela semble de moins en moins probable tous les jours.
Utiliser C (au lieu de Assembly, ou quelque chose de plus haut niveau), c'est suggérer que C est la cible idéale de l'efficacité du programmeur et de l'efficacité de l'ordinateur.
Ce n’est pas le cas pour les programmes que j’écris: C correspond mal aux types de programmes que je veux écrire et ses avantages par rapport à un assembleur de macros décent ne sont tout simplement pas très importants. Le programme que je suis en train d’écrire n’est pas difficile dans mon choix de HLL, mais la complexité de celui-ci dans l’Assemblée ou dans le C serait si élevée qu’elle ne serait jamais terminée. Je reconnais qu'un programmeur suffisamment intelligent avec suffisamment de temps pourrait le faire fonctionner plus rapidement en Assembly ou en C, mais je ne suis pas ce programmeur.
Je sais que cette question a déjà été répondue jusqu'à la mort, mais il y a 2 choses non mentionnées jusqu'ici qui sont extrêmement importantes pour la réussite dans tout paradigme de programmation, et particulièrement dans le développement web où beaucoup de personnes ne sont pas nécessairement des programmeurs, travailler avec le code.
Si j'avais une application critique exigeant des performances extrêmes, j'utiliserais C, mais cela prendrait tellement plus de temps à écrire que je ne parviendrais jamais sur le marché. Tant qu'il n'y aura ni 1 ni 2, il ne me sera pas possible de l'utiliser.
C est un langage assez bas à de nombreuses fins: 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'application intégrés aux ressources limitées.
Cependant, il existe des infrastructures Web C++ telles que CppCMS qui sont utilisées pour le développement d'applications Web hautes performances.
C++ vous permet de bénéficier d'une abstraction élevée et d'un accès fin à ce que vous faites, offrant ainsi une bien meilleure option pour le déploiement et le développement d'applications volumineuses.
Mais vous les utilisez lorsque la performance et l’utilisation des ressources sont beaucoup plus critiques Puis les coûts liés au temps de mise sur le marché et au développement, le développement Web étant généralement plus rapide. De plus, généralement, il y a moins de programmeurs compétents pour C++ que les langages 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.
Il doit y avoir plus de raisons pour lesquelles nous utilisons tous PHP, Python, Ruby, etc., à part la facilité de développement dans ces langages
C'est la raison entière et le seul nécessaire. Il présente de nombreux avantages, dont le principal est time to market. Si vous pouvez mettre votre application Web en ligne dans un mois en utilisant PHP au lieu de deux mois en utilisant C, vous pourriez gagner. Si vous pouvez ajouter une nouvelle fonctionnalité dans 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 un jour en utilisant Python au lieu de deux jours en C, vous gagnez encore une fois. Si vous pouvez ajouter une fonctionnalité parce que vous utilisez la langue X que vos concurrents ne peuvent pas ajouter du tout parce qu'ils utilisent la langue Y et que c'est trop difficile dans cette langue compte tenu des contraintes de ressources, alors vous gagnez.
Et par "gagner", je veux vraiment dire vous ne perdez pas. Vos concurrents utilisent des langages et des frameworks de plus haut niveau pour développer leurs sites. Ainsi, si vous utilisez C, vous ne faites pas concurrence à d'autres personnes qui utilisent C, vous perdez contre d'autres personnes qui n'utilisent pas C. Pour concurrencer, vous devez utiliser des outils présentant 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 ajouter plus de matériel. Vraiment, un problème de performance est ce que nous appelons un "joli problème à avoir" - 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’écriture en C juste pour accélérer l’opération est une optimisation prématurée, qui, comme le dit Knuth, est la racine de tout mal.
Tout cela implique que si vous pouvez utiliser un langage dont le niveau d'abstraction est supérieur à celui de Python ou de Ruby, vous pourriez gagner contre des personnes utilisant Python ou Ruby. L’histoire de Paul Graham selon laquelle son équipe et lui-même ont utilisé le LISP comme une "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 divertissement, faites-le dans la langue de votre choix. Et si votre site est lié au processeur (ils ne le sont pratiquement plus; ils sont généralement liés aux entrées/sorties), utilisez le langage le plus rapide possible. Si vous essayez d’innover, cependant, utilisez un langage de haut niveau avec les meilleures abstractions que vous pouvez trouver.
@ Joeri Sebrechts
F.U.D. en action:
PHP, Python et ainsi de suite sont faciles à faire évoluer en jetant du matériel sur le problème.
En fait non. Ils ne mesurent pas du tout verticalement et très mal horizontalement. Voir: http://gwan.ch/fr_scalability.html où il est expliqué combien de problèmes attendent les moins performants.
Supposons qu'il en coûte à une personne et à un an d'effort pour développer une application en PHP, et que cela leur coûte trois 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 déclarez comme PHP.
Cela signifie que le besoin en matériel réduit du code C doit représenter 2 ans de salaire pour que C devienne attrayant. En pratique, cela ne se produit presque jamais.
Pure F.U.D. (voir la réponse ci-dessus).
L'échelle de Facebook est si grande que le matériel est un coût assez important pour être entretenu. C'est pourquoi ils ont développé HipHop, qui compile de manière croisée PHP en C++. Il apporte le meilleur des deux mondes: la simplicité de programmation en PHP et les performances brutes du C++. Facebook est encore développé en PHP, mais lorsque vous l'utilisez, c'est tout le code natif.
HipHop est beaucoup plus rapide que PHP, pas de doute là-dessus. Mais si vous comparez HipHop à une implémentation plain-C, vous avez deux couches d’overhead:
De plus, HipHop a été écrit dans le mode académique inefficace et désemparé (détaché de toute réalité réelle). Bien sûr, il peut impressionner PHP les codeurs, mais montre 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 certains" --Dennis M. Ritchie
Il semble que contrairement à (la plupart des) utilisateurs finaux du langage de programmation, Dennis connaisse deux choses à ce sujet.
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, alors C n’est pas un problème, mais d’autres langages font abstraction de l’essentiel pour améliorer la productivité, la facilité de maintenance et réduire les défauts.
Considérez que je ne suis pas un développeur Web mais que je vais quand même poser ces questions et offrir un point ou deux.
Quel site Web est écrit dans une seule langue? Sérieusement, ce fil semble supposer qu'un marteau convient à tous les ongles.
Quand est-ce que la dernière fois que quelqu'un a déclaré que C était complexe? Je veux dire vraiment les gars vous ne pouvez pas obtenir beaucoup plus bas niveau. 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é, cela ne peut pas être nié, mais sont-ils inférieurs à ce qui est vu dans les kludges appelés PHP & Perl? Dans les deux cas, un site Web sécurisé est une fonction de la discipline du programmeur.
En tout état de cause aux commentaires. La difficulté d'utiliser un langage donné est très dépendante du problème à résoudre C et plus particulièrement C++ peuvent conduire à des solutions rapides à un problème entre des mains expérimentées.
Les utilisations industrielles des serveurs Web, c’est-à-dire des serveurs/sites intégrés, ne disposent tout simplement pas des choix linguistiques d’un serveur Web normal. Vous finissez donc par utiliser une variante de C ou éventuellement quelque chose comme BASIC. Votre objectif est d'offrir les fonctionnalités requises par l'appareil et de ne pas vous soucier des langues. Pour ce faire, la plupart du temps, on utilise des langues de haut niveau. Éloignez-vous du gros fer et votre liberté de programmation disparaît.
Sans les bonnes bibliothèques, il serait insensé dans la plupart des cas de faire un projet web basé sur C en haut. Le manque de bonnes bibliothèques standardisées est un gros inconvénient ici.
Voici un peu plus de code Web écrit en C qui mérite d’être examiné lors de la création de votre propre bibliothèque C pour le Web:
J'utiliserais C pour une application Web si:
G-WAN exécute le code en tant que scripts, oui les scripts C comme Play! Framework fait pour Java. G-WAN est très rapide et possède 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: vous avez besoin d’un bon programmeur pour écrire un site Web en C, tout développeur médiocre peut créer un site avec spaghetti PHP :-) Il existe des détecteurs de fuites et même des éboueurs pour C.
Eh bien, étant donné que le développement Web dépend de la disponibilité de bibliothèques (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: faites while, car, sinon, etc., que ce soit en C, PHP, .Net ou Perl.
Et une boucle C ou un test n'est pas plus difficile à écrire car il est écrit en C.
La plupart des bibliothèques PHP sont créées en C, de sorte que l'argument manquant-bibliothèques-pour-le-Web ne semble pas très convaincant.
Je suppose que les promoteurs de Java (Sun) et .Net (Microsoft) n'ont pas annoncé que C était un langage de programmation Web, car ils possédaient leur propre actif intellectuel breveté (fortement breveté) auprès de Push pour adoption.
En tant que norme gratuite (non brevetée), C n’offre aucune emprise «bloquée» sur les développeurs… d’où peut-être le poids lourd du lobbying dans les écoles et les universités pour s’assurer que l’argent des contribuables financera l’adoption d’un projet. technologie inférieure soutenue par des intérêts privés.
Si C convient assez bien à IBM et à Microsoft (ils ne développent pas leurs produits sous PHP ou .Net) mais pas assez bon pour les utilisateurs finaux, ceux-ci peuvent se demander pourquoi ils sont invités à subir ce double -la norme.
Toutes les langues que vous avez mentionnées sont en réalité écrites en C/++. La seule différence réside dans les classes avancées et les bibliothèques créées à partir de C qui constituent ce qui est maintenant ces autres langages d'interprétation. C'est aussi pourquoi ils sont appelés langages de script.
Pensez-y comme à un gâteau (PHP/JS):
Mais imaginons avoir à faire tout l’élément qui compose ces choses. (C/++)
C est le fondement de nombreuses langues modernes. C’est formidable et presque les langages les plus puissants de l’Assemblée. Vous pouvez le faire si vous avez juste besoin d'investir dans la construction de tout le code que ces autres langues ont déjà fait. Comme construire un gâteau à partir du tableau périodique.
Apprenez-le, vous pouvez littéralement le faire faire n'importe quoi!
La gestion des chaînes en C peut être facilitée avec:
Types de données (partie de libslack)
Libslack fournit un type de données de tableau de pointeur évolutif générique appelé List, un type de données générique de table de hachage pouvant être développé appelé Map et un type de données String décent fourni avec des tas de fonctions (beaucoup sont extraites de Perl). Il existe également des types de données de liste abstraites, à liste simple et à double liaison, avec des freelists facultatifs, "évolutifs".
ou:
Bibliothèque de chaînes gérée (pour C)
"domachine" a écrit:
dépendance à la plate-forme: 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ète existe. Bien sûr, ce problème pourrait être résolu, mais vous voyez l'avantage de développer dans PHP dans ce cas particulier.
Vous êtes-vous déjà demandé dans quelle langue l'interprète portable PHP est écrit?
En ANSI C.
Par conséquent, avant de rejeter à nouveau la portabilité de la norme ANSI C, demandez à vous-même dans quel langage 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. Le travail sur et le même principe n’est pas vrai pour PHP et son gigantesque runtime
Voilà pour la portabilité argument.
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 ne pas utiliser un langage compilé, eh bien, nous avons déjà .NET, Java et autres.
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 auto-appris aujourd'hui. Vous pouvez voir le type de soutien dont il dispose dans le monde du développement Web.
Java iam sure 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 êtes également en quête de développement Web. Même chose pour Python. Ce sont des langues et des plateformes fantastiques. Pas étonnant qu'ils soient extrêmement populaires.
Je suis un passionné de C et c'est en partie à cause de certaines limitations qui m'ont empêché de regarder d'autres langues comme php. J'écris en C tous les jours et chaque jour, je suis fier de pouvoir apprendre et apprendre une nouvelle chose également. Je me sens très bien et j'ai également commencé à comprendre comment C était le choix par défaut lors de la rédaction 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 traitant de bases de données et de services Web, vous devez savoir ce qui se passe dans les coulisses.
Cependant, si vous connaissez tout cela et que vous souhaitez toujours utiliser un langage de script, il doit exister une raison valable et nous n'avons besoin de personne pour le déconseiller.
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. Par exemple, de nombreux fournisseurs fournissent des interprètes 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 dans PHP dans ce cas particulier.
J'espère que cela vous aidera.
Semblable à G-WAN, mais pour Cocoa/Objective-C, Bombax est un framework d’applications Web.
En parlant d'Objective-C, je ne peux pas m'empêcher de souligner MacRuby, qui pourrait révolutionner la création d'applications Web un jour.
PHP, Python, etc., sont faciles à mettre à niveau en lançant du matériel sur le problème.
Supposons qu'il en coûte 1 personne et 1 an d'effort pour développer une application en PHP, et qu'il leur en coûte 3 ans pour le faire en C (car C nécessite davantage d'efforts pour faire la même chose). Cela signifie que le besoin en matériel réduit du code C doit représenter 2 ans de salaire pour que C devienne attrayant. En pratique, cela ne se produit presque jamais.
Comme avec toutes les règles, il existe une exception. L'échelle de Facebook est si grande que le matériel est un coût assez important pour être entretenu. C'est pourquoi ils ont développé HipHop , qui compile PHP en C++. Il apporte le meilleur des deux mondes: la simplicité de programmation en PHP et les performances brutes du C++. Facebook est encore développé en PHP, mais quand vous l'utilisez, c'est tout le code natif.