¿Sería práctica una alternativa estáticamente escrita a JavaScript en las páginas web?


9

La preferencia por la escritura dinámica y estática es en gran medida una cuestión de gustos, y diferentes personas las encuentran más o menos adecuadas en diferentes situaciones.

Mi pregunta es, ¿sería técnicamente posible tener una alternativa estáticamente tipada a JavaScript para aumentar la página web del lado del cliente, etc.?


3
¿Por qué no? `` ``
Josh K

2
¿Estás hablando de un lenguaje hipotético de tipo estático que cada navegador tendría que implementar, o posibilidades ya existentes?
user281377

2
Podrías usar applets de Java, supongo.
David Thornley

@ammoQ ese que mencionas, hipotético
Armand

@ Josh no lo sé. @David LOL, ¡gracias por eso!
Armand

Respuestas:


22

Ciertamente no hay ninguna razón técnica para que tal cosa no pueda existir. No hay nada particular sobre el código del lado del cliente que exija el uso de lenguajes escritos dinámicamente.


1
Dart tiene una escritura estática opcional pero se compila en Javascript ordinario. www.dartlang.com
Nishant George Agrwal

16

Dado que es muy poco probable que otro idioma encuentre una adopción amplia, su mejor opción sería crear una versión estática de JavaScript (es decir, un idioma cercano a Java) y un preprocesador que lo convierta a JavaScript normal.

Por ejemplo, su script se ve así:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

y el preprocesador verifica que cada variable, función, objeto, etc. se use correctamente de acuerdo con su tipo, y cambia el script a

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

que cada navegador puede manejar.


55
+1 para un enfoque pragmático
Gary Rowe

Realmente esta pregunta no se trata de pragmatismo, se trata de teoría. Actualizará.
Armand

2
También sugeriría usar inferencia de tipos.
Oliver Weiler

Método auxiliar: Muy buena sugerencia, pero no cambio mi ejemplo ahora, ya que la inferencia de tipos haría que la versión estática sea muy similar a la versión dinámica, ya que el ejemplo es muy simple.
user281377

44
No creo que un javascript con tipo estático esté muy cerca de java, aparte de sintácticamente. Javascript y Java tienen muchas diferencias más allá de la escritura estática frente a la dinámica: OO basado en la clase y en el prototipo para uno. Dado que su código de muestra parece estar basado en clases, diría que "staticjavascript" es un nombre inapropiado para ese lenguaje y debería llamarse algo así como "Java del lado del cliente". Sin embargo, +1 para compilar en javascript (por cierto, Google Web Toolkit compila java en javascript).
sepp2k

8

Mi pregunta es, ¿sería técnicamente posible tener una alternativa estáticamente tipada a JavaScript para aumentar la página web del lado del cliente, etc.?

Por supuesto. El Google Web Toolkit compila estáticamente escrito en Java a JavaScript ... Sólo pensar en ello: toda la belleza y la flexibilidad de Java, con todo el rendimiento de JavaScript generado por máquina!

Sin embargo, en serio, podrías hacer esto para todo tipo de lenguajes, y muchos lo han intentado (también hay compiladores para C y C #). Que el resultado final sea práctico o no depende de lo que intente lograr: Google busca una plataforma consistente para desarrollar aplicaciones del lado del cliente muy grandes y tiene su propio motor JavaScript para arrancar; Es muy posible que la adopción de una bestia para los efectos de desplazamiento y la extraña llamada AJAX introduzcan mucho más dolor que simplemente aprender a vivir con un poco de código sin tipo ...


3
No puedo decir si estás bromeando sobre los "beneficios" de GWT. Si es así, bravo. Trabajar con GWT fue una de las experiencias más enloquecedoras de mi vida.
Nicole

@Renesis: ¿Como si trabajar con Javascript y las compatibilidades del navegador no fuera ya enloquecedor? Pero tiene características ingeniosas, como descargar varias imágenes en una sola imagen y luego cortarlas en el cliente.
Macneil

1
@Macneil Puede que ya hayan solucionado esto, pero cuando estaba trabajando con Sprites casi negó todos los beneficios porque automáticamente escribió otras propiedades de fondo CSS que quizás no haya deseado, por lo que tuvo que abarrotar su CSS cada vez para anularlo. .
Nicole

6

La mayoría de los beneficios de los lenguajes de tipo estático se obtienen en tiempo de compilación. Si el idioma se va a interpretar en el cliente, se pierden muchas de esas ventajas. Si los compila en el servidor, debe descubrir cómo cargarlos y ejecutarlos en el cliente (piense en los controles ActiveX). Podría optar por un enfoque híbrido (compilar en alguna forma simbólica intermedia), pero luego, básicamente, volverá a los applets de Java.


2
+1 por explicar una posible razón por la que no , no solo responder si es posible.

4

Ya existe

ActionScript 3 (el lenguaje de secuencias de comandos detrás de Flash y Flex) es un dialecto de ECMAScript que implementa tipos fuertes, y puede usarlo más o menos del mismo modo del lado del cliente que JavaScript (la diferencia es que AS3 requiere un complemento flash, y está compilado). Personalmente, trato de alejarme en estos días, pero si estás en el campamento "estático", dale un giro.

Eso responde a la pregunta principal, y ahora que tenemos eso, su pregunta secundaria se convierte en "¿Es práctico Flash?" La respuesta es "sí", con algunos "si" y "pero" s

  • ... si necesita ocultar su código por cualquier razón.
  • ... si quieres un nivel de interactividad muy, muy alto (nivel pasado de jQuery)
  • ... pero incluso sin HTML5, las compatibilidades entre navegadores están mejorando mucho últimamente.
  • ... pero HTML5 llegará pronto.
  • ... pero uno de los grandes atractivos de la escritura / compilación estática (en oposición a la interpretación) es la velocidad adicional que permite a través de optimizaciones (y Flash realmente no tiene muy buena velocidad, a pesar del sistema de tipos)

AS3 se basa en el ES4 abandonado.
gsnedders

3

En teoría, puede pegar cualquier script en la página que desee. La <script>etiqueta tiene un typeatributo, después de todo.

La única barrera es obtener suficiente participación de mercado en términos de implementación en diferentes navegadores para que valga la pena usarlo.


Entonces, sí, es poco probable en este momento.


Entonces, ¿no hay problema con la escritura estática entonces? No me preocupan demasiado los aspectos prácticos de esta captura.
Armand

1
@Alison: puede colocar cualquier contenido textual que desee en una etiqueta de script (con una excepción: no puede contener la secuencia de caracteres </script>). Podrías incluir el código Brainf * ck allí si realmente quisieras. Entonces, todo lo que necesita hacer es implementar un intérprete para el idioma elegido en el navegador que desea usar.
Anon

@Luego. gracias muy interesante Si es así de fácil, probablemente se haya hecho en alguna parte. Sí recuerdo <script type="vbscript">de una vez ...
Armand

Alison: vbscript era solo para IE, y algunas personas lo usaban cuando la cuota de mercado de IE era> 90%. Hoy, con la cuota de mercado de IE en algún lugar alrededor del 50%, probablemente menos en algunas partes del mundo, es una gran opción; y mientras ningún navegador vuelva a tener tanta cuota de mercado, no espere que ocurra algo como un nuevo lenguaje de script del lado del cliente.
user281377

@Alison: Internet Explorer todavía admite VBScript como lenguaje de script ... Debería saber, aquí tenemos sitios de intranet que lo usan (y, por lo tanto, requieren Internet Explorer - ¡urgh!)
Dean Harding

2

¿Sería práctico? No.

¿Es posible? ¡Si!

Desarrollar su propia alternativa estáticamente tipada a JavaScript requeriría mucho tiempo, en el mejor de los casos. En el peor de los casos, no podría convencer a ninguno de los navegadores existentes para que implementen el lenguaje de scripting de su cliente, y tendría que escribir el suyo.


¿Le importaria explicar?
back2dos

Se agregó un párrafo de seguimiento.
Marcie

Solo agregaría que la única razón por la que podría no ser práctico es la situación actual. Si estuviéramos en el punto justo antes de que se lanzara Javascript, las cosas serían diferentes.
yakiv


1

Puede usar idiomas como haXe para escribir su código de forma estática y exportarlo a javascript. JavaScript se está volviendo muy rápido, por lo que es suficiente como lenguaje de salida. Intentar imponer un lenguaje tipado estáticamente como estándar web es casi imposible. Los intentos de introducir la escritura estática en JavaScript han fallado por razones de discusión general.


1

¿Sería técnicamente posible? Si se va a implementar en Java, diría "muy, muy difícil, pero posible" sin una pérdida significativa de rendimiento.

En realidad, estoy escribiendo a mano un DSL estáticamente escrito en Java en este momento, y la única forma en que he encontrado para evitar la verificación de tipos en tiempo de ejecución es mediante el uso de genéricos y suprimir advertencias "no verificadas" ... es decir, hasta que llegó el momento de implementar matrices multidimensionales (los parámetros de clase deben conocerse en el momento de la compilación y, por lo tanto, son inherentemente finitos, mientras que las matrices multidimensionales representan un número infinito de tipos ...) Todavía estoy tratando de resolver esto, desafortunadamente, estoy seguro de que Encontraré problemas similares con las clases definidas por el usuario.

La cosa es que sigo tropezando con este tipo de problemas, pero después de sentarme un rato, encuentro una buena solución. Entonces, para hacerlo y tener los beneficios de rendimiento de la escritura estática (sin verificación de tipo de tiempo de ejecución), diría que es extremadamente difícil, pero no imposible. Menos el rendimiento, diría difícil pero muy posible.

Sé que es una vieja pregunta, solo pensé que mi experiencia podría ser valiosa para alguien.


0

Es técnicamente posible escribir scripts del lado del cliente en cualquier lenguaje de scripts que admita el agente de usuario (navegador). En la práctica, el único lenguaje ampliamente compatible es JavaScript / ECMAScript. Es poco probable que los creadores de navegadores convincentes implementen y admitan un nuevo lenguaje en esta etapa; por lo tanto, si desea utilizar un nuevo lenguaje del lado del cliente tipado estáticamente, necesitaría traducir el nuevo idioma a JavaScript o implementar un intérprete en JavaScript.

Hay varios proyectos que ya hacen algo como esto; por ejemplo, Google Web Toolkit , como se menciona en una de las otras respuestas.


0

Dado que no tiene esperanzas de obtener todos los navegadores que se utilizan en el mundo real para admitir un nuevo idioma; el lenguaje tendrá que compilarse en jscript.

Como todos los ejemplos de la web están en jscript, el lenguaje debería parecerse principalmente a jscript.

Creo que hay un alcance con tener un "subconjunto" de jscript que es verificado por un verificador estático pero también es jscript válido. P.ej:

  • Todas las variables deben tener un comentario que indique que hay tipos antes del primer uso.
  • Todos los usos de las variables deben ser válidos con lo anterior.
  • Las funciones / clase no se pueden usar si no se han declarado en un comentario #
  • Un comentario en la parte superior del archivo js debe enumerar todos los demás archivos js de los que depende.

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.