¿Por qué no usa C para sus aplicaciones web?

101

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?

Abdominales
fuente
34
¿Por qué usamos estufas y no cocinamos nuestras comidas directamente al fuego? ¿Por qué usamos el automóvil aunque caminar o usar la bicicleta es mucho más saludable? Por qué ... podría continuar ...
Felix Kling
16
@Felix: como dije, mencione otras razones además de que es difícil. Lo que implica que soy consciente de que existen otros lenguajes para abstraer la dificultad.
Abs
15
Realmente nunca consideré C difícil.
Salga el
10
@David Lively Si no lograste poner la 'c' en dificultad a propósito, eso es realmente bastante divertido. Bien hecho :)
punkrockbuddyholly
11
@MrMisterMan solo le tomó cuatro meses a alguien para detectarlo. =)
3Dave

Respuestas:

79

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.

Dave Markle
fuente
48
Vaya, ¿un argumento a favor de .NET contra C debido a las bibliotecas ? Claro, stdlib es más pequeño, pero tenemos décadas de bibliotecas (muchas de código abierto) en C. Tengo problemas para pensar en cualquier cosa en .NET stdlib para la que no haya una biblioteca C madura y gratuita.
Ken
3
No creo que él estuviera defendiendo específicamente .NET, creo que solo quería decir que hay lenguajes que tienen muchas bibliotecas cohesivas. Estoy seguro de que C tiene mucho, pero para ser honesto, no he encontrado ningún tipo de repositorio que los reúna a todos en un solo lugar o los empaque.
Abs
16
@Ken La manipulación de cadenas es una tarea muy común en las aplicaciones web. Las bibliotecas C existen para eso, pero no son tan numerosas ni utilizables como las bibliotecas en [elija un lenguaje de alto nivel].
Andres Jaan Tack
23
@Ken: Hay un universo de diferencia cuando tiene un único conjunto de funciones bien soportado frente a una plétora de bibliotecas pequeñas que difieren ampliamente en el conjunto de características, licencias y soporte.
Dave Markle
49

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#

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

Java

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

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

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:

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

¿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.

Pierre
fuente
10
No entiendo bien su comentario sobre el procesamiento adicional de miles de personas; para C # que dejó , 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.
icktoofay
1
Para ser honesto con usted, todas las otras opciones se ven mucho mejor que ANSI C, que "es claramente más fácil de usar y recordar" [sic].
Jarrod Mosen
¿Cómo se compara G-WAN con NGINX si ambos se han escrito en C?
m4l490n
47

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.).

Quentin
fuente
10
Estaba escribiendo lo mismo y me adelantaste. Solo quiero agregar que proteger los sitios web del comportamiento malicioso ya es un desafío suficiente, no necesitamos agregar vectores de ataque potenciales de un uso indebido de la administración de memoria, punteros, etc.
Rob Allen
@Jordan: Tengo la sensación de que no has hecho ninguna programación web en C. Lo que estás diciendo no se ajusta al modelo de cómo se hace la programación web.
2
Claro que sí, asumiendo que su sitio web tiene algún lugar para la interacción del usuario, ya sea por URL o entrada de formulario. Una vez que esos datos se entregan al servidor, el programador debe asegurarse de asignar la memoria correctamente. G-WAN tiene cierta abstracción en torno a los parámetros de consulta, pero eso no lo salvará por completo. No estoy diciendo que, si se hace correctamente, la programación web en C no puede ser segura y rápida, pero es más susceptible a errores más severos.
Jordania
3
suspiro @Kinopiko: Si no sabes qué es un desbordamiento de búfer, no deberías estar codificando en C. ', dijo nuff. Para más información: securecoding.cert.org/confluence/display/seccode/...
L̳o̳̳n̳̳g̳̳p̳o̳̳k̳̳e̳̳
29

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.

Paul Tomblin
fuente
1
Sin embargo, C es mucho más rápido.
14
Si puedo llenar la tubería de la red con Java o Perl (y puedo), el hecho de que C sea más rápido es irrelevante.
Paul Tomblin
1
@Kinopiko, ¿está diciendo que tiene una tubería más grande, más visitas a la página y más datos para enviar que eBay (Java), Stack Overflow (C # /. NET), Google o cualquiera de los millones de sitios web altamente utilizados escritos en lenguajes de nivel superior? ?
Paul Tomblin
1
@Paul Tomblin: El propósito de una aplicación web no es llenar la tubería de la red, sino hacer algún procesamiento. Si solo necesita mostrar texto e imágenes, debe usar páginas html estáticas, que brindan un rendimiento superior. En la mayoría de los casos, las páginas estáticas se sirven desde la caché, por lo que su servidor no necesita hacer nada. OTOH, cuando se necesita procesamiento, bien puede ser el cuello de botella (aunque más comúnmente el disco es el cuello de botella).
PauliL
4
Debe recordar que las aplicaciones web son solo una fracción de una "pila de servidores" que maneja las solicitudes de los usuarios y no es una parte que sea crítica para el rendimiento. Hay otras partes: kernel del sistema operativo (generalmente escrito en C), sistema de archivos (C), servidor web (generalmente C), intérprete de lenguaje (C), base de datos (generalmente C o C ++). La aplicación web generalmente solo pasa datos de una parte a otra, aplicando alguna operación básica en ella, y su rendimiento no es crucial en absoluto.
el.pescado
15

C no es un lenguaje conveniente para manipular cadenas.

Comparar C #:

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

C correspondiente:

const char* foo = "foo";
const char* bar = "bar";
char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1);
strcpy(foobar, foo);
strcat(foobar, foo);
//todo: worry about when/where the foobar memory
//which was allocated by malloc will be freed
ChrisW
fuente
4
PHP tampoco maneja Unicode correctamente, pero es un lenguaje orientado a la Web muy popular.
el.pescado
12
Entonces, deberíamos usar C ++, ya que tiene el mismo rendimiento que C, pero compila su ejemplo de C # como un encanto.
tstenner
2
A partir de la manipulación de cadenas, la aplicación web generalmente solo genera cadenas, por lo que las C printfdeberían hacer el trabajo.
el.pescado
5
C maneja muy bien multibyte y Unicode a través de funciones de biblioteca en tiempo de ejecución. El uso de funciones seguras como strncpy y demás también lo hace bastante seguro.
justinhj
2
O puede usar asprintf (& foobar, "% s% s", foo, bar);
Patrick Lorio
11

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.

Conocido
fuente
7
  • es inseguro
  • es dificil de leer
  • es difícil de mantener, el tiempo de desarrollo es más lento del orden de una magnitud
  • La mayor parte de su material web probablemente esté vinculado a E / S, por lo que la aceleración ni siquiera importa, especialmente cuando usa un lenguaje rápido como Java o C #
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
fuente
2
¿Qué significa "lenguaje rápido como Java o C #"?
RobS
3
@Kinopiko: ¿qué debilidades tienen los lenguajes dinámicos? ¿Cuando un programador novato dice explícitamente que quiere ejecutar código arbitrario a través de evaly php include? Por favor, en C / C ++ no declaras que quieres ejecutar código arbitrario, simplemente lo hace. evalno 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é jugando eval.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
1
"y tan rápido o más rápido que C / C ++ dependiendo de lo que esté haciendo" tal vez, pero todavía está lidiando con un entorno de memoria administrada con Java y C #, lo que puede convertirse en un gran inconveniente en escenarios de alto tráfico.
RobS
5
"y C ciertamente no tiene tantas debilidades de seguridad como cualquier lenguaje dinámico" Eso , amigo mío, es una completa tontería. ¿Por qué ese comentario tiene 3 votos a favor?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
2
@Kinopiko: Bueno, en realidad, no puedes explicarlo en ninguna parte. No hay explicación para ello. C tiene un problema mucho mayor que cualquier lenguaje dinámico. Lo peor que puede pasar en un lenguaje dinámico es "atributo no encontrado, whoop dee doo".
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
7

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.

  1. Comunidad involucrada y útil, también conocida como Personas que ya han resuelto mi problema. Es bastante fácil para Google, incluso para los novatos más novatos, por qué reciben errores de "encabezados ya enviados" en PHP, mientras que esa información puede no estar disponible para un marco o lenguaje que es nuevo en la escena, o que de otra manera no tiene masa critica.
  2. Frameworks, para que la mayoría de los programadores puedan resolver problemas comerciales y no piratear código juntos

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.

Jordán
fuente
6

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.

Artyom
fuente
2
Interesante, no conocía CppCMS, un marco web de bajo nivel escrito en C ++. Podría ser lo mejor de ambos mundos, ubicado entre C y los lenguajes web.
Abs
Ahora es un marco de bajo nivel, es un marco web MVC que es muy RÁPIDO.
Artyom
Lo siento, solo me refiero a cualquier cosa que no sea un lenguaje web como de bajo nivel. Entiendo que es un marco web MVC.
Abs
No existe el "lenguaje web", probablemente solo PHP pueda llamarse web uno. Todos los demás lenguajes, incluidos Java, Python, Perl, Ruby y C #, son lenguajes de uso general que se utilizan para la Web.
Artyom
1
Bueno, si queremos ser específicos así, no existen los lenguajes de programación de propósito general. Solo hay procedimientos, estructurados, orientados a objetos, funcionales ... etc ...
Abs
5

@Joeri Sebrechts

FUD en acción:

PHP, Python, etc. son fáciles de escalar lanzando hardware al problema.

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.

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).

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.

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.

Pure FUD (consulte la respuesta anterior).

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.

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:

  • las interfaces PHP a C ++ (que utilizan las bibliotecas infladas de C ++);
  • la hinchazón de C ++ en sí (lo que hace que C ++ sea de 2 a 10 veces más lento que el C simple).

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.

Pierre
fuente
3
(1) No te tomes las cosas tan personalmente, no estaba dispuesto a desacreditar tu producto porque ni siquiera lo conocía. (2) Haces una prueba de concepto interesante con G-wan, pero espero que me disculpes si adopto un enfoque de esperar y ver hasta que vea que las aplicaciones web del mundo real lo usan, y no solo unos pocos puntos de referencia sintéticos. (3) Ha caracterizado erróneamente la queja de Facebook sobre el escalado horizontal, porque su problema es con Memcache y el rendimiento de múltiples núcleos de la base de datos, el cuello de botella de las aplicaciones web del mundo real, que es algo que G-wan no ayuda a resolver. (4) Estoy seguro de que HipHop agradece sus contribuciones al código.
Joeri Sebrechts
1
Hablando del tema de la productividad. He escrito aplicaciones web en C antes, hace muchas lunas, y en ese momento requería muchas más líneas para hacer lo mismo que PHP, mientras que tenía un riesgo mucho mayor de fallas / fugas de errores. (Soy un "promedio" en ese tipo de errores, lo que quiere decir que los escribo de vez en cuando). Baso mi juicio en esa experiencia hasta que veo aplicaciones reales que demuestran lo contrario (por ejemplo, un puerto de wordpress a C que no requiere muchas más líneas de código).
Joeri Sebrechts
¿Cómo es que algo "no se escala verticalmente"? ¿Quiere decir que no se beneficia de un rendimiento de un solo núcleo más rápido y un rendimiento de memoria más rápido?
rakslice
5

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.

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.

poco
fuente
Está olvidando que el bit de procesamiento de pedidos de gran volumen a través de la web se escribió en C. Consulte las notas al final de paulgraham.com/avg.html .
Giles Roberts
4

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.

Craig
fuente
6
Para obtener el máximo rendimiento, no solo necesita C, sino también el programador C definitivo. Y esos tipos normalmente quieren mucho más dinero que los programadores Java / P *.
el.pescado
4

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í.

David Frantz
fuente
3

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:

  • cgic: una biblioteca ANSI C para programación CGI
  • cgit: una interfaz web para repositorios de git
  • wbox: herramienta de prueba HTTP
  • wget html-parse.c
  • rizo cookie.c
  • Descuento, implementación en C de David Parsons del texto Markdown de John Gruber en lenguaje html
  • Protothreads (especialmente para sistemas integrados), http://www.sics.se/~adam/software.html
  • protothread, proyecto de código de Google de LarryRuane
  • proyecto uriparser sourceforge
  • http-parser, analizador de solicitud / respuesta http para c por Ryan Dahl en github
  • nginx
  • ...
ceeit
fuente
2

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.

Vince
fuente
1
Uhhhh Microsoft.com y sharepoint están ambos en ASP.NET. Gran parte de Visual Studio 2010 está en .NET (WPF). Esta afirmación es evidentemente falsa. Utilice el lenguaje de más alto nivel que cumpla con sus requisitos de diseño. Para la web, eso significa C # / Python / etc, y componentes en C / C ++ / etc donde el rendimiento se convierte en un problema, aunque eso casi nunca sucede.
Salvar el
2

Usaría C para una aplicación web si:

  1. Tengo un pequeño presupuesto para el servidor de alojamiento (VPS pequeño) y mi tiempo no es caro.
  2. Estoy trabajando para Facebook, Twitter o alguien que necesite reducir la cantidad de servidores utilizados (con miles a millones de usuarios).
  3. Quiero aprender C y necesito encontrar una aplicación del mundo real donde pueda usarla.
  4. Conozco C mucho mejor que otros lenguajes de programación.
  5. Soy un chico ecológico y quiero reducir la huella de carbono de mi aplicación.

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.

rtacconi
fuente
2

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):

  • 2 huevos, 1 taza de leche, 2 barras de mantequilla, 4 tazas de harina, 1 taza de azúcar, bicarbonato de sodio

Pero imagina tener que fabricar todos los elementos que componen esas cosas. (C / ++)

  • 17 mg de bicarbonato de sodio, 15 cucharadas de proteína, 12 cucharadas de membrana vitelina, aminoácidos, azufre, ... Partículas de neutrones

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!

GetBackerZ
fuente
1

El manejo de cadenas en C se puede facilitar usando:

Tipos de datos (parte de libslack)

Libslack proporciona un tipo de datos genérico de matriz de punteros que se puede crecer llamado List, un tipo de datos de tabla hash genérico que se puede crecer llamado Map y un tipo de datos de cadena decente que viene con un montón de funciones (muchas extraídas de Perl). También hay tipos de datos de listas abstractos, sencillos o doblemente enlazados, con listas libres opcionales que se pueden "crecer".

o:

Biblioteca de cadenas administrada (para C)

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

ceeit
fuente
1

"domachine" escribió:

Dependencia de la plataforma: C debe compilarse en código nativo. Este código no se ejecuta en todas las plataformas. Los lenguajes interpretados (como PHP) se ejecutan dondequiera que exista un intérprete. Por supuesto, este problema podría resolverse, pero ve la ventaja de desarrollar en PHP en este caso particular.

¿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 .

CClue
fuente
2
Bueno, PHP NO es mi idioma favorito. Todavía no codifiqué nada en PHP. Soy programador en C y C ++. ¡Nunca he descartado la portabilidad de C! Lo único que mencioné fue la facilidad para aplicar PHP-Scripts a un WebSpace existente. Muéstreme el caso en el que puede obtener un WebSpace de bajo presupuesto donde tiene un compilador. Quizás me equivoque, pero creo que eres uno de esos programadores fanáticos que adoran un idioma pero no ven las ventajas de otros, quizás más apropiados. Me encanta C y C ++, pero puedo pensar fuera de la caja.
domachine
0

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.

Gregg
fuente
Bueno, MacRuby está muerto ahora.
Banjocat
0

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

dominar
fuente
0

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.

Joeri Sebrechts
fuente
0

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.

Andrei Rînea
fuente
0

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.

Viz
fuente