¿Cuál es la base histórica del uso de Javascript en la programación web?

9

Vengo de un fondo de biología científica donde también usamos mucho Python.

Ahora que he comenzado a comenzar con el desarrollo web, me he preguntado constantemente por qué JavaScript es el lenguaje principal del lado del cliente en la Web.

¿Es el predominio de JavaScript un accidente histórico o algo más? Además, tengo curiosidad si hay algún obstáculo para integrar Python en las secuencias de comandos del lado del cliente.

rd108
fuente
¿Necesita esto atención del moderador basada en meta.programmers.stackexchange.com/questions/363/… ?
Rein Henrichs
@Rein: podrías hacerlo vote to closesi crees que esto está fuera de tema. Si los demás sienten lo mismo, ellos o un moderador seguirán su ejemplo.
jmort253
@ jmort253 (Tal vez debería pasar a meta) No hubo consenso en el hilo vinculado y soy ambivalente. :(
Rein Henrichs
@Rein - El proceso de pensamiento en los comentarios está bien (ya que sirve como una señal, en cuanto a por qué o por qué no, la comunidad decidió tomar medidas en una publicación. Si no hay un acuerdo, haga lo que considere mejor :) Personalmente, creo que esta información histórica podría ayudar a otros a comprender el futuro de JavaScript como lenguaje y por qué es importante entender y adoptar este lenguaje.
jmort253

Respuestas:

16

JavaScript fue el primer lenguaje de secuencias de comandos que se puso a disposición en un navegador web popular, por lo que se implementó casi universalmente. Al ser el único lenguaje de programación disponible en todos los navegadores populares, no había más remedio que ser el lenguaje de programación predominante del lado del cliente.

Internet Explorer implementó JavaScript de una manera que permite motores de script conectables (vino con VBScript y JScript). Si prefería (como lo hice) escribir su código en PerlScript o PythonScript, podría hacerlo, pero todos sus clientes tenían que tener ese lenguaje de script instalado y tenían que usar IE. Podrías hacer esto para proyectos internos, pero no hay forma de que funcione en Internet.

Gabe
fuente
Otra cosa que me pareció interesante fueron los proyectos para escribir compiladores de python a javascript, por ejemplo, Pyjas pyjs.org .
rd108
"Pyjamas es una plataforma de desarrollo de aplicaciones de Internet enriquecidas (RIA) para Web y Desktop. Contiene un compilador de Python a Javascript, un marco AJAX y una API de conjunto de widgets. Pyjamas comenzó su vida como un puerto Python de Google Web Toolkit, el Compilador de Java a Javascript. Lea las preguntas frecuentes y la lista de características ".
rd108
Hay toneladas de compiladores de JavaScript. CoffeeScript, TypeScript, ClojureScript, LispyScript, etc., etc.
Florian Margaine
7

JavaScript fue creado originalmente por Brendan Eich. Se envió por primera vez con la versión beta de Netscape Navigator 2.0 en septiembre de 1995 como LiveScript, pero pasó a llamarse JavaScript en un anuncio conjunto con Sun Microsystems en diciembre de 1995. Fue solo más tarde (en 1996) que JavaScript se envió a Ecma International y finalmente se convirtió en El ECMAScript estandarizado.

Su dominio actual del mercado se debe en gran medida a la inercia histórica.

Fuente: http://en.wikipedia.org/wiki/JavaScript#History

Rein Henrichs
fuente
2

No estoy seguro, pero es un lenguaje de secuencias de comandos ligero y del lado del cliente. Creo que sus orígenes se encuentran en los primeros navegadores Netscape (aunque podría estar equivocado). De hecho, su nombre mismo fue cambiado antes del lanzamiento para incluir la palabra "java" a pesar de que no tenía nada que ver con java. Fue una táctica rápida para ganar popularidad en ese momento.

Michael Giovanni Pumo
fuente
1

Estoy seguro de que tiene mucho que ver con la historia.

Pero también estoy seguro de que no quiero que los sitios web puedan ejecutar lenguajes de programación con todas las funciones como python en mi navegador. Las implicaciones de seguridad me asustarían de cualquier sitio como ese (o tendría que estar muy seguro de que el entorno limitado del navegador era hermético).

Martin York
fuente
Eso no tiene sentido. TI depende del entorno para decidir qué API están disponibles para un lenguaje de programación. Por supuesto, si Python se enviara en los navegadores, tendría acceso a las mismas API que tiene Javascript ahora (como el DOM), por lo que no tendría forma de crear ningún daño.
Andrea
@Andrea: se podría argumentar que un lenguaje es tanto sus bibliotecas estándar como su sintaxis y semántica. Javascript no tiene una biblioteca estándar para E / S de archivos, y eso es intencional, por razones de seguridad. Python tiene bibliotecas estándar para E / S de archivos y para muchas otras cosas que podrían considerarse problemas de seguridad. No permita esto y posiblemente ya no esté lidiando con Python. Hace mucho tiempo, Python tenía una caja de arena, recuerdo que estaba allí alrededor de la versión 1.5, pero se dejó caer IIRC porque no se usó lo suficiente y estaba lejos de ser hermética.
Steve314
Se están escribiendo bibliotecas estándar para E / S en Javascript. Por supuesto, estos no están disponibles en el navegador. Solo digo que si Python se implementara en el navegador, las bibliotecas inseguras no estarían disponibles. Y presumiblemente no los extrañará, ya que no están destinados a ser utilizados en un sitio web.
Andrea
-2

"¿Es el predominio de JavaScript un accidente histórico o algo más?"

Personalmente, opino que el éxito de JS es una cuestión de diseño tanto como muchos lo han sido y seguirán siendo reacios a admitirlo y no solo por algún accidente o simplemente por el hecho de que fue el primer niño en el patio de recreo.

Aunque llamado así para atraer a los desarrolladores de Java y sintaxis como la sintaxis basada en C de Java también para atraer a los desarrolladores de Java, Brendan Eich tomó una de las decisiones más rudas en la historia de la WWW, que se basó principalmente en Scheme para la mecánica del lenguaje real inspiración, que es algo que a los desarrolladores de Java no parece gustarles en absoluto (lo cual me parece muy divertido).

JavaScript utiliza una herencia prototípica altamente flexible / granular para OOP, tiene cierres, los tipos son 100% dinámicos, las funciones en sí mismas son de primera clase, lo que les permite pasar como cualquier otro objeto o tipo de datos y reutilizarse en diferentes contextos e incluso se aplican a los objetos sobre la marcha como si hubieran sido declarados como miembros reales del objeto desde el principio. Prácticamente es un grito ser utilizado para arquitecturas controladas por eventos que necesitan normalizar una tonelada de basura patentada o manejar problemas de IU altamente no lineales.

Al final de los albores de la web, es el único lenguaje que ha sido capaz de normalizar los navegadores a través de una guerra real de navegadores donde Netscape e IE intentaron hacer las cosas de manera diferente a propósito, seguidos por más de 10 años de navegador tregua donde IE simplemente hizo las cosas de manera diferente porque la EM es perezosa y está arraigada en algunas prácticas anticompetitivas justamente estúpidas que resultan en el estancamiento del navegador, y ahora en un mundo en el que los navegadores finalmente comienzan a ponerse de acuerdo sobre la misma especificación general con respecto a HTML, CSS y la API DOM con IE solo están 2-3 años detrás de los últimos desarrollos en lugar de 10 debido a que Google y Mozilla destruyeron los compiladores JIT que hicieron que los números de rendimiento de IE parecieran tan patéticos, MS finalmente se avergonzó de modernizar adecuadamente sus malditos navegadores.IE9 es el primero en actualizar seriamente el soporte de la API DOM a los niveles que Netscape soportaba en 2000.

JS ha tenido competencia en forma de Applets de Java y ActionScript de Adobe para Flash. Eso es todo en el frente serio contendiente. MS intentó presionar a VB pero falló miserablemente porque ... bueno ... VB. Además, propietario. En realidad, había muchos más sitios Flash de lo que la mayoría de la gente piensa. Simplemente no podía encontrar las cosas tontas con los motores de búsqueda. Los applets hicieron lo suyo, y fue feo. Realmente feo. JS fue el único lenguaje que realmente abordó el problema de trabajar en el contexto de múltiples navegadores por personas que no estaban de acuerdo con quién estaba estableciendo las especificaciones con las que se suponía que debían coincidir.

En los últimos años, JS ha estado explotando en un dominio de aplicación mucho más amplio. En combinación con otras tecnologías web, está diseñado para eliminar básicamente todas las demás soluciones en el frente móvil, ya que la tecnología web + es realmente la única opción realista en este momento si realmente desea escribir una aplicación y hacer que funcione en todo.

Así que no, y sí, soy un gran admirador, pero no creo que haya golpeado a todos los demás contendientes del lado del cliente por accidente, ya que ahora se puede considerar un accidente explosivamente popular fuera del navegador. Antes de JS, no había muchos lenguajes tipo Scheme que no fueran principalmente académicos. Esto le dio a JS algunas ventajas poderosas y las necesidades únicas del lado del cliente hicieron posible que esas ventajas se volvieran cristalinas lentamente.

Erik Reppen
fuente
Usted menciona Scheme dos veces sin decir cómo JS se relaciona con Scheme. Ciertamente, no cree que JS tenga macros, expresiones S, recursión de cola, continuaciones o alguna de las otras características distintivas de Scheme, ¿verdad?
Gabe
@Gabe. Verifique el cuarto bloque de texto. Los cierres, la tipificación dinámica y las funciones de primera clase son bastante importantes. El hecho de que JS use una sintaxis tipo c no permitirá el uso de macros Scheme. No es una copia de Scheme característica por característica, pero ciertamente está influenciada por ella.
mike30
Entonces, ¿los cierres y la escritura dinámica hacen que un lenguaje sea como un esquema? ¿Eso significa que C # es como un esquema? ¿Qué pasa con Ruby, Python y Perl? ¿Y por qué Scheme en lugar de Lisp o cualquier otro lenguaje similar?
Gabe
@Gabe No soy un experto en Scheme, pero en wikipedia informal diría que el combo de alcance léxico, funciones de primera clase y cierres son los tres que ponen a JS mucho más cerca de Scheme que de Java. De lo contrario, solo estaba tomando la palabra de Brendan Eich y asumí que las funciones adecuadas de primera clase eran las más destacadas.
Erik Reppen
OK, entonces JS tiene cierres (lo que creo implica funciones de primera clase y alcance léxico) y escritura dinámica, como Scheme. Dado que C # tiene cierres, tipeo dinámico y una forma limitada de expresiones S, ¿eso significa que C # es aún más parecido a un esquema que JS?
Gabe