¿Por qué los lenguajes como C no se utilizan para el desarrollo web? ¿Seguramente la velocidad aumenta desde que se compilará sería útil para sitios de carga pesada?¿Por qué se interpretan tantos idiomas web en lugar de compilarse?
Respuesta
Otra buena razón es que en un servidor grande la velocidad de ejecución no es tanto un problema como la velocidad de conexión de todos modos. La mayor parte del tiempo se gasta en enviar y recibir datos, no en números crujientes. Y en realidad, en ciertos servicios web que hacen una gran cantidad de cálculos, el crujido duro es probablemente se ejecute como un programa compilado.
Además, los idiomas interpretados no necesitan compilación (lo que en un proyecto grande puede llevar tiempo), por lo que es más adecuado para el desarrollo generalmente ágil de soluciones web.
Al menos inicialmente, gran parte del trabajo realizado por código de back-end (que supongo que es de lo que estás hablando) estaba orientado al texto. Ellos construyeron páginas directamente desde cero, o por ej. combinando datos de una base de datos con una plantilla.
C no es ... siempre adecuado para el procesamiento de texto. Las cadenas de caracteres C son muy básicas, y aunque el procesamiento de texto en C puede ejecutarse rápidamente, a menudo lleva un poco más de tiempo desarrollarlo y requiere habilidades algo más profundas para hacerlo bien, que los lenguajes que lo ayudan un poco más.
+1 para el eufemismo "C no es ... siempre adecuado para el procesamiento de texto" – MauganRa
C se usó para aplicaciones web desde el principio: escribí varias secuencias de comandos CGI.
Con el tiempo, sin embargo, los lenguajes más productivos (C# y Java, por ejemplo, pero no exclusivamente, por supuesto) han demostrado ser "lo suficientemente eficientes" para las aplicaciones web. Tenga en cuenta que tanto C# como Java se compilan en código intermedio y luego se compilan JIT, logrando un rendimiento de código nativo "aproximado". ¿Por qué querríamos usar C en su lugar?
Incluso los lenguajes tradicionalmente "interpretados genuinamente" como PHP a menudo se compilan en el momento de la ejecución en estos días, que yo sepa. (Mi conocimiento de PHP en particular es de segunda mano. Tal vez siempre se haya compilado ... Y del mismo modo, estoy seguro de que hay plataformas web que todavía se interpretan.)
Lenguajes de script donde la única opción para el desarrollo web desde hace mucho tiempo. Ahora tenemos otras alternativas (Java, .NET ...) por lo que la situación no es tan mala.
C como una plataforma no fue muy exitoso para el desarrollo web, ya que es difícil construir un módulo que podría ser cargado y ejecutado desde un servidor de aplicaciones web /, pero uno de los primeros marco para la creación de aplicaciones web dinámica fue módulos ISAPI para el IIS de Microsoft que se desarrolló principalmente en C++ y donde se compiló.
Puede hacer desarrollo web por cualquier idioma. Puede insertar su propio servidor web para servir http. O bien, puedes hacerlo mediante el clásico CGI. –
Es principalmente porque es rápido y fácil de cambiar sobre la marcha. Los lenguajes compilados requieren un entorno de desarrollo que debe coincidir con el servidor. Con un script puede usar una herramienta ftp y editar el texto directamente y luego guardarlo. Esta capacidad de hacer esto desde cualquier computadora de cualquier sistema operativo o tipo ha salvado mi vida (o la vida de mis sitios web) muchas veces.
Los lenguajes de script tienen las siguientes ventajas sobre C:
- Mucho más rápido desarrollo
- Hoy en día, todas las que se refieren a esta pregunta se compilan en tiempo de ejecución. En algunos casos, esto puede hacer que sean más rápidos que un programa C equivalente, por lo que el rendimiento ya no es un problema.
- Costos de mantenimiento mucho menos
- Puede desarrollar usando métodos ágiles (como pruebas unitarias) que resultan en códigos mucho mejores. Sí, puedes hacer eso en C, también, pero es mucho más esfuerzo.
- Cuando está haciendo un desarrollo web, tiene enormes frameworks que hacen la mayor parte del trabajo por usted.
- Son mucho más abiertos al cambio. Una nueva característica puede tardar tanto como unos minutos en implementarse.
- Si algo no funciona, puede iniciar sesión en su servidor, iniciar un editor de texto en la consola y solucionar el problema, a veces sin tener que reiniciar.
"* Mucho más rápido desarrollo *"? Siento disentir. Realmente depende de ** quién **. Para mí, desarrollar en C++, Java o incluso C es mucho más rápido que desarrollar en cualquier lenguaje de scripting. –
Estoy hablando de dos desarrolladores con un conjunto de habilidades comparable. Por supuesto, un desarrollador de C++ con experiencia es más rápido que un novato de script, pero comenzar un proceso con redireccionamiento de IO en BASH es un trazador de líneas; en C, puede tomar de 10 a 100 líneas, dependiendo de las bibliotecas que pueda tener. –
Gran pregunta. La razón se debe básicamente a la evolución de la web. Piénselo en pasos:
1) Texto básico en la 'red' -> 2) Se agregó 'marcado' al texto -> 3) se forman la etiqueta "centro" y la "marquesina". que progreso !!! -> 4) scripting en el cliente !!! 5) -> hmm ... ¡secuencias de comandos en el servidor!
Si bien formé esta respuesta para ser un poco tonto, es realmente cierto. El interenet, y muy especialmente la "web", ha sido un proceso evolutivo sorprendente. Realmente, requisitos para idiomas más potentes (y más idiomas de alto rendimiento) solo ha sido una cosa más reciente.
Además, mira las herramientas. Hice mi PHP en el bloc de notas (y algunas otras aplicaciones simples). Cuando estaba haciendo desarrollo web por primera vez, mi computadora no tenía suficiente espacio en el disco duro para admitir Visual Studio 2008 :)
Side Point Sin embargo: Ha habido aplicaciones ".exe" (creo que "SunBiz" publicaciones en un 'exe'), y algunas aplicaciones cgi compiladas por un tiempo, pero fueron mucho menos.
La mayoría de las aplicaciones web hablan con una base de datos. La abrumadora mayoría de estas aplicaciones dedican casi todo su tiempo a comunicarse con la base de datos. Por lo tanto, para cualquier solicitud dada a la aplicación, hay una pequeña cantidad de procesamiento en el servidor de aplicaciones y luego una larga pausa mientras se espera la base de datos. Dado que un porcentaje tan pequeño del tiempo de cualquier solicitud se gasta en el código del servidor de aplicaciones real, la optimización de dicho código escribiéndolo en C/C++ obtendrá solo una pequeña mejora, probablemente no notable, en el tiempo de respuesta.
Por lo tanto, en lugar de centrarse en C/C++ y guardar hasta el último ciclo de la CPU, tiene más sentido preocuparse por la productividad del desarrollador. Los desarrolladores son muy caros. Y, por lo general, son mucho más productivos en un lenguaje de scripting o incluso en Java que en C/C++.
Por supuesto, hay excepciones a esto. Y si algunas solicitudes a su aplicación son intensivas en CPU o memoria, deberían escribirse en C/C++. Pero, para el resto de su aplicación, es mejor que se concentre en la optimización de sus algoritmos, estructuras de datos, comunicación con la base de datos y la productividad del desarrollador que en la optimización de su idioma.
Gran respuesta, especialmente la referencia a las excepciones. –
Intenta hacer un análisis/manipulación de cadenas en C an en Perl/PHP y sabrás.
BTW: ¿Por qué tanta gente afirma que el rendimiento ya no es un problema? Puede que no sea un problema para pequeñas páginas web/blogs, pero las aplicaciones web a gran escala aún deben ser ajustadas para el rendimiento (cpu/network/memory), sin importar si están escritas en java, php o ruby.
Debe ser una operación bastante masiva para la optimización de código pesado para pagar - cuando la alternativa es simplemente agregar otro servidor al clúster. Si eres de Google o de Amazon, entonces seguro, un código un 10% más rápido libera miles de CPU. – slim
Un amigo mío tiene un motor de búsqueda para directorios telefónicos y otras cadenas cortas. Utiliza las instrucciones de SSE3 para comparar fuerzas de fuerza bruta con las cuerdas 16 a la vez por núcleo. 3 millones de cadenas se hacen en un segundo tiempo en un escritorio. Tabla de resultados con la aptitud de dB! No se puede hacer en PHP. Es C o noware! – Guge
Eg. Puede desarrollar la aplicación de servidor completa en PHP y luego usar/crear algunas bibliotecas de C para funcionalidades de rendimiento específicas. Esto no es negro o blanco La manipulación y validación de cadenas es una de las características más importantes en el desarrollo web. Fuera de la caja de trabajo, más fácil y más limpio. – Heroselohim
Aquí están mis pensamientos sobre el tema:
- aplicaciones CGI original requería un proceso del sistema operativo de los suyos, que por supuesto es un cerdo de recursos. Intentar agrupar todo en un solo proceso tampoco es fácil con el código nativo, ya que si algo sale mal en una aplicación, podría derribar fácilmente todo el servidor. Estas cosas son mucho más fáciles de manejar con un intérprete o una máquina virtual. Por supuesto, puede hacer lo mismo con el código nativo, pero supongo que sería mucho más difícil implementar el marco. Al final, terminarás implementando algo similar a un intérprete o una máquina virtual.
- Los idiomas interpretados son portátiles en todos los sistemas operativos.
- Por supuesto, el gran beneficio es el aumento productivo que obtiene mediante el uso de un lenguaje moderno.
- El rendimiento es, por supuesto, importante. Sin embargo, los idiomas interpretados o de VM son cada vez mejores a este respecto (con tecnologías como la compilación de JIT) y se están acercando al rendimiento del código nativo. Además, no es justo comparar solo el tiempo pasado durante el proceso de ejecución. Necesita medir toda la secuencia: recepción de solicitud del servidor, delegación en la aplicación adecuada, ejecución, devolución de resultados al servidor. ¿Sería una aplicación nativa más rápida en todos estos?
Mi empresa utiliza C++ (una extensión ISAPI) para nuestra aplicación web. Casi todo se hace en los binarios compilados. También utilizamos un motor de JavaScript para las partes del sistema que requieren secuencias de comandos (sí, JavaScript del lado del servidor). La razón que se cita para este diseño es la velocidad, pero la edad también es un factor ... esta es una antigua base de código. Además, distribuimos nuestro producto a algunos de nuestros clientes para que se alojen ellos mismos, por lo que compilarlo protege nuestro código fuente (muchos idiomas interpretados son trivialmente descompilables, o en el caso de PHP y Perl, nunca compilados en absoluto).
Corrección pedante: PHP/Perl rara vez se almacenan en el disco en forma compilada. Perl se compila en memoria antes de ejecutarse y el formulario compilado * puede * guardarse en el disco, es algo que casi nadie hace. (Supongo que lo mismo es cierto para PHP, pero no sé si es el caso.) –
Con PHP muchas personas usan uno de varios mecanismos de almacenamiento en caché como APC, eaccelerator, etc. para mantener versiones compiladas de scripts en la memoria compartida para todos los hilos del servidor web para usar. No necesariamente se escribe en el disco, pero tampoco se tira. –
Vale la pena señalar que la mayoría de los lenguajes de scripting (Python, Ruby, etc.) enlazan fácilmente -casi triviales- con C. (Acabo de escribir algunas extensiones C para un programa Python, y quedé impresionado con lo fácil era.) Si un sitio web/aplicación web tiene algunos cuellos de botella debido al uso de un lenguaje de script "lento", uno normalmente puede escribir las secciones de rendimiento crítico en un lenguaje más rápido como C. De hecho, eso es lo que las grandes aplicaciones como de búsqueda de google, Facebook, etc., hacen - que escriben la interfaz en un lenguaje de script y hacer el trabajo pesado con otros lenguajes como C
Buena información: 'eso es lo que hacen las aplicaciones grandes como la búsqueda de Google, Facebook, etc. - escriben la interfaz en un lenguaje de scripting y hacen el trabajo pesado con otros lenguajes como C'. +1. – RBT
Así, en lugar de centrarse en C/C++ y ahorrar hasta el último Ciclo de CPU, hace más sentido preocuparse por el desarrollador productividad. Los desarrolladores son muy costosos . Y, por lo general, son mucho más productivos en un lenguaje de scripting o en Java que en C/C++.
Oh, muy, muy cierto. Si el uso de un lenguaje más dinámico afeita a una semana de desarrollador fuera del horario, esa semana de tiempo de programador que no tiene que pagar le comprará un servidor adicional. Tal vez incluso varios servidores, si te gustan muchos baratos en lugar de unas pocas bestias enormes.
Para la mayor parte del mundo (es decir, no Google/Amazon/eBay/etc.), un servidor adicional compensará con creces cualquier pérdida de rendimiento sin procesar que pueda resultar de la elección del idioma.
Muchas de las características extremadamente útiles de los lenguajes dinámicos, como la introspección y funciones como eval() son realmente difíciles/imposibles? para implementar en lenguajes que compilan a código nativo.
Dicho esto, la mayoría de los lenguajes de "scripting" compilan (sobre la marcha) algún tipo de código intermedio que luego se interpreta (Python, Ruby, Perl) o incluso JIT compilado en código nativo (JSP, .NET)
Debido a que la industria sufre de un engaño masivo que la velocidad de ejecución no importa (como lo demuestra la respuesta aceptada).
Creo que la razón real es que los lenguajes interpretados son más fáciles de empezar si usa un marco existente y hacen que parezca fácil y divertido trabajar en una aplicación web.
Hay muchos, muchos casos en los que realmente necesita realizar operaciones de números en aplicaciones web, pero los desarrolladores terminan no haciéndolo (porque son caros) y/o delegan la tarea en un servidor externo: ya sea servidor de base de datos o algún otro servidor.
Esto se puede ver en la reciente proliferación de arquitecturas llamadas "micro servicio".
- 1. Idiomas que se interpretan en Javascript?
- 2. ¿Por qué hay tantos lenguajes de programación?
- 3. ¿Por qué hay tantos puertos de idiomas en .NET con el prefijo 'Hierro'?
- 4. ¿Por qué hay tantos dialectos de expresiones regulares diferentes?
- 5. ¿Por qué se crean tantos "postgres.exe" cuando ejecuto mi aplicación?
- 6. modos ARM y ¿por qué hay tantos?
- 7. ¿Por qué hay tantos flotantes en la API de Android?
- 8. Mvc-Mini-Profiler: ¿Por qué tantos X-MiniProfiler-Ids?
- 9. ¿Por qué hay tantos paréntesis en la macro ÉXITO?
- 10. ¿Por qué Win32-API tiene tantos tipos personalizados?
- 11. ¿Por qué ImmutableList de Guava tiene tantos métodos() sobrecargados?
- 12. ¿Por qué tantos programas tienen un setup.exe y un setup.msi?
- 13. Sitio web en varios idiomas
- 14. ¿Por qué se usa constructor en lugar de funciones?
- 15. ¿Por qué tantos frameworks web MVC favorecen la agrupación de múltiples acciones de controlador en una sola clase?
- 16. ¿Por qué implementar una aplicación web como FastCGI en lugar de un nuevo servidor web?
- 17. Intérpretes e idiomas de tipo dinámico
- 18. ¿Por qué NDEBUG en lugar de RELEASE?
- 19. ¿Por qué bloquear en lugar de buclear?
- 20. ¿Por qué la clase "Assert" tiene tantos métodos aparentemente redundantes? ¿Cuándo se debe usar cada uno?
- 21. ¿Qué idiomas se pueden compilar a javascript?
- 22. ¿Por qué analizadores sintácticos en lugar de solo analizadores configurables?
- 23. ¿Por qué FloatBuffer en lugar de flotar []?
- 24. ¿Por qué Objectify en lugar de JDO?
- 25. ¿Por qué darcs en lugar de git?
- 26. Funciones virtuales en constructores, ¿por qué los idiomas son diferentes?
- 27. ¿Qué idiomas se usan en 404 Budgot de Stack Overflow?
- 28. ¿Por qué no se permite el uso de free() en los idiomas recogidos de basura?
- 29. ¿Por qué se deben escribir intérpretes de idiomas en el idioma de destino?
- 30. ¿Por qué los frameworks web sirven a través de FastCGI/SCGI, en lugar de HTTP?
La cantidad que recompila y las dependencias que necesita recompilar después de eso es lo que rige el tiempo de compilación. El aspecto de recompilación dinámica de un lenguaje de script no es exclusivo en sí mismo, es solo una implementación muy fina del proceso de compilación. –