¿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.
fuente
Respuestas:
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.
fuente
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:
Creo que tendremos JavaScript durante mucho tiempo, pero eso cambiará tarde o temprano. Hay tantos desarrolladores dispuestos a usar otros idiomas en el navegador.
fuente
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.
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
fuente
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.
fuente
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).
fuente
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.
fuente
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 .
fuente
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.
fuente
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
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
Te dejo echar un vistazo más de cerca a la página oficial del proyecto, ¡es realmente emocionante!
fuente
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:
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!
fuente
En efecto. Silverlight es efectivamente eso: una máquina virtual basada en .Net del lado del cliente.
fuente
Hay algunos errores en su razonamiento.
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, ...
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.
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.
fuente
¿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:
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.
fuente
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.
fuente
Es una buena idea. ¿Por qué no dar un paso más allá?
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.
fuente
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.
fuente
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.
fuente
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 .
fuente
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.
fuente
Mira esto http://www.visitmix.com/Labs/Gestalt/ : te permite usar python o ruby, siempre que el usuario tenga instalado Silverlight.
fuente
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.
fuente
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.
fuente
Quizás estés buscando el cliente nativo de Google.
fuente
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.
fuente
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.
fuente
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.
fuente
... 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
fuente
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.
fuente
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
fuente
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.
fuente