¿Por qué JavaScript en lugar de una máquina virtual de navegador estándar?


167

¿No tendría sentido admitir un conjunto de lenguajes (Java, Python, Ruby, etc.) a través de una máquina virtual estandarizada alojada en el navegador en lugar de requerir el uso de un lenguaje especializado, realmente, un paradigma especializado? solo para scripting de cliente?

Para aclarar la sugerencia, una página web contendría código de bytes en lugar de cualquier lenguaje de nivel superior como JavaScript.

Entiendo la realidad pragmática de que JavaScript es simplemente con lo que tenemos que trabajar ahora debido a razones evolutivas, pero estoy pensando más en el largo plazo. Con respecto a la compatibilidad con versiones anteriores, no hay razón para que JavaScript en línea no pueda ser compatible simultáneamente por un período de tiempo y, por supuesto, JavaScript podría ser uno de los idiomas admitidos por la máquina virtual del navegador.


17
No sé por qué esto está siendo rechazado. ¡Pensé que era una buena pregunta!

11
Porque es más una queja que una pregunta.
Dustman

66
Se debe a la idea de que javascript no es un lenguaje real, o no es tan bueno como otros idiomas. Ninguno de estos ha sido cierto desde los primeros días, pero la percepción "sucia" persiste actualmente.
Adam Davis

43
Wow, nunca he visto a la comunidad SO fallar tan completamente. Las únicas respuestas que incluso abordan la idea propuesta aquí son hasta el fondo, siendo rechazadas, mientras que las respuestas innecesariamente "defendiendo a JS" están recibiendo todo el amor. Esta pregunta no ataca a JS, simplemente aboga por la elección. Simplemente dice: "lo que sea que pienses de JS, ¿no sería bueno poder usar otros idiomas también si los prefieres?". ¿Qué te pasa?
Jordi

44
Este es un problema importante con StackOverflow que permite realizar ediciones en el futuro después de que se hayan proporcionado varias respuestas. La pregunta original formulada es más relevante para las respuestas principales, mientras que el resto aborda el "nuevo espíritu" de la pregunta después de las ediciones.

Respuestas:


28

Bueno, sí. Ciertamente, si tuviéramos una máquina del tiempo, regresar y asegurarnos de que muchas de las características de Javascript se diseñaron de manera diferente sería un pasatiempo importante (eso, y garantizar que las personas que diseñaron el motor CSS de IE nunca entraran en TI). Pero no va a suceder, y estamos atrapados con eso ahora.

Sospecho que, con el tiempo, se convertirá en el "lenguaje de máquina" para la web, con otros lenguajes y API mejor diseñados que se compilan (y se adaptan a diferentes debilidades del motor de tiempo de ejecución).

Sin embargo, no creo que ninguno de estos "lenguajes mejor diseñados" sea Java, Python o Ruby. Javascript es, a pesar de la capacidad de ser utilizado en otros lugares, un lenguaje de programación de aplicaciones web. Dado ese caso de uso, podemos hacerlo mejor que cualquiera de esos idiomas.


54
-1 para el comentario del equipo IE CSS. IE6 no estaba mal cuando se lanzó, su principal competidor fue el software de basura más problemático que se haya escrito. Los ataques personales, aunque a veces son divertidos, no hacen del mundo un lugar mejor.
erikkallen

55
No podría estar en desacuerdo con su evaluación de JavaScript como "... un lenguaje de programación de aplicaciones web ..." menos. Es un lenguaje excelente y flexible con mucha más aplicabilidad que eso.
TJ Crowder

2
@TJ Crowder: ITYM "¿No podría estar más [...] en desacuerdo"?
Christoffer Hammarström

2
@Jaroslaw Szpilewski ¿El fanatismo desvergonzado de JS? ¿Cometiste mal sobre esto, pensando en otra publicación? Además, para @erikkallen, el comentario del equipo IE CSS fue lo que comúnmente se conoce como "una broma".
Adam Wright

2
Alguna "clarividencia" en esta respuesta: ahora tenemos CoffeeScript.
andref

19

Creo que JavaScript es un buen lenguaje, pero me encantaría tener una opción al desarrollar aplicaciones web del lado del cliente. Por razones heredadas estamos atascados con JavaScript, pero hay proyectos e ideas que buscan cambiar ese escenario:

  1. Google Native Client : tecnología para ejecutar código nativo en el navegador.
  2. Emscripten : compilador de bytecode LLVM a javascript. Permite que los idiomas LLVM se ejecuten en el navegador.
  3. Idea: .NET CLI en el navegador, por el creador de Mono: http://tirania.org/blog/archive/2010/May-03.html

Creo que tendremos JavaScript durante mucho tiempo, pero eso cambiará tarde o temprano. Hay tantos desarrolladores dispuestos a usar otros idiomas en el navegador.


LLVM podría ser una respuesta a todo esto. Ya hay una gran cantidad de idiomas (Python, Ruby, incluso Java) con soporte para compilar a LLVM, y LLVM puede compilar a Javascript, por lo que al menos podríamos obtener soporte de LLVM automático en los navegadores simplemente compilando a JS. Por supuesto, LLVM no se puede optimizar para todos los paradigmas de programación y lenguajes específicos, por lo que el rendimiento no será el mismo que 100% nativo, pero los JIT / Intérpretes de Javascript, incluso teniendo en cuenta los avances recientes, siempre han sido lentos en relación con el nativo de todos modos .
facuq

18

Respondiendo la pregunta : No, no tendría sentido.

Actualmente, las cosas más cercanas que tenemos a una VM multilingüe son JVM y CLR. Estas no son exactamente bestias ligeras, y no tendría sentido intentar incrustar algo de este tamaño y complejidad en un navegador.

Examinemos la idea de que podría escribir una nueva VM multilenguaje que sería mejor que la solución existente.

  • Estás atrasado en la estabilidad.
  • Estás atrasado en la complejidad (mucho, mucho, porque estás tratando de generalizar en varios idiomas)
  • Estás atrasado en la adopción

Entonces, no, no tiene sentido.

Recuerde, para admitir estos idiomas, tendrá que despojar a sus API de algo feroz, cortando cualquier parte que no tenga sentido en el contexto de un script de navegador. Aquí hay que tomar una gran cantidad de decisiones de diseño, y una gran oportunidad de error.

En términos de funcionalidad, probablemente solo estamos trabajando realmente con el DOM de todos modos, por lo que este es realmente un problema de sintaxis y lenguaje idom, en cuyo punto tiene sentido preguntar: "¿Realmente vale la pena?"

Teniendo en cuenta, lo único de lo que estamos hablando es de secuencias de comandos del lado del cliente, porque las secuencias de comandos del lado del servidor ya están disponibles en el idioma que desee. Es un campo de programación relativamente pequeño, por lo que el beneficio de incorporar múltiples idiomas es cuestionable.

¿Qué idiomas tendría sentido incorporar? (Advertencia, sigue material subjetivo)

Introducir un lenguaje como C no tiene sentido porque está hecho para trabajar con metal, y en un navegador no hay mucho metal realmente disponible.

Introducir un lenguaje como Java no tiene sentido porque lo mejor de todo es las API de todos modos.

Introducir un lenguaje como Ruby o Lisp no tiene sentido porque JavaScript es un poderoso lenguaje dinámico muy cercano a Scheme.

Finalmente, ¿qué fabricante de navegadores realmente quiere admitir la integración DOM para múltiples idiomas? Cada implementación tendrá sus propios errores específicos. Ya hemos pasado por el fuego lidiando con las diferencias entre MS Javascript y Mozilla Javascript y ahora queremos multiplicar ese dolor cinco o seis veces.

No tiene sentido


Una respuesta bastante subjetiva, pero no quería votar porque usted plantea algunos buenos puntos (y la respuesta original es más como un debate de inicio de todos modos).
Gerbrand

2
No creo que la máquina virtual en el navegador sea demasiado pesada. Por supuesto, ya existe como Silverlight y Applets. Este último no logró ganar popularidad, creo que principalmente debido al mal momento y las estupideces técnicas que se resuelven en su mayoría. Permitir cualquier idioma entre la etiqueta del script (con restricciones) sería bastante bueno, y ciertamente no es imposible ni poco práctico.
Gerbrand

2
Pesadez (MB)? Probablemente esta bien. Pesadez (complejidad)? Manera demasiado pesada. En cualquier máquina virtual multilingüe que tenga, tendrá implementaciones de lenguaje en la parte superior (por ejemplo, JRuby / IronRuby, Clojure, Jython / IronPython), etc. O bien la JVM come la complejidad o los implementadores del lenguaje.
el feliz idiota

Se necesitaría una cantidad asombrosa de trabajo para volver a implementar varios idiomas para múltiples plataformas nuevas (IE / Firefox / Safari ...). Y los idiomas también cambian. "¿Esta página solo es visible en un navegador Ruby 1.9"? Por favor no.
el feliz idiota

44
No creo que estés respondiendo la pregunta correctamente, solo estás afirmando por qué crees que otros idiomas no son adecuados para lo que hace javascript en el navegador en este momento. Un código de bytes universal adecuado para la web sería algo en lo que se compilan otros idiomas, si ese idioma es útil dependería de su creador, no el código de bytes web, muchos idiomas ya hacen esto por cierto compilando en javascript (es decir, dart).
Timoteo el

14

En Windows, puede registrar otros idiomas con Scripting Host y tenerlos disponibles para IE. Por ejemplo, VBScript es compatible de fábrica (aunque nunca ha ganado mucha popularidad, ya que para la mayoría de los propósitos es incluso peor que JavaScript).

Las extensiones Python win32 permitieron agregar Python a IE de esta manera con bastante facilidad, pero no fue realmente una buena idea, ya que Python es bastante difícil de proteger: muchas características del lenguaje exponen suficientes ganchos de implementación para permitir que una aplicación supuestamente restringida se rompa .

Es un problema en general que cuanto más complejidad agregue a una aplicación orientada a la red como el navegador, mayor será la probabilidad de problemas de seguridad. Un montón de nuevos idiomas sin duda encajarían en esa descripción, y estos son nuevos idiomas que también se están desarrollando rápidamente.

JavaScript es un lenguaje feo, pero a través del uso cuidadoso de un subconjunto selectivo de características y el soporte de bibliotecas de objetos adecuadas, generalmente puede hacerse bastante tolerable. Parece incremental, las adiciones prácticas a JavaScript son la única forma en que es probable que las secuencias de comandos web avancen.


12

Definitivamente agradecería una máquina virtual independiente del idioma estándar en los navegadores (preferiría codificar en un idioma estáticamente escrito).

(Técnicamente) Es bastante factible gradualmente: primero un navegador importante lo admite y el servidor tiene la posibilidad de enviar bytecode si la solicitud actual es del navegador compatible o traducir el código a JavaScript y enviar JavaScript de texto sin formato.

Ya existen algunos lenguajes experimentales que se compilan a JavaScript, pero tener una VM definida permitiría (tal vez) un mejor rendimiento.

Sin embargo, admito que la parte "estándar" sería bastante complicada. También habría conflictos entre las características del lenguaje (por ejemplo, tipeo estático frente a dinámico) con respecto a la biblioteca (suponiendo que lo nuevo usaría la misma biblioteca). Por lo tanto, no creo que vaya a suceder (pronto).


10

Si siente que se está ensuciando las manos, se le ha lavado el cerebro o todavía siente los efectos posteriores de los "años DHTML". JavaScript es muy poderoso y se adapta bien para su propósito, que es guiar la interactividad del lado del cliente. Es por eso que JavaScript 2.0 tiene tan mala reputación. Quiero decir, por qué paquetes, interfaces, clases y similares, cuando esos son claramente aspectos de los lenguajes del lado del servidor. JavaScript está bien como lenguaje basado en prototipos, sin estar completamente orientado a objetos.

Si hay una falta de uniformidad en sus aplicaciones porque el lado del servidor y el lado del cliente no se comunican bien, entonces es posible que desee reconsiderar cómo diseña sus aplicaciones. He trabajado con sitios web y aplicaciones web extremadamente robustos, y nunca he dicho una vez, "Hmm, realmente desearía que JavaScript pudiera hacer (xyz)". Si pudiera hacer eso, entonces no sería JavaScript, sería ActionScript o AIR o Silverlight. No necesito eso, y tampoco la mayoría de los desarrolladores. Esas son buenas tecnologías, pero intentan resolver un problema con una tecnología, no una ... bueno, una solución.


13
¿Cómo puedes decir que JavaScript no está orientado a objetos completos? Sin duda, es uno de los lenguajes más orientados a objetos que conozco. Todo en JavaScript es un objeto, incluso funciones. Es solo que OOP en JavaScript no se parece a OOP en muchos otros idiomas.
Rene Saarsoo

2
OOP no es inherente a JavaScript. No tiene paquetes, interfaces, clases abstractas o sobrecarga de métodos integrados en el núcleo, y no puede extender un objeto, solo el prototipo de un objeto, lo que lo hace técnicamente basado en prototipos, no basado en OOP.

3
Muy mal en eso. "Protype" es un patrón de diseño (Gamma et. Al., Pp 117 - 126). Como recordará, los patrones de diseño giran en torno a diseños comunes en la programación orientada a objetos. Y solo porque el idioma no tenga las mismas características que otros lenguajes OOP no significa que no sea OOP.
Dustman

13
No estás completamente equivocado, creo que la mejor manera de decirlo es que JS no está basado en clases OO, es prototipo OO.
Juan Mendes

14
1. Javascript es completamente OOP. OOP es sobre objetos, no sobre clases. 2. Puede extender un objeto en JavaScript, ese es el objetivo de la programación orientada a objetos Prototypal. 3. No está respondiendo la pregunta, la pregunta no está atacando a JS, solo está pidiendo elección. Creo que JS es un gran lenguaje, pero me encantaría tener otras opciones al programar en el navegador.
Manuel Ceron

7

No creo que una VM web estándar sea tan inconcebible. Hay varias maneras de introducir un nuevo estándar de VM web con gracia y con soporte heredado completo, siempre y cuando se asegure de que cualquier formato de código de bytes de VM que use pueda descompilarse rápidamente en JavaScript, y que la salida resultante sea razonablemente eficiente ( Incluso iría tan lejos como para adivinar que un descompilador inteligente probablemente generaría un javascript mejor que cualquier javascript que un humano pudiera producir por sí mismo).

Con esta propiedad, cualquier formato de máquina virtual web podría descompilarse fácilmente en el servidor (rápido), en el cliente (lento, pero posible en casos en los que tiene un control limitado del servidor), o podría generarse previamente y cargarse dinámicamente ya sea el cliente o el servidor (el más rápido) para navegadores que no admiten de forma nativa el nuevo estándar.

Aquellos navegadores que sí admiten de forma nativa el nuevo estándar se beneficiarían de una mayor velocidad de ejecución para aplicaciones basadas en web vm. Además de eso, si los navegadores basan sus motores de JavaScript heredados en el estándar web vm (es decir, analizar JavaScript en el estándar web vm y luego ejecutarlo), entonces no tienen que administrar dos tiempos de ejecución, pero eso depende del proveedor del navegador .


6

Si bien Javascript es el único lenguaje de script bien soportado desde el que puede controlar la página directamente, Flash tiene algunas características muy buenas para programas más grandes. Últimamente tiene un JIT y también puede generar bytecode sobre la marcha (consulte la evaluación de expresiones de tiempo de ejecución para ver un ejemplo en el que usan flash para compilar expresiones matemáticas introducidas por el usuario hasta el binario nativo). El lenguaje Haxe le brinda una escritura estática con inferencia y con las capacidades de generación de código de bytes que podría implementar casi cualquier sistema de tiempo de ejecución de su elección.


¿Qué me estoy perdiendo con la pregunta? Parece que Flash haría exactamente lo que quiere. No estamos hablando de otro idioma nativo, él quiere una máquina virtual, ¿verdad? Buena respuesta.
mwilcox

6

Actualización rápida sobre esta vieja pregunta.

Todos los que afirmaron que una "página web contendría código de bytes en lugar de cualquier lenguaje de nivel superior como JavaScript" "no sucederá".

Junio ​​de 2015, el W3C anunció WebAssembly que es

un nuevo formato portátil, eficiente en cuanto a tamaño y tiempo de carga adecuado para compilar en la web.

Esto todavía es experimental, pero ya hay algunas implementaciones de prototipos en Firefox todas las noches y Chrome Canary y ya hay algunas demostraciones funcionando .

Actualmente, WebAssembly está diseñado principalmente para ser producido desde C / C ++, sin embargo

A medida que WebAssembly evolucione, admitirá más lenguajes que C / C ++, y esperamos que otros compiladores también lo admitan .

Te dejo echar un vistazo más de cerca a la página oficial del proyecto, ¡es realmente emocionante!


5

Esta pregunta resurge regularmente. mi postura sobre esto es:

A) no sucederá y B) ya está aquí.

perdon, que? Dejame explicar:

anuncio A

una VM no es solo una especie de dispositivo mágico universal. La mayoría de las máquinas virtuales están optimizadas para un determinado idioma y ciertas características de idioma. tome el JRE / Java (o LLVM): optimizado para la escritura estática, y definitivamente hay problemas y desventajas al implementar la escritura dinámica u otras cosas que Java no admitía en primer lugar.

por lo tanto, la "máquina virtual multipropósito general" que admite muchas características del lenguaje (optimización de llamada de cola, tipeo estático y dinámico, foo bar boo, ...) sería colosal, difícil de implementar y probablemente más difícil de optimizar para obtener un buen rendimiento eso. pero no soy diseñador de idiomas o vm guru, tal vez me equivoque: en realidad es bastante fácil, ¿pero nadie tenía la idea todavía? hrm, hrm.

anuncio B

ya está aquí: puede que no haya un compilador de bytecode / vm, pero en realidad no necesita uno. afaik javascript se está completando, por lo que debería ser posible:

  1. crear un traductor del lenguaje X a javascript (por ejemplo, coffeescript)
  2. cree un intérprete en javascript que interprete el lenguaje X (por ejemplo, brainfuck ). Sí, el rendimiento sería abismal, pero bueno, no puedo tenerlo todo.

anuncio C

¿Qué? ¿No había un punto C en primer lugar? porque no hay ... todavía. google NACL. si alguien puede hacerlo, es google. Tan pronto como Google lo haga funcionar, sus problemas se resolverán. solo que puede que nunca funcione, no lo sé. La última vez que lo leí hubo algunos problemas de seguridad sin resolver del tipo realmente complicado.


aparte de eso:

  • JavaScript ha estado allí desde ~ 1995 = 15 años. aún así, las implementaciones del navegador difieren hoy (aunque al menos ya no es insufrible). por lo tanto, si comienza algo nuevo todavía, es posible que tenga una versión que funcione en varios navegadores alrededor de 2035. al menos un subconjunto que funcione. eso solo difiere sutilmente. y necesita compatibilidad libs y capas. Sin embargo, no tiene sentido no tratar de mejorar las cosas.

  • Además, ¿qué pasa con el código fuente legible? Sé que muchas compañías preferirían no servir su código como "tipo de" código abierto. Personalmente, estoy bastante feliz de poder leer la fuente si sospecho que hay algo sospechoso o si quiero aprender de él. ¡Hurra por el código fuente!


4

En efecto. Silverlight es efectivamente eso: una máquina virtual basada en .Net del lado del cliente.


4

Hay algunos errores en su razonamiento.

  1. Una máquina virtual estándar en un navegador estándar nunca será estándar. Tenemos 4 navegadores, y IE tiene intereses en conflicto con respecto al 'estándar'. Los otros tres están evolucionando rápidamente, pero la tasa de adopción de nuevas tecnologías es lenta. ¿Qué pasa con los navegadores en teléfonos, dispositivos pequeños, ...

  2. La integración de JS en los diferentes navegadores y su historia pasada lo lleva a subestimar el poder de JS. Prometes un estándar, pero desapruebas a JS porque el estándar no funcionó en los primeros años.

  3. Según lo dicho por otros, JS no es lo mismo que AIR / .NET / ... y similares. JS en su encarnación actual se ajusta perfectamente a sus objetivos.

A largo plazo, Perl y Ruby podrían reemplazar javascript. Sin embargo, la adopción de esos idiomas es lenta y se sabe que nunca se harán cargo de JS.


3

¿Cómo se define mejor? ¿Lo mejor para el navegador o lo mejor para el desarrollador? (Además, ECMAScript es diferente a Javascript, pero eso es un tecnicismo).

Encuentro que JavaScript puede ser potente y elegante al mismo tiempo. Desafortunadamente, la mayoría de los desarrolladores que he conocido lo tratan como un mal necesario en lugar de un lenguaje de programación real.

Algunas de las características que disfruto son:

  • tratar las funciones como ciudadanos de primera clase
  • ser capaz de agregar y eliminar funciones a cualquier objeto en cualquier momento (no es muy útil, pero alucinante cuando lo es)
  • Es un lenguaje dinámico.

Es divertido tratar y está establecido. Disfrútalo mientras esté cerca porque, aunque puede que no sea el "mejor" para las secuencias de comandos del cliente, sin duda es agradable.

Estoy de acuerdo en que es frustrante al hacer páginas dinámicas debido a incompatibilidades del navegador, pero eso puede ser mitigado por las bibliotecas de interfaz de usuario. Eso no se debe mantener contra JavaScript en sí más de lo que Swing se debe mantener contra Java.


+1: no confundimos problemas de idioma con la interpretación del código del navegador.
JL.

¿Por qué deberías defender a JS, cuando él simplemente pidió una opción de bytecode?
Milind R

3

JavaScript es la máquina virtual estándar del navegador. Por ejemplo, OCaml y Haskell ahora tienen compiladores que pueden generar JavaScript. La limitación no es el lenguaje JavaScript, la limitación son los objetos del navegador accesibles a través de JavaScript y el modelo de control de acceso utilizado para garantizar que pueda ejecutar JavaScript de manera segura sin comprometer su máquina. Los controles de acceso actuales son tan pobres que JavaScript solo tiene acceso limitado a los objetos del navegador por razones de seguridad. El proyecto Harmony está buscando arreglar eso.


3

Es una buena idea. ¿Por qué no dar un paso más allá?

  • Escriba el analizador HTML y el motor de diseño (todos los bits complicados en el navegador, realmente) en el mismo lenguaje VM
  • Publica el motor en la web
  • Sirva la página con una declaración de qué motor de diseño usar y su URL

Luego podemos agregar funciones a los navegadores sin tener que enviar nuevos navegadores a cada cliente: los nuevos bits relevantes se cargarían dinámicamente desde la web. También podríamos publicar nuevas versiones de HTML sin toda la complejidad ridícula de mantener la compatibilidad con todo lo que ha funcionado en un navegador: la compatibilidad es responsabilidad del autor de la página. También podemos experimentar con lenguajes de marcado que no sean HTML. Y, por supuesto, podemos escribir compiladores JIT sofisticados en los motores, para que pueda escribir sus páginas web en el idioma que desee.


No puedo decir si estás bromeando, pero tu idea es realmente genial.
Milind R

3

Agradecería cualquier lenguaje además de javascript como posible lenguaje de script.

Lo que sería genial es usar otros idiomas y luego Javascript. Java probablemente no encajaría muy bien entre la etiqueta, pero serían beneficiosos lenguajes como Haskell, Clojure, Scala, Ruby, Groovy.

Me encontré con una cruz de Rubyscript hace algún tiempo ... http://almaer.com/blog/running-ruby-in-the-browser-via-script-typetextruby y http://code.google.com/p/ruby- en el navegador /
Todavía experimental y en progreso, pero parece prometedor.
Para .Net acabo de encontrar: http://www.silverlight.net/learn/dynamic-languages/ Acabo de encontrar el sitio, pero también parece interesante. Funciona incluso desde mi Apple Mac .

No sé qué tan bueno funciona lo anterior al proporcionar una alternativa para Javascript, pero a primera vista se ve muy bien. Potencialmente, esto permitiría usar cualquier marco Java o .Net de forma nativa desde el navegador, dentro del entorno limitado del navegador.

En cuanto a la seguridad, si el lenguaje se ejecuta dentro de la JVM (o el motor .Net para el caso), la VM se encargará de la seguridad para que no tengamos que preocuparnos por eso, al menos no más de lo que deberíamos para cualquier cosa que se ejecute dentro del navegador.


2

Probablemente, pero para hacerlo tendríamos que conseguir que los principales navegadores los admitan. El soporte de IE sería el más difícil de conseguir. Se usa JavaScript porque es lo único con lo que puede contar que esté disponible.


2

La gran mayoría de los desarrolladores con los que he hablado sobre ECMAScript et. Alabama. terminan admitiendo que el problema no es el lenguaje de scripts, es el ridículo HTML DOM que expone. Combinar el DOM y el lenguaje de secuencias de comandos es una fuente común de dolor y frustración con respecto a ECMAScript. Además, no olvide que IIS puede usar JScript para las secuencias de comandos del lado del servidor, y cosas como Rhino le permiten crear aplicaciones independientes en ECMAScript. Intente trabajar en uno de estos entornos con ECMAScript por un tiempo y vea si su opinión cambia.

Este tipo de desesperación ha estado dando vueltas por algún tiempo. Le sugiero que edite esto para incluir o volver a publicar problemas específicos. Puede ser gratamente sorprendido por algo del alivio que recibe.

Un sitio antiguo, pero sigue siendo un gran lugar para comenzar: el sitio de Douglas Crockford .


Me gustaría saber más acerca de por qué el "HTML DOM" es el punto de dolor
Alex Moore-Niemi

2

Bueno, ya tenemos VBScript, ¿no? ¡Espera, solo IE lo admite!
Lo mismo para su buena idea de VM. ¿Qué sucede si escribo mi página con Lua y su navegador no tiene el analizador para convertirla en bytecode? Por supuesto, podríamos imaginar una etiqueta de script que acepte un archivo de bytecode, que incluso sería bastante eficiente.
Pero la experiencia muestra que es difícil traer algo nuevo a la Web: tomaría años adoptar un cambio radical como este. ¿Cuántos navegadores admiten SVG o CSS3?

Además, no veo lo que encuentras "sucio" en JS. Puede ser feo si los aficionados lo codifican, propagando malas prácticas copiadas en otro lugar, pero los maestros muestran que también puede ser un lenguaje elegante. Un poco como Perl: a menudo parece un lenguaje ofuscado, pero puede hacerse perfectamente legible.


2

Mira esto http://www.visitmix.com/Labs/Gestalt/ : te permite usar python o ruby, siempre que el usuario tenga instalado Silverlight.


"siempre y cuando el usuario tenga instalado Silverlight". bueno, puedo ver un defecto en este.
Origamiguy

Para ser honesto, probablemente sea más fácil hacer eso que Ruby incrustado en ie6 / 7/8/9 / ff / chrome / safari. Heck Chrome ya incluye flash, ¿por qué no SL?
mcintyre321

2

Esta es una muy buena pregunta.

No es el problema solo en JS, ya que está en la falta de buenos IDE gratuitos para desarrollar programas más grandes en JS. Solo conozco uno que es gratis: Eclipse. La otra buena es Visual Studio de Microsoft, pero no es gratuita.

¿Por qué sería gratis? Si los proveedores de navegadores web quieren reemplazar las aplicaciones de escritorio con aplicaciones en línea (y lo desean), entonces tienen que darnos a nosotros, los programadores, buenas herramientas de desarrollo. No puede crear 50,000 líneas de JavaScript con un simple editor de texto, JSLint y un depurador de Google Chrome incorporado. A menos que seas macohist.

Cuando Borland hizo un IDE para Turbo Pascal 4.0 en 1987, fue una revolución en la programación. Han pasado 24 años desde entonces. Vergonzosamente, en el año 2011 muchos programadores todavía no usan la finalización de código, la verificación de sintaxis y los depuradores adecuados. Probablemente porque hay muy pocos IDE buenos.

A los proveedores de navegadores web les interesa crear herramientas adecuadas (GRATIS) para los programadores si quieren que creemos aplicaciones con las que puedan luchar contra Windows, Linux, MacOS, iOS, Symbian, etc.


Visual Studio es gratis, y también tienes código vs, Atom y otros IDEs geniales, creo que simplemente no estás buscando lo suficiente
GideonMax

1

Siendo realistas, Javascript es el único idioma que cualquier navegador usará durante mucho tiempo, por lo que si bien sería muy bueno usar otros idiomas, no puedo ver que suceda.

Esta "VM estandarizada" de la que habla sería muy grande y necesitaría ser adoptada por todos los principales navegadores, y la mayoría de los sitios continuarían usando Javascript de todos modos, ya que es más adecuada para sitios web que muchos otros navegadores.

Tendría que proteger cada lenguaje de programación en esta VM y reducir la cantidad de acceso que cada idioma tiene al sistema, lo que requiere muchos cambios en los idiomas y la eliminación o reimplementación de muchas características. Mientras que Javascript ya tiene esto en mente, y lo ha hecho durante mucho tiempo.



1

En cierto sentido, tener un lenguaje más expresivo como Javascript en el navegador en lugar de algo más general como el bytecode de Java ha significado una web más abierta.


0

Creo que esto no es tan fácil problema . Podemos decir que estamos atrapados con JS, pero ¿es realmente tan malo con jQuery, Prototype, scriptaculous, MooTools y todas las bibliotecas fantásticas?

Recuerde, JS es liviano , aún más con V8, TraceMonkey, SquirrelFish, nuevos motores Javascript utilizados en los navegadores modernos.

También está demostrado : sí, sabemos que tiene problemas, pero tenemos muchos de estos resueltos, como los primeros problemas de seguridad. Imágenes que permiten a su navegador ejecutar código Ruby, o cualquier otra cosa. La caja de arena de seguridad tendría que hacerse desde cero. ¿Y sabes qué? Python amigos ya fallaron dos veces en eso.

Creo que Javascript se revisará y mejorará con el tiempo, al igual que HTML y CSS. El proceso puede ser largo, pero no todo es posible en este mundo.


bueno, que yo sepa, cada verificación de seguridad realizada para el sandbox de JS puede (y generalmente se hace) en el código de bytes como verificar permisos y esas cosas al mirar un montón de texto es difícil de hacer para una computadora. enviar código de bytes al cliente en lugar de JS estándar no debería cambiar eso
GideonMax

0

No creo que "comprenda el problema pragmático de que JavaScript es simplemente con lo que tenemos que trabajar ahora". En realidad es un lenguaje muy poderoso. Tuviste tu applet de Java en el navegador durante años, ¿y dónde está ahora?

De todos modos, no necesita "ensuciarse" para trabajar en el cliente. Por ejemplo, prueba GWT.


0

... Quiere decir...

Java y applet de Java Flash y Adobe AIR, etc.

En general, cualquier marco RIA puede satisfacer sus necesidades; pero por cada uno hay que pagar un precio por usarlo (ej. tiempo de ejecución disponible en el navegador o / y propietario o / y menos opciones que el escritorio puro) http://en.wikipedia.org/wiki/List_of_rich_internet_application_frameworks

Para desarrollar Web con cualquier lenguaje que no sea web, tienes GWT: desarrolla Java, compila a Javascript


1
De ahí la sugerencia de estandarizar una VM para que sea ubicua. Usar JavaScript como un "lenguaje de máquina para la web" parece increíblemente torpe e ineficiente.
newdayrising

Creo que no comprende, el póster original no sugiere que los navegadores deban admitir otros idiomas, sugiere que en lugar de compilar java a js, compile java en una VM.
GideonMax

0

Porque todos ya tienen máquinas virtuales con intérpretes de bytecode, y el bytecode también es diferente. {Chakra (IE), Firefox (SpiderMonkey), Safari (SquirrelFish), Opera (Carakan).

Lo sentimos, creo que Chrome (V8) compila el código de máquina IA32.


0

bueno, considerando que todos los navegadores ya usan una VM, no creo que sea tan difícil crear un lenguaje de VM para la web.
Creo que sería de gran ayuda por algunas razones:
1. dado que el servidor compila el código, la cantidad de datos enviados es menor y el cliente no pierde tiempo compilando el código.
2. Dado que el servidor puede compilar el código en preparación y almacenarlo, a diferencia del cliente que intenta perder el tiempo compilando rápidamente el JS, puede hacer mejores optimizaciones de código.
3. compilar un lenguaje en código de bytes es mucho más fácil que transpilarlo a JS.

Como nota final (como alguien ya dijo en otro comentario), HTML y CSS se compilan en un lenguaje más simple, no estoy seguro si cuenta como código de bytes, pero también puede enviar html y css compilados desde el servidor al cliente que reducir los tiempos de análisis y búsqueda


-1

OMI, JavaScript, el idioma, no es el problema. JavaScript es en realidad un lenguaje bastante expresivo y poderoso. Creo que tiene una mala reputación porque no tiene características clásicas de OO, pero para mí, cuanto más sigo con el surco prototípico, más me gusta.

El problema, como lo veo, son las implementaciones inestables e inconsistentes en los muchos navegadores que estamos obligados a admitir en la web. Las bibliotecas de JavaScript como jQuery contribuyen en gran medida a mitigar esa sensación de suciedad.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.