¿Cuál es el problema con los idiomas que se compilan en JavaScript?

¿Cuál es el problema con los idiomas que se compilan en JavaScript?

El hecho de que compilan en JavaScript, otro lenguaje de alto nivel, en lugar de algún tipo de código de bytes de bajo nivel que podría ejecutar una máquina virtual dentro del navegador. Además, algunos de ellos son superconjuntos directos de JavaScript, lo que significa que conservan todas las características de mierda para la compatibilidad con versiones anteriores.

¿Por qué nadie nos obliga a usar otro lenguaje que compila a JavaScript, a pesar de que JavaScript tiene tantos defectos?

Porque no es así como funciona la realidad. Hay una increíble cantidad de infraestructura web que depende completamente de JavaScript en este momento. Si usted, como desarrollador de navegadores web, se acerca y dice “bueno, muchachos, ya no pueden usar JavaScript en sus páginas web”, la gente llorará de risa durante unos quince minutos y luego les dirá que se vayan a la mierda, mientras cambian a otro navegador que aún admite JavaScript. Para que se elimine de nuestras vidas, primero debemos reemplazar JavaScript en aproximadamente el 99% de su cuota de mercado actual.

¿Por qué nadie contribuye activamente a garantizar que javascript desaparezca con su diseño horrible como todos dicen?

¡Pero lo hacen! WebAssembly está destinado a ser el bytecode de bajo nivel que acabo de mencionar, y cuenta con el respaldo de personas de Google, Apple, Mozilla Foundation y Microsoft, es decir, los proveedores de navegadores web más grandes del mundo. Es casi seguro el camino a seguir para esta industria. Sin embargo, JavaScript no desaparecerá pronto.

La razón por la que la gente se acerca a JavaScript para el desarrollo web es muy simple: JavaScript es el único idioma nativo del navegador web, por lo que piensan que no tienen otra opción . Es un trabajo de estafa fantástico, un desafortunado golpe de relaciones públicas: ver El fenómeno JavaScript es una psicosis masiva.

Hay mucha actividad para mejorar la situación. Los esfuerzos de ECMA TC39 para uno, a pesar de que fallan en un nivel fundamental. Desde ES3 hasta ES6, todavía no han reparado las fallas más notorias de JavaScript porque no pueden (por temor a romper la red). No solo eso, sino que TC39 está acumulando características como que no hay mañana con la vana esperanza de poner lápiz labial en un cerdo. La especificación de idioma para ES6 tiene 545 páginas. Para ES5.1, era “solo” 245 páginas. ES3 tenía solo 180 páginas. ¡JavaScript es ahora más de 3 veces más grande que antes! ¿Qué pasó con ese lenguaje ligero y ventoso que a todos les gustaba usar porque era tan “fácil de aprender”?

Me estremezco al pensar qué tan grandes serán ES7 y ES8.

También hay WebAssembly (o WASM), que parece muy prometedor. Sin embargo, puede llevar unos años más, y puede ser complicado reunir el soporte de proveedores de Apple, Google, Microsoft y Mozilla.

Mientras tanto, tenemos muchos maravillosos idiomas para elegir: The Super Surrogates of JavaScript. Mi favorito es Amber Smalltalk, pero también puedes elegir ClojureScript, Dart, Elm, Haxe, Opal o Scala.js, todas excelentes opciones. En efecto, estaría usando JavaScript como el “lenguaje ensamblador” de la web. Esto no es diferente del uso de lenguajes como C y Go que se compilan en lenguaje ensamblador real, que los desarrolladores rara vez tienen que mirar .

Excepto por los tontos que han sido absorbidos por la adopción de este horrible lenguaje, no creo que valga la pena soportar el nivel de apoyo de la comunidad JavaScript, ya que se ha ofrecido otra respuesta. ¡Además, la razón por la que necesita tanto apoyo y orientación de la comunidad JavaScript es porque es un lenguaje de mierda! Algunos idiomas transpilados tienen muy buen soporte de la comunidad, al menos lo suficiente para superar los parches. ¡Con JavaScript, siempre tendrá parches ásperos porque JavaScript es un campo minado digital!

No está claro que haya un problema con los lenguajes que se compilan en JavaScript, al menos no uno que sea significativo o inherente.

Dichos lenguajes (por ejemplo, ClojureScript, F # / Fable) tratan a JavaScript como una “máquina virtual” de una manera similar en principio a Java o Clojure y la JVM.

Si JavaScript es “simplemente otra máquina”, los principales problemas reales son el rendimiento y la capacidad:

  • ¿Es lo suficientemente rápido?
  • ¿Tiene todas las capacidades necesarias?

El problema de la velocidad no es en gran medida un problema. Los optimizadores de JavaScript como Google Closure Compiler eliminan todos los elementos innecesarios, lo comprimen y lo optimizan de otras maneras.

Cuando combina esto con “cada navegador” ejecuta su parte del sistema en una computadora separada y las velocidades modernas de incluso los dispositivos menos capaces como los teléfonos, termina con un excelente rendimiento en comparación con hace solo unos años desde las máquinas de escritorio.

En su mayor parte, JavaScript puede hacer lo necesario.

Entonces, uno de los mayores problemas es la depuración de esa masa comprimida y casi ininteligible de JavaScript optimizado.

Esto se hace a través de “mapas fuente”: el mapa fuente conecta el JavaScript optimizado con las declaraciones originales del lenguaje fuente “sin compilar”.

En última instancia, esto no es tan malo (para el programador) que compilar un lenguaje ensamblador de lenguaje de alto nivel (como se hizo una vez) y luego compilarlo en código máquina.

Por desagradable que sea JavaScript como lenguaje, tiene muchas posibilidades de ser la “plataforma del futuro”.

Parece que hasta ahora nadie ha mencionado TypeScript. Angular 2 empuja a los desarrolladores a escribir sus programas en TypeScript, que es un superconjunto de JavaScript con características adicionales como las que se ven en lenguajes clásicos de alto nivel como Java y C #. Estas características incluyen

  • mecanografía fuerte,
  • clases
  • herencia clásica,
  • interfaces,
  • interfaces invocables,
  • genéricos
  • anotaciones
  • variables miembro de clase,
  • palabras clave públicas, protegidas y privadas,
  • inferencia de tipos,
  • sobrecarga de funciones,
  • miembros estáticos,
  • y mucho más.

Los programas de TypeScript luego se transpiran (simplifican) en JavaScript.

Además, ECMA ha estado haciendo mejoras anuales a ECMAScript, de las cuales JavaScript es una implementación. Las mejoras más recientes a ECMAScript incluyen

  • clases
  • herencia clásica,
  • bloque de enlaces,
  • soporte unicode,
  • manejo mejorado de expresiones regulares,
  • literales de plantilla,
  • funciones de flecha / lambda,
  • para-de bucle,
  • asignar método para crear mixins,
  • desestructuración,
  • símbolos,
  • conjuntos y mapas,
  • funciones generadoras y objetos iteradores,
  • matrices escritas,
  • promesas
  • proxies y trampas,
  • módulos,
  • operador de exponenciación,
  • y mucho más.

“Como todos dicen”. Primero, eso no es “todo el mundo”, algunas personas piensan que JS es el mejor lenguaje jamás hecho … going No ir tan lejos, una vez que conoces las trampas (las “partes malas”) que debes evitar (lo que generalmente es fácil), y “Buenas partes” (por ejemplo, su naturaleza funcional), no es tan horrible e incluso puedes disfrutar escribiendo JS.
Segundo, no escuche lo que dice “todo el mundo”, juzgue usted mismo, leyendo buenos artículos o buenos libros como “JavaScript, las partes buenas”.

Dicho esto, otros idiomas también pueden ser agradables. y la mayoría de ellos, hoy en día, pueden compilarse a JS (mientras esperan que WASM sea universal …). Pero un “problema”, como usted pregunta, es que el rendimiento puede ser subóptimo, y algunos idiomas requieren un gran tiempo de ejecución (¡hasta 1 MB!) Para emular su biblioteca estándar.

¡Tenemos muchos ingenieros de software inteligentes que intentan solucionar los defectos inherentes de JavaScript creando nuevos lenguajes que se trasladan a JavaScript, lo que resulta en la proliferación de nuevos idiomas!

La verdad es que, si tuviera que usar los recursos proporcionados por las comunidades de código abierto, ¿por qué no volvería a JavaScript simple para que al menos obtuviera el apoyo y la ayuda de todos en lugar de quedar atrapados con un número limitado de élites que ¡importa tanto perfeccionar su lenguaje de programación utópico en lugar de resolver los problemas reales!

Todo el lenguaje se compila en un conjunto de trabajo. A veces es código de máquina. A veces es jvm. ¿Por qué no compilar a Javascript?

Primero por qué Javascript. Es realmente frecuente por ahí. Otras opciones no son implementadas directamente por los navegadores. Sí, son posibles otras opciones. Personalmente, no puedo recomendarlo. Trate javascript como un jvm.

Ahora la afirmación. Compila a JavaScript, por lo tanto, su idioma sigue siendo una mierda. Como señala Puneet, escribir mecanografiado resuelve muchos de los problemas de JavaScript. Esto es exactamente por qué lo uso. Sigue a JavaScript, por lo que los ejemplos aún funcionan para todas las bibliotecas y el soporte es increíble.

¿Tiene que estar basado en JavaScript? De ningún modo. Las secuencias de comandos de Dart y Coffee no siguen a JavaScript, solo se compilan.

De hecho, hay un compilador de llamadas a javascript. Tome viejos juegos de consola y ejecute el.in.su navegador. No hay correlación con javascript aquí.

Estás cuestionando JavaScript en un momento en que es uno de los idiomas más preferidos para aprender. React.JS, Angular.js o incluso el servidor Node.js o Angular 2: ¡la próxima década será la década de JavaScript, ya que ofrecerá una CARA para que el mundo se dé cuenta! Estoy de acuerdo en que tiene sus propios defectos y hubo un momento en que lo subestimé, pero ahora me veo obligado a investigarlo todos los días. ¡Las cosas cambian y tenemos que evolucionar con eso!

No hay nada de malo con los lenguajes que compilan a Javascript … (aparte de que te pierdes la diversión de trabajar con Javascript y algunas de las bibliotecas locas que obtienes con npm)

Dicho esto, Javascript no es un lenguaje horrible, es un gran idioma, es simplemente diferente … Y está mejorando, y con es6 se convirtió en una herramienta muy buena, tan buena que la usamos en lugares donde también podemos usar otros idiomas. electron etc… => elegimos Javascript incluso cuando hay otros idiomas disponibles, no solo porque el navegador nos hizo usarlo, realmente nos encanta usar Javascript.

Javascript moderno tiene una gran comunidad de código abierto, tiene excelentes herramientas para trabajar, es un placer trabajar con objetos en Javascript y puedes construir cosas con él en poco tiempo.

Solo necesita aprender a usarlo y luego juzgar …

¿Por qué no usamos niknames fáciles de recordar para nuestros teléfonos en lugar de esos largos números torpes? Javascript se ha convertido en un estándar y, como tal, nos vemos obligados a cumplirlo. No me malinterpreten, Javascript es un lenguaje muy bueno di-per-se, pero el entorno es horrible (en su mayoría navegadores cada uno con su propia interpretación diferente del idioma). De todos modos, jamain y muchos otros marcos ya usan javascript como lenguaje de destino, escribes en C # y obtienes un archivo js minimizado.

No hay nada malo con los lenguajes que compilan a JavaScript. Mucha gente los usa.

Incluso C ++ actualmente se compila en un subconjunto de JavaScript a través de WebAssembly: