¿Por qué no podemos usar un lenguaje de compilación en una aplicación web directamente?

Hay mucho que ganar de un lenguaje compilado / optimizado / vinculado por el navegador de destino cuando sea necesario en lugar de fuera de línea:

  • Compilar fuera de línea es un gran asesino de tiempo, especialmente en un equipo de desarrollo más grande. En su lugar, simplemente puede aplicar sus archivos Javascript (y marcado) y hacer que se ejecute de inmediato.
  • Los navegadores se ejecutan en diferentes arquitecturas de CPU (principalmente Intel x86 y ARM), entonces, ¿en qué código de máquina se debe precompilar el código?
  • Javascript _IS_ compilado en el código de máquina por el navegador, y aparentemente de manera muy eficiente.
  • Al no estar compilado Javascript, no hay un gran “.EXE” que deba cargarse. En cambio, cada biblioteca de códigos se carga por separado (desde un servidor o se almacena en caché localmente) y cuando es necesario. Supongo que la palabra es acoplamiento flojo.
  • Por ejemplo, C, C ++ y Java no son óptimos para la programación front-end, ya que se trata mucho de la manipulación de cadenas y el manejo (a menudo salvaje) de estructuras de datos complejas, y por las razones anteriores también. Además, en la programación front-end es (al menos IMO) un beneficio con un lenguaje que es de tipo suelto.

Sin embargo, en el back-end, ciertamente hay un uso de lenguajes compilados, pero nuevamente C y C ++ serían bastante no óptimos. También dominan los lenguajes interpretados y poco acoplados, con la posible excepción de Java.

Si el navegador consumiera alguna forma de código de byte o similar, se podrían usar muchos idiomas diferentes, pero dudo que a la gente le gustaría cambiar el paradigma de “bits y piezas”.

Porque hasta ahora no ha habido un “compilador” en los navegadores web populares ni una máquina (virtual) que normalmente se consideraría que ejecuta un lenguaje compilado.

Javascript ha sido la única opción de línea principal en TODOS los navegadores (VBScript tuvo una corta vida allí).

WebAssembly o algo así puede ser algún día una mejor opción, pero tenga en cuenta que esta será otra máquina VIRTUAL, no necesariamente algo malo, solo un punto de interés.

Por lo tanto, hoy la única ‘compilación’ es compilar un lenguaje de nivel superior (Clojure / ClojureScript, F # etc.) a JavaScript y tratar al intérprete de JavaScript como una máquina virtual.

Con la compresión y las optimizaciones, así como el mapeo de origen para la depuración a nivel de origen, no es la peor solución posible y en realidad es bastante ingenua y efectiva.

No hay una buena razón para que no sea posible. De hecho, esto ya es posible gracias a Emscripten, un compilador de C ++ que se dirige al navegador. Lo hace produciendo JavaScript altamente optimizado, críptico pero válido, un subconjunto llamado asm.js. Los resultados son simplemente sorprendentes, con velocidades nativas y una sofisticación y complejidad nunca antes vistas que se ejecutan en el navegador.

El siguiente paso es eliminar el intermediario que es JavaScript y reemplazarlo con una máquina virtual adecuada como la máquina virtual Java. De esto se trata Web Assembly.

Voy a suponer que te refieres a un lenguaje compilado, pero como la mayoría de los buenos compiladores están hechos en C y ensamblados (también daré un guiño al lenguaje compilador).

Puede y la tecnología se llama interfaz de puerta de enlace común (CGI).

Tal vez lo malinterpreté, pero con grandes aplicaciones web tal vez el 80-90% se ejecuta en el servidor … o para ser precisos, varios servidores se comunican entre sí. La mayor parte de ese código está escrito en idiomas compilados, incluidos Cobol, C, C ++, Java y muchos, muchos otros.

Supongo que te referías al lenguaje “compilado”. Echa un vistazo a http://webassembly.org/

Debido a que nuestros servidores web no entienden el lenguaje del compilador, solo entienden los lenguajes de secuencias de comandos del lado del servidor, las implementaciones del lenguaje del compilador suelen ser compiladores (traductores que generan código de máquina a partir del código fuente), pero cuando hablamos de las aplicaciones web primero, la solicitud se envía al servidor y luego devuelve el html, así que lo que estoy tratando de decir, no requiere convertirse en código de máquina.