Esta mañana estaba echando un vistazo a algunos servidores web diferentes cuando me encontré con G-WAN . Según tengo entendido, es un servidor web escrito en C y debe utilizarlo escribiendo sus sitios web / aplicaciones web en C.Un beneficio claro es la velocidad, como sugiere el sitio G-WAN.
Sin embargo, en los foros, el creador de G-WAN preguntó por qué no usar C para aplicaciones basadas en la web y no puedo pensar en una sola razón aparte de que es difícil (para mí de todos modos, soy un novato cuando se trata de C). Debe haber más razones por las que todos usamos PHP, Python, Ruby, etc., además de que es fácil de desarrollar en estos lenguajes. No veo eso como una buena razón.
Así que te lo planteo: ¿Por qué no usas C para tus aplicaciones web?
fuente
Respuestas:
Se necesita mucho cuidado para que un programa en C sea correcto y seguro. Ese cuidado significa que necesita tener personas realmente buenas que escriban sus programas. Eso significa que paga más.
Además, C no tiene la ventaja de aprovechar una enorme biblioteca estándar de funcionalidad como .NET (y las otras plataformas principales centradas en la web). Por lo tanto, puede que tenga que comprar componentes, realizar interoperabilidad o lanzar su propia funcionalidad que viene "gratis" con un lenguaje más, digamos "centrado en la web" como PHP o C # o Ruby o lo que sea. Eso significa que paga más.
Agregue todo eso al hecho de que la velocidad computacional de un solo subproceso no es tan importante en la web. Si necesita más escalabilidad, la mayoría de las organizaciones pueden económicamente simplemente lanzar más núcleos al problema y estar bien. Esto no es cierto para todos, por supuesto. Me imagino que el núcleo del motor de Google está escrito en C o un lenguaje similar, no solo por velocidad, sino para ahorrar dinero real en costos de energía.
fuente
Tararear...
Parece que llegué un poco tarde en esta discusión, pero lo acabo de descubrir ahora. Y les agradezco a todos ustedes por tanto aporte.
Soy el autor de G-WAN, lo que deja en claro que he trabajado seriamente en el asunto: G-WAN es más rápido que todos los demás servidores web (sin procesamiento) y todos los demás servidores de aplicaciones web (cualquier procesamiento que pueda imaginar).
Sí, ANSI C también hizo posible procesar más contenido estático, con CPU menos potentes (ANSI C no se trata solo de hacer volar los contenidos dinámicos).
Por cierto, G-WAN usa scripts C (no se necesita compilador y enlazador de C) por lo que el ciclo de compilación / enlace / retraso no existe.
En el proceso de comparar G-WAN con .NET Java y PHP, escribí aplicaciones similares en los 4 idiomas: http://gwan.ch/source/
Y, para mi consternación, los lenguajes de programación modernos no eran más fáciles de usar.
Una parte del trabajo que es especialmente frustrante es buscar desesperadamente la llamada API "mágica" que hará lo que quieres hacer.
Piense en cómo hacer 'bonitos miles' en:
C#
Java
PHP
ANSI C
El "..." significa que es necesaria alguna preconfiguración o procesamiento posterior. ANSI C es claramente más fácil de usar y recordar.
Cuando PHP tiene más de 5900 llamadas API (C # y Java no muy lejos), encontrar la llamada API correcta es un desafío por sí solo. El tiempo perdido para encontrar esto (y luego para descubrir qué tan mal está implementada la llamada a la API nativa ), el tiempo para aprender a hacerlo para la próxima vez que lo necesite, todo este tiempo lo está privando del tiempo necesario para resolver su aplicación problemas.
He leído (arriba) que PHP es más conciso que ANSI C? ¿Por qué entonces usar en
"//:: this is a comment ::"
lugar de"// this is a comment"
? ¿Por qué tener una sintaxis tan estúpidamente compleja de "miles de personas"?El otro argumento habitual es que Java y similares proporcionan llamadas dedicadas para aplicaciones web.
No pude encontrar nada para escapar de HTML en Java, así que escribí mi versión:
¿De verdad cree que el mismo código en ANSI C sería más complejo? No, sería inmensamente más sencillo y rápido.
Java (derivado de C) requiere que los programadores vinculen cadenas de varias líneas con un '+'
C # (derivado de C) requiere que los programadores vinculen cadenas de varias líneas con un '+'
PHP (derivado de C) requiere que los programadores enlazar cadenas de varias líneas con un '.'
ANSI C no tiene este requisito ahora completamente estúpido (obsoleto).
Entonces, ¿es el progreso tan obvio que reclaman las lenguas modernas? Todavía lo estoy buscando.
Sinceramente,
Pierre.
fuente
, amount)
, PHP está bien tal como está, y su ejemplo de ANSI C necesita dos argumentos más (búfer y longitud del búfer). Con la notable excepción de Java, su ejemplo parece probar el punto opuesto. Además, nunca había visto esa//:: comment ::
sintaxis antes; PHP ciertamente no lo requiere.La misma razón por la que no usamos C para la mayoría de la programación. Los beneficios (que son principalmente el rendimiento) no superan los costos (tiempo de desarrollo, falta de administración automática de memoria, falta de protección automática contra desbordamientos de búfer, tener una etapa de compilación entre las etapas de edición y prueba, etc.).
fuente
La mayoría de las aplicaciones de red, especialmente los servidores web, están mucho más "ligadas a las E / S", es decir, son capaces de bombear datos mucho más rápido de lo que la red puede aceptar. Por lo tanto, algo que es altamente eficiente en la CPU no es una gran ganancia, mientras que algo que es escalable y mantenible sí lo es. Entonces, no hay razón para aceptar los inconvenientes de C y perder las ventajas de un entorno administrado como Java, .NET, Python, Perl u otros lenguajes.
fuente
C no es un lenguaje conveniente para manipular cadenas.
Comparar C #:
C correspondiente:
fuente
printf
deberían hacer el trabajo.Si la dificultad y la complejidad no fueran un problema en absoluto (¡ja!), Entonces no me detendría en C. Escribiría ensamblado x86. Han pasado años desde que utilicé un servidor web que no fuera x86, y cada día parece menos probable.
Usar C (en lugar de ensamblador, o algo de nivel superior) es sugerir que C es el punto óptimo de la eficiencia del programador y la eficiencia de la computadora.
Para los programas que escribo, este no es el caso: C es una pobre coincidencia con los tipos de programas que quiero escribir, y sus ventajas sobre un ensamblador de macros decente simplemente no son tan significativas. El programa que estoy escribiendo en este momento no es difícil en mi HLL de elección, pero la complejidad del mismo, ya sea en ensamblado o en C, sería tan alta que nunca se terminaría. Reconozco que un programador suficientemente inteligente con suficiente tiempo podría hacer que se ejecute más rápido en ensamblaje o C, pero no soy ese programador.
fuente
fuente
eval
y phpinclude
? Por favor, en C / C ++ no declaras que quieres ejecutar código arbitrario, simplemente lo hace.eval
no es un error, es la intención del programador. En C / C ++, cualquier error puede llevar a la ejecución remota de código, en lenguajes dinámicos, este no es el caso a menos que algún tonto esté jugandoeval
.Sé que esta pregunta ya ha sido respondida a muerte, pero hay 2 cosas que no se han mencionado hasta ahora que son extraordinariamente importantes para el éxito en cualquier paradigma de programación, y especialmente en el desarrollo web, donde hay muchas personas que no son necesariamente programadores. trabajando con el código.
Si tuviera una aplicación crítica que requiriera un rendimiento extremo, usaría C, pero llevaría tanto más tiempo escribirla que nunca llegaría al mercado. Hasta que no haya el # 1 o el # 2, no me será posible usarlo.
fuente
C es lenguajes de nivel bastante bajo para muchos propósitos: sin programación orientada a objetos, mucha gestión manual de recursos.
Hay un uso limitado de C para la web, por ejemplo, Klone . Se utiliza principalmente para casos de aplicaciones integradas de bajos recursos.
Sin embargo, existen marcos web C ++ como CppCMS que se utilizan para el desarrollo de aplicaciones web de alto rendimiento.
C ++ le permite disfrutar de una alta abstracción y un acceso detallado a lo que está haciendo exactamente, lo que le brinda una opción mucho mejor para implementar y desarrollar aplicaciones grandes.
Pero los usa en caso de que el rendimiento y el uso de recursos sean mucho más críticos que el tiempo de comercialización y los costos de desarrollo, ya que generalmente el desarrollo web es más rápido utilizando buenos marcos web para lenguajes como Java, Python o PHP. También, en general, hay programadores menos competentes para C ++ que Java / P * por el mismo salario.
Entonces es cuestión de prioridades, también hay menos herramientas para el desarrollo web en C ++ que para PHP / Python / Perl o Java.
fuente
@Joeri Sebrechts
FUD en acción:
Bueno, en realidad no. No escalan en absoluto verticalmente y escalan muy pobremente horizontalmente. Consulte: http://gwan.ch/en_scalability.html donde se explica cuántos problemas hay por delante de los que tienen un mal desempeño.
Nuevamente incorrecto. Si las bibliotecas PHP se han escrito en C, entonces se pueden utilizar directamente desde C, lo que proporciona instantáneamente la 'productividad única' que afirma que tiene PHP.
Pure FUD (consulte la respuesta anterior).
HipHop es mucho más rápido que PHP, no hay duda de eso. Pero si compara HipHop con una implementación de C simple, tiene dos capas de sobrecarga:
Además, HipHop se ha escrito en el modo Académico ineficaz e despistado (separado de cualquier realidad del mundo real). seguro, puede impresionar a los programadores de PHP, pero muestre este código a un programador integrado y él sentirá pena por Facebook.
"Un idioma que no lo tiene todo es en realidad más fácil de programar que otros que lo tienen" - Dennis M. Ritchie
A diferencia de (la mayoría de) los USUARIOS FINALES del lenguaje de programación, parece que Dennis sabía un par de cosas sobre el asunto.
fuente
Esta es toda la razón y la única necesaria. Tiene muchos beneficios, el principal de los cuales es el tiempo de comercialización. Si puede obtener su aplicación web en línea en un mes usando PHP en lugar de dos meses usando C, podría ganar. Si puede agregar una nueva función en una semana usando Ruby on Rails en lugar de dos semanas usando C, nuevamente gana. Si puede corregir un error en un día usando Python en lugar de dos días usando C, gana una vez más. Si puede agregar una función porque está usando el lenguaje X que sus competidores no pueden agregar en absoluto porque están usando el lenguaje Y y es demasiado difícil en ese idioma debido a sus limitaciones de recursos, entonces definitivamente gana.
Y por "ganar" realmente quiero decir que no pierdes. Sus competidores están usando lenguajes y frameworks de alto nivel para desarrollar sus sitios, por lo que si usa C, no está compitiendo con otras personas que usan C, está perdiendo contra otras personas que no usan C.Solo para competir, tiene utilizar herramientas con niveles similares de abstracción.
Si el rendimiento se convierte en un problema, puede reescribir las partes lentas de su sitio en idiomas con mejor rendimiento. O simplemente puede agregar más hardware. Realmente, un problema de rendimiento es lo que llamamos un "buen problema", significa que ya ha tenido éxito. Pero dedicar más tiempo a desarrollar la funcionalidad básica de su sitio rara vez es una opción. Escribirlo en C solo para que se ejecute más rápido es una optimización prematura, que, como nos dice Knuth, es la raíz de todos los males.
Todo esto implica que si puedes usar un lenguaje con un nivel de abstracción más alto que Python o Ruby, podrías ganarle a las personas que usan Python o Ruby. La historia de Paul Graham sobre cómo él y su equipo utilizaron LISP como un "arma secreta" en el desarrollo de sitios web puede resultar instructiva. http://www.paulgraham.com/avg.html
Por supuesto, si está desarrollando un sitio para su propia diversión, hágalo en el idioma que desee. Y si su sitio está vinculado a la CPU (casi ninguno lo está; generalmente están vinculados a E / S), use el lenguaje de rendimiento más rápido que pueda. Sin embargo, si está tratando de innovar, use un lenguaje de alto nivel con las mejores abstracciones que pueda encontrar.
fuente
Crees que ser fácil no es una buena razón. Creo que es una buena razón. Si necesita el máximo rendimiento, C está bien, pero otros lenguajes eliminan las cosas difíciles para mejorar la productividad, la capacidad de mantenimiento y reducir los defectos.
fuente
Considere que no soy un desarrollador web, pero haré estas preguntas de todos modos y ofreceré un punto o dos.
¿Qué sitio web está escrito en un solo idioma? En serio, este hilo parece asumir que un martillo sirve para todos los clavos.
¿Cuándo fue la última vez que alguien dijo seriamente que C era complejo? Quiero decir, muchachos, no pueden conseguir un nivel mucho más bajo. No estoy hablando de C ++ aquí, ya que a menudo se hace referencia a los dos de forma colectiva.
C tiene problemas de seguridad, que no se pueden negar, pero ¿son menores que los que se ven en los kludges llamados PHP y Perl? En cualquier caso, un sitio web seguro es una función de la disciplina del programador.
En cualquier caso, vaya a los comentarios. La dificultad de usar cualquier lenguaje depende en gran medida del problema en cuestión. C y especialmente C ++ pueden conducir a soluciones rápidas a un problema en manos experimentadas.
Los usos industriales de los servidores web, es decir, los servidores / sitios integrados, simplemente no tienen las opciones de idioma que podría tener un servidor web normal. Entonces terminas usando una variante de C o posiblemente algo como BASIC. Su objetivo es ofrecer la funcionalidad que requiere el dispositivo y no preocuparse por los idiomas. En un servidor web convencional, la forma de hacerlo es con lenguajes de alto nivel la mayor parte del tiempo. Aléjese del gran hierro y su libertad de programación se irá por la puerta.
Sin las bibliotecas adecuadas, sería una tontería en la mayoría de los casos hacer un proyecto web desde cero en C. La falta de buenas bibliotecas estandarizadas es un gran negativo aquí.
fuente
Aquí hay más código relacionado con la web escrito en C que vale la pena echarle un vistazo al crear su propia biblioteca C para la web:
fuente
Bueno, dado que el desarrollo web es una cuestión de tener bibliotecas útiles (del tipo que usa PHP), entonces no veo cómo C no sería útil.
Después de todo, la lógica de procedimiento es la misma: hacer while, for, if then else, etc. ya sea en C, PHP, .Net o Perl.
Y un ciclo o prueba en C no es más difícil de escribir porque está escrito en C.
La mayoría de las bibliotecas PHP están creadas en C, por lo que el argumento de las bibliotecas C para la Web que faltan no parece muy convincente.
Mi conjetura es que C no fue anunciado como un lenguaje de programación web por los promotores de Java (SUN) y .Net (MICROSOFT) porque tenían su propia patentada (en gran medida patentado) activo intelectual para impulsar la adopción.
Como estándar gratuito (no patentado), C no ofrece ningún control de 'bloqueo' sobre los desarrolladores ... por lo tanto, tal vez la mano dura de cabildear en escuelas y universidades para asegurarse de que el dinero de los contribuyentes financiará la adopción de un tecnología inferior respaldada por intereses privados.
Si C es lo suficientemente bueno para IBM y MICROSOFT (no desarrollan sus productos en PHP o .Net) pero no lo suficientemente bueno para los usuarios finales, entonces los usuarios finales podrían preguntarse por qué están invitados a sufrir este doble estándar.
fuente
Usaría C para una aplicación web si:
G-WAN ejecuta código como scripts, sí, scripts en C como Play! Framework lo hace para Java. G-WAN es muy rápido y tiene una API sencilla. G-WAN hace posible el uso de C / C ++ para aplicaciones web cuando otros servidores no lo han hecho.
Una cosa está clara: necesitas un buen programador para escribir un sitio web en C, cualquier desarrollador de mierda puede crear un sitio con PHP espagueti :-) Hay detectores de fugas e incluso recolectores de basura para C.
fuente
Todos los lenguajes que mencionaste están escritos en C / ++. La única diferencia son las clases avanzadas y las bibliotecas que se crearon a partir de C que componen lo que ahora son estos otros lenguajes de interpretación. También es por eso que se les conoce como lenguajes de secuencias de comandos.
Piense en ello como hornear un pastel (PHP / JS):
Pero imagina tener que fabricar todos los elementos que componen esas cosas. (C / ++)
C es la base de muchos lenguajes modernos. Es genial y casi los lenguajes más poderosos en ensamblaje. Puede hacerlo, solo necesita invertir en la construcción de todo el código que estos otros lenguajes ya hicieron. Como construir un pastel a partir de la tabla periódica.
¡Aprende que literalmente puedes hacer que haga cualquier cosa!
fuente
El manejo de cadenas en C se puede facilitar usando:
o:
Biblioteca de cadenas administrada (para C)
http://www.cert.org/secure-coding/managedstring.html
fuente
"domachine" escribió:
¿Alguna vez se preguntó en qué idioma está escrito el intérprete PHP portátil ?
En ANSI C.
Entonces, antes de descartar la portabilidad de ANSI C nuevamente, pregúntese en qué lenguaje se ha escrito su lenguaje de programación favorito ... (consejo: casi todos fueron escritos en C / C ++).
Los compiladores ANSI C están disponibles en todas las plataformas en las que tuve que trabajar, y lo mismo no es cierto para PHP y su gigantesco tiempo de ejecución.
Hasta aquí el argumento de la portabilidad .
fuente
Similar a G-WAN, pero para Cocoa / Objective-C es Bombax, un marco de aplicaciones web.
http://www.bombaxtic.com
Hablando de Objective-C, no puedo resistirme a señalar MacRuby, que tiene el potencial de revolucionar la forma en que crearemos aplicaciones web algún día.
fuente
Otro punto podría ser la dependencia de la plataforma. C debe compilarse en código nativo. Este código no se ejecuta en todas las plataformas.
Los idiomas interpretados se ejecutan dondequiera que exista un intérprete. Muchos proveedores, por ejemplo, proporcionan intérpretes PHP instalados en sus servidores pero con un sistema operativo Windows. Si ahora está desarrollando en una máquina Linux. Tienes un problema.
Por supuesto, este problema podría resolverse, pero ve la ventaja de desarrollar en PHP en este caso particular.
Espero que esto ayude, saludos domachine
fuente
PHP, Python, etc. son fáciles de escalar lanzando hardware al problema.
Suponga que a 1 persona le cuesta 1 año de esfuerzo desarrollar una aplicación en PHP, y le cuesta 3 años hacerlo en C (ya que C requiere más esfuerzo para hacer lo mismo). Eso significa que la necesidad reducida de hardware del código C tiene que representar 2 años de salario para que C se vuelva atractivo. En la práctica, eso (casi) nunca sucede.
Como con toda regla, hay una excepción. La escala de Facebook es tan grande que el hardware tiene un costo lo suficientemente grande como para cuidarlo. Por eso desarrollaron HipHop , que realiza una compilación cruzada de PHP a C ++. Aporta lo mejor de ambos mundos: la simplicidad de la programación en PHP y el rendimiento puro de C ++. Facebook todavía está desarrollado en PHP, pero cuando lo usas, es todo código nativo.
fuente
Al final, puede usar absolutamente cualquier lenguaje para desarrollar sitios, incluido el ensamblador (a través de CGI, etc.). Si quería decir por qué no usamos un lenguaje compilado, bueno, ya tenemos .NET, Java y otros.
fuente
Tienes que amar lo que estás haciendo para lograr resultados. Los lenguajes como java y php se crearon con mucho esfuerzo para facilitar la vida de las personas. Php ha beneficiado especialmente a muchos programadores web autodidactas en la actualidad. Puedes ver el tipo de soporte que tiene en el mundo del desarrollo web.
Seguro que Java iam fue escrito para ayudarte en todo lo que sea posible en el mundo actual. El enorme libro es una clara indicación, y es una bestia si también se avecina para el desarrollo web. Lo mismo ocurre con Python. Estos son lenguajes y plataformas fantásticos. No es de extrañar que sean muy populares.
Soy un devoto de C y en parte se debe a ciertas limitaciones que me impedían echar un vistazo a otros lenguajes como php. Escribo en C todos los días y todos los días estoy orgulloso de aprender algo nuevo también. Esto me hace sentir muy bien y también comencé a aprender cómo C era la opción predeterminada al escribir aplicaciones para sitios web a través de Cgi. Esto se resume en otras plataformas y cuando desarrolla sitios web que tienen que ver con bases de datos y servicios web, necesita saber qué está sucediendo detrás de escena.
Sin embargo, si sabe todo eso y aún desea utilizar un lenguaje de secuencias de comandos, debe haber una razón válida y no necesitamos que nadie lo desaconseje.
fuente