una tipos studio programacion móviles hacer ejemplos desarrollo curso como caracteristicas aplicaciones aplicacion php c web-applications

php - tipos - ¿Por qué no usas C para tus aplicaciones web?



manual de programacion android pdf (23)

Eché un vistazo a algunos servidores web diferentes esta mañana cuando me encontré con G-WAN . Según tengo entendido, es un servidor web escrito en C y tiene que utilizarlo escribiendo sus sitios web / webapps en C. Un beneficio claro es la velocidad, como lo sugiere el sitio G-WAN.

Sin embargo, en los foros, el creador de G-WAN preguntó por qué no utilizar C para aplicaciones basadas en web y no puedo pensar en una sola razón aparte de que sea difícil (para mí, de todos modos, soy novato en lo que respecta a C). Debe haber más razones por las cuales todos usamos PHP, Python, Ruby, etc., además de que es fácil de desarrollar en estos idiomas. No veo eso como una buena razón.

Así que te lo puse: ¿Por qué no usas C para tus aplicaciones web?


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 idiomas

Esta es la razón completa 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 utilizando PHP en lugar de dos meses con C, puede que gane. 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 usar la C por dos días, usted gana una vez más. Si puede agregar una función porque está utilizando el lenguaje X que sus competidores no pueden agregar en absoluto porque usan 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 marcos de nivel superior 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, usted tiene usar herramientas con niveles similares de abstracción.

Si el rendimiento se convierte en un problema, puede volver a escribir las partes lentas de su sitio en idiomas de mejor rendimiento. O simplemente puedes lanzar más hardware en él. Realmente, un problema de rendimiento es lo que llamamos un "buen problema que tener", significa que ya ha tenido éxito. Pero pasar más tiempo desarrollando la funcionalidad básica de su sitio rara vez es una opción. Escribirlo en C solo para que funcione más rápido es una optimización prematura, que, como nos dice Knuth, es la raíz de todo mal.

Todo esto implica que si puedes usar un lenguaje con un nivel de abstracción más alto que Python o Ruby, podrías ganar contra personas que usan Python o Ruby. La historia de Paul Graham de cómo él y su equipo usaron LISP como un "arma secreta" en el desarrollo de sitios web puede ser 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, generalmente están vinculados a E / S), utilice el lenguaje de mayor rendimiento que pueda. Sin embargo, si intenta innovar, use un lenguaje de alto nivel con las mejores abstracciones que pueda encontrar.


"domachine" escribió:

dependencia de plataforma: C necesita compilarse en código nativo. Este código no se ejecuta en todas las plataformas. Los idiomas interpretados (como PHP) se ejecutan donde existe un intérprete. Por supuesto, este problema podría ser resuelto, pero se ve la ventaja de desarrollar en PHP en este caso particular.

¿Alguna vez se preguntó en qué idioma está escrito el intérprete portátil de PHP?

En ANSI C.

Entonces, antes de descartar nuevamente la portabilidad de ANSI C, pregúntese en qué idioma 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.

Demasiado para el argumento de la portabilidad .


@Joeri Sebrechts

FUD en acción:

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

Bueno, en realidad no. No se escalan en absoluto verticalmente y se escalan muy mal horizontalmente. Ver: http://gwan.ch/en_scalability.html donde se explica cuánto problema hay por delante de los malos ejecutantes.

Supongamos que cuesta 1 persona 1 año de esfuerzo desarrollar una aplicación en PHP, y les cuesta 3 años hacerlo en C (ya que C requiere más esfuerzo para hacer lo mismo).

Nuevamente incorrecto. Si las librerías PHP han sido escritas en C, entonces se pueden usar directamente desde C, "proporcionando instantáneamente la ''productividad única'' que usted afirma que tiene PHP.

Eso significa que la necesidad reducida de hardware del código C debe representar un valor de 2 años de salario para que C se vuelva atractiva. En la práctica, eso (casi) nunca sucede.

FUD puro (ver la respuesta anterior).

La escala de Facebook es tan grande que el hardware es un costo lo suficientemente grande como para importarlo. Es por eso que desarrollaron HipHop, que compila de forma cruzada PHP a C ++. Trae lo mejor de ambos mundos: la simplicidad de la programación en PHP y el rendimiento sin procesar de C ++. Facebook todavía está desarrollado en PHP, pero cuando lo usas, todo es código nativo.

HipHop es mucho más rápido que PHP, no hay dudas al respecto. Pero si compara HipHop con una implementación de C simple, tiene dos capas de sobrecarga:

  • las interfaces PHP a C ++ (que usan las bibliotecas C ++ infladas);
  • la propia inflamación de C ++ (que hace que C ++ sea 2-10 veces más lenta que la C simple).

Además, HipHop ha sido escrito en el modo académico ineficiente y desorientado (separado de cualquier realidad del mundo real). claro, puede impresionar a los programadores de PHP pero mostrar este código a un programador embebido y lo sentirá por Facebook.

"Un lenguaje que no tiene todo es realmente más fácil de programar que algunos que lo hacen" --Dennis M. Ritchie

A diferencia de (la mayoría de) el lenguaje de programación de los USUARIOS FINALES, Dennis sabía un par de cosas sobre el asunto, al parecer.


Al final, puede usar absolutamente cualquier lenguaje para desarrollar sitios, incluido el ensamblador (a través de CGI, etc.). Si quisiste decir por qué no utilizamos un lenguaje compilado, bueno, ya tenemos .NET, Java y otros.


Aquí hay un código más relacionado con la web escrito en C que vale la pena cuando construyes tu propia biblioteca de C para la web:

  • cgic: una biblioteca ANSI C para programación CGI
  • cgit: una interfaz web para repositorios git
  • wbox: herramienta de prueba HTTP
  • wget html-parse.c
  • curl cookie.c
  • Descuento, implementación de David Parsons en C 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 por LarryRuane
  • proyecto uritador sourceforge
  • http-parser, el analizador de solicitud / respuesta http para c por Ryan Dahl en github
  • nginx
  • ...

Bueno, dado el hecho de que el desarrollo web es una cuestión de tener bibliotecas útiles (del tipo utilizado por 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., si esto es C, PHP, .Net o Perl.

Y un ciclo C o prueba no es más difícil de escribir porque está escrito en C.

La mayoría de las bibliotecas de PHP están compiladas en C, por lo que el argumento de falta de C-libraries-for-the-web no parece tan convincente.

Supongo 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 propio activo intelectual patentado (altamente patentado) para impulsar su adopción.

Como un estándar gratuito (no patentado), C no ofrece ningún control de ''bloqueo'' en los desarrolladores ... por lo tanto, tal vez la mano dura de cabildear en las escuelas y universidades para asegurarse de que el dinero del contribuyente financie 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, los usuarios finales pueden preguntarse por qué están invitados a sufrir este doble estándar.


C es bastante bajo nivel de idiomas para muchos propósitos: no-OOP, mucha gestión de recursos manual.

El uso de C para uso web es limitado, por ejemplo, Klone . Se usa principalmente para casos de aplicaciones integradas de bajo recurso.

Sin embargo, existen frameworks web C ++ como CppCMS que se usan para desarrollos de aplicaciones web de alto rendimiento.

C ++ le permite disfrutar de una gran abstracción y un acceso detallado a lo que está haciendo ofreciendo exactamente una opción mucho mejor para implementar y desarrollar aplicaciones de gran tamaño.

Pero los usa en caso de que el rendimiento y el uso de recursos sea mucho más crítico que el tiempo de lanzamiento al mercado y los costos de desarrollo, ya que generalmente el desarrollo web es más rápido usando buenos marcos web para lenguajes como Java, Python o PHP. También generalmente hay programadores menos competentes para C ++ y luego Java / P * para 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.


C no es un lenguaje conveniente para manipular cadenas.

Comparar C #:

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

Correspondiente C:

const char* foo = "foo"; const char* bar = "bar"; char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1); strcpy(foobar, foo); strcat(foobar, foo); //todo: worry about when/where the foobar memory //which was allocated by malloc will be freed


Considere que no soy un desarrollador web pero de todos modos le haré estas preguntas y le ofreceré uno o dos puntos.

¿Qué sitio web está escrito solo en un idioma? En serio, este hilo parece suponer que un martillo se adapta a todas las uñas.

¿Cuándo fue la última vez que alguien dijo seriamente que C era complejo? Quiero decir, muchachos, no se puede obtener mucho más bajo nivel. No estoy hablando de C ++ aquí ya que los dos a menudo se mencionan colectivamente.

C tiene problemas de seguridad, que no se pueden negar, pero ¿son menos de lo que se ve en los kludges llamados PHP & Perl? En cualquier caso, un sitio web seguro es una función de la disciplina del programador.

En cualquier caso, fuera de los comentarios. La dificultad de usar cualquier idioma depende mucho del problema que se tenga, y especialmente C ++ puede llevar a soluciones rápidas a un problema en manos expertas.

Los usos industriales para servidores web, es decir, servidores / sitios integrados, simplemente no tienen las opciones de idioma que un servidor web normal pueda tener. 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 de la gran plancha y su libertad de programación se irá por la puerta.

Sin las Bibliotecas correctas sería tonto en la mayoría de los casos hacer un proyecto web básico en C. La falta de buenas bibliotecas estandarizadas es un gran negativo aquí.


Crees que ser fácil no es una buena razón. Creo que es una buena razón. Si necesita rendimiento máximo, C está bien, pero otros lenguajes resumen lo difícil para mejorar la productividad, el mantenimiento y reducir los defectos.


El manejo de cadenas en C se puede hacer más fácil usando:

Tipos de datos (parte de libslack)

Libslack proporciona un tipo de datos de matriz de puntero cultivable genérico llamado Lista, un tipo de datos de tabla hash creable genérico llamado Mapa y un tipo de datos de Cadena decente que viene con un montón de funciones (muchas levantadas de Perl). También hay tipos abstractos de datos de listas unidas y doblemente vinculadas con libreros opcionales, "creíbles".

o:

Managed String Library (para C)

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


La mayoría de las aplicaciones de red, especialmente los servidores web, son mucho más "vinculadas a E / S", es decir, son capaces de extraer datos mucho más rápido de lo que la red puede aceptarlo. Por lo tanto, algo que es altamente eficiente en la CPU no es una gran ganancia, mientras que algo que es escalable y fácil de mantener es. Por lo tanto, no hay motivo para aceptar los inconvenientes de C y perder las ventajas de un entorno administrado como Java, .NET, Python, Perl u otros idiomas.


La misma razón por la que no usamos C para la mayoría de la programación. Los beneficios (que son principalmente de rendimiento) no superan los costos (tiempo de desarrollo, falta de administración de memoria automática, 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.).


Otro punto podría ser la dependencia de la plataforma. C necesita compilarse en el código nativo. Este código no se ejecuta en todas las plataformas.

Los idiomas interpretados se ejecutan donde exista un intérprete. Muchos proveedores, por ejemplo, proporcionan intérpretes de 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 ser resuelto, pero se ve la ventaja de desarrollar en PHP en este caso particular.

Espero que esto ayude, se refiere a la domachine


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

Supongamos que cuesta 1 persona 1 año de esfuerzo desarrollar una aplicación en PHP, y les 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 debe representar un valor de 2 años de salario para que C se vuelva atractiva. En la práctica, eso (casi) nunca sucede.

Como con cada regla, hay una excepción. La escala de Facebook es tan grande que el hardware es un costo lo suficientemente grande como para importarlo. Es por eso que desarrollaron HipHop , que compila de forma cruzada PHP a C ++. Trae lo mejor de ambos mundos: la simplicidad de la programación en PHP y el rendimiento sin procesar de C ++. Facebook todavía está desarrollado en PHP, pero cuando lo usas, todo es código nativo.


Sé que esta pregunta ya ha sido respondida hasta la muerte, pero hay dos cosas que no se mencionaron hasta ahora que son extraordinariamente importantes para el éxito en cualquier paradigma de programación, y especialmente en el desarrollo web donde se obtiene mucha gente que no necesariamente son programadores, trabajando con el código

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

Si tuviera una aplicación crítica que requiriera un rendimiento extremo, usaría C, pero tomaría mucho más tiempo escribir que nunca llegaría al mercado. Hasta que no haya ninguno # 1 o # 2, no es factible que lo use.


Se necesita mucho cuidado para que un programa C sea correcto y seguro. Ese cuidado significa que necesita tener personas realmente buenas escribiendo sus programas. Eso significa que pagas más.

Además, C no tiene la ventaja de extraer de una enorme biblioteca de funcionalidades estándar únicas como lo ha hecho .NET (y las otras plataformas principales centradas en la web). Por lo tanto, es posible que tengas que comprar componentes o realizar interoperabilidad, o implementar tu propia funcionalidad, que viene "gratis" con un lenguaje más, digamos "web-céntrico" como PHP o C # o Ruby o lo que sea. Eso significa que pagas 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 arrojar más núcleos económicamente al problema y estar bien. Esto no es verdad para todos, por supuesto. Me imagino que el núcleo del motor de Google está escrito en C o en un lenguaje similar no solo para la velocidad, sino para ahorrar dinero real en costos de energía.


Si la dificultad y la complejidad no fueran un problema en absoluto (¡ja!), Entonces no me detendría en C. Escribiría el ensamblado x86. Han pasado años desde que utilicé cualquier servidor web que no fuera x86, y cada día parece menos probable.

Usar C (en lugar de ensamblar, o algo de un nivel más alto) 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 combinación pobre para los tipos de programas que quiero escribir, y las ventajas de ello sobre un macroensamblador decente simplemente no son tan significativas. El programa que estoy escribiendo ahora no es difícil en mi HLL de elección, pero la complejidad del ensamblado o C sería tan alta que nunca se terminará. Reconozco que un programador lo suficientemente inteligente con tiempo suficiente podría hacerlo funcionar más rápido en ensamblaje o en C, pero yo no soy ese programador.


Similar a G-WAN, pero para Cocoa / Objective-C es Bombax, un framework 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 haremos las aplicaciones web algún día.


Tararear...

Parece que estoy un poco tarde en esta discusión, pero acabo de descubrirlo ahora. Y les agradezco a todos ustedes por su aporte.

Soy el autor de G-WAN, lo que deja en claro que he trabajado seriamente en este asunto: G-WAN es más rápido que todos los otros servidores web (sin procesamiento) y todos los demás servidores de aplicaciones web (cualquier procesamiento que pueda imaginar).

Sí, ANSI C también permitió procesar más contenido estático, con CPUs menos potentes (ANSI C no se trata solo de hacer volar los contenidos dinámicos).

Por cierto, G-WAN usa scripts de C (no se necesitan compilador de C y enlazador) por lo que el ciclo / demora de compilación / vinculación 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 sorpresa, los lenguajes de scripting 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 quiera hacer.

Piensa en cómo hacer ''bonitos miles'' en:

DO#

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

Java

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

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

El "..." significa que es necesaria cierta 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 está muy lejos), encontrar la API correcta es un desafío en sí mismo. El tiempo perdido para encontrar esto (y luego para averiguar qué tan mal se implementó la llamada API nativa ), el momento de aprender por la próxima vez que lo necesite, todo este tiempo lo está privando del tiempo necesario para resolver su solicitud problemas.

He leído (arriba) que PHP es más conciso que ANSI C? ¿Por qué entonces usar "//:: this is a comment ::" lugar de "// this is a comment" ? ¿Por qué tener una sintaxis de "bonitos miles" tan estúpidamente compleja?

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 él:

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

¿Realmente crees que el mismo código en ANSI C sería más complejo? No, sería inmensamente más simple y más 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 vinculen cadenas de varias líneas con un ''.''

ANSI C no tiene este requisito ahora completamente estúpido (obsoleto).

Entonces, ¿fue el progreso tan obvio reclamado por las lenguas modernas? Todavía lo estoy buscando.

Sinceramente,

Pierre.


Tienes que amar lo que estás haciendo para lograr resultados. Se crearon idiomas como java y php con mucho esfuerzo para facilitar la vida de las personas. Php especialmente ha beneficiado a muchos programadores web autoaprendidos hoy en día. Puede ver el tipo de soporte que tiene en el mundo del desarrollo web.

Java iam seguro fue escrito para ayudarte en todo lo que puede ser posible en el mundo de hoy. El enorme libro es una clara indicación, y es una bestia si también se avecina para el desarrollo web. Lo mismo aplica para Python. Estos son tan fantásticos idiomas y plataformas. No es de extrañar que sean muy populares.

Soy un devoto de C y en parte se debe a ciertas limitaciones que me impidieron echar un vistazo a otros idiomas como php. Estoy escribiendo en C todos los días y todos los días me siento orgulloso de e y aprender algo nuevo también. Esto me hace sentir muy bien y también he comenzado a aprender cómo C era la opción predeterminada al escribir aplicaciones para sitios web a través de Cgi. Esto se abstrae en otras plataformas y cuando desarrolla sitios web que tienen que ver con bases de datos y servicios web, necesita saber lo que está sucediendo detrás de escena.

Sin embargo, si sabe todo eso y aún desea utilizar un lenguaje de scripting, debe haber una razón válida, y no necesitamos que nadie lo desaconseje.


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 o 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 scripting.
  5. Soy eco y quiero reducir la huella de carbono de mi aplicación.

G-WAN ejecuta código como scripts, sí scripts C como Play! Framework hace por Java. G-WAN es muy rápido y tiene una API fácil. G-WAN hace posible usar 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 travieso puede crear un sitio con espagueti PHP :-) Hay detectores de fugas e incluso recolectores de basura para C.


  • es securecoding.cert.org/confluence/display/seccode/…
  • es difícil de leer
  • es difícil de mantener, el tiempo de desarrollo es más lento en el orden de una magnitud
  • la mayor parte de tu contenido web está probablemente vinculado a E / S, por lo que la velocidad de aceleración ni siquiera importa, especialmente cuando usas un lenguaje rápido como Java o C #