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?
la source
Réponses:
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.
la source
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 #
Java
PHP
ANSI C
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:
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.
la source
, 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.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.).
la source
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.
la source
C n'est pas un langage pratique pour manipuler des chaînes.
Comparez C #:
Correspondant C:
la source
printf
devraient donc faire le travail.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.
la source
la source
eval
et phpinclude
? 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.eval
n'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 aveceval
.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.
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.
la source
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.
la source
@Joeri Sebrechts
FUD en action:
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.
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.
Pure FUD (voir la réponse ci-dessus).
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:
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.
la source
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.
la source
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.
la source
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.
la source
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:
la source
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.
la source
J'utiliserais C pour une application Web si:
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.
la source
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):
Mais imaginez devoir créer tous les éléments dont ces choses sont composées. (C / ++)
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!
la source
La gestion des chaînes en C peut être facilitée en utilisant:
ou:
Bibliothèque de chaînes gérée (pour C)
http://www.cert.org/secure-coding/managedstring.html
la source
"domachine" a écrit:
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é .
la source
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.
la source
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
la source
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.
la source
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.
la source
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.
la source