¿Por qué se usa Javascript en MongoDB y CouchDB en lugar de otros lenguajes como Java, C ++?

19

Hice esta pregunta en SO pero me sugirieron que intentara aquí. Así que aquí va:

Mi comprensión de Javascript hasta ahora ha sido que es un lenguaje del lado del cliente que captura eventos y hace que una página web sea dinámica.

Pero al leer la comparación entre MongoDB y CouchDB noté que ambos están usando Javascript. Esto me hace preguntarme la razón detrás de la elección de JavaScript sobre otros lenguajes convencionales.

Supongo que estoy tratando de entender el papel de JavaScript y sus ventajas sobre otros lenguajes.

Actualización: no estoy preguntando acerca de los idiomas / controladores compatibles con las dos bases de datos. La comparación dice:

Tanto CouchDB como MongoDB hacen uso de Javascript. CouchDB usa Javascript ampliamente, incluso en la construcción de vistas .

MongoDB también admite la ejecución de funciones arbitrarias de JavaScript en el lado del servidor y usa JavaScript para operaciones de mapa / reducción.

Mi falta de comprensión se refiere a por qué se está utilizando Javascript para el trabajo de backend. ¿Por qué se prefiere para construir vistas en CouchDB o para usar operaciones de mapa / reducción? ¿Por qué no se utilizaron C / C ++ o Java? ¿Cuáles son las ventajas de usar Javascript para dicho trabajo de fondo?

jeff almizcle
fuente
3
Javascript no es solo un lenguaje de script del navegador. Algunas otras aplicaciones incorporan Javascript o un lenguaje similar (por ejemplo, ActionScript en Flash, junto con Javascript para crear una secuencia de comandos de varias aplicaciones de Adobe). No estoy seguro, pero tal vez Javascript nunca tuvo la intención de ser incrustado solo en navegadores web. Entonces ... ¿por qué no incrustarlo en una aplicación de base de datos de fondo?
Steve314
Como he visto / leído sobre JS ejecutándose en el navegador, me pregunto cómo se ejecuta en el lado del servidor sin abrir un navegador.
Jeff Musk
1
Gracias. tienes razón. Están utilizando el compilador SpiderMonkey para hacer la parte JS del lado del servidor. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos señaló esto.
Jeff Musk
66
Para eso necesitarás un motor javascript, como V8 y SpiderMonkey . Hay bastantes usos para Javascript fuera del navegador, wikipedia tiene una larga lista .
Yannis
Hmmm: mi comentario anterior es exacto como una generalización, pero para mí tratar de ser más específico podría ser peligroso. No sé nada sobre MongoDB o CouchDB. Si bien no hay ninguna razón por la cual una aplicación de base de datos de fondo. en un servidor no puede tener su propio intérprete Javascript independiente del navegador, no sé si así se maneja, y las respuestas a continuación sugieren que probablemente no lo sea.
Steve314

Respuestas:

15

Código móvil y multiplataforma

JavaScript es lo que se llama código móvil , el código se transporta desde el servidor (MongoDB y CouchDB en este caso) al cliente (el navegador web) y se ejecuta en el cliente sin un proceso de instalación.

Los entornos de tiempo de ejecución de JavaScript (navegadores web) también están ampliamente disponibles en muchas plataformas. Eso hace que JavaScript sea un buen lenguaje multiplataforma .

JavaScript no se utiliza como lenguaje de fondo primario

El backend MongoDB se implementa en C ++ y el CouchDB se implementa en Erlang. Por lo tanto, JavaScript no se utiliza como el idioma principal para el backend de estos sistemas.

De mongodb.com :

Escrito en C ++

De couchdb.apache.com :

CouchDB está escrito en Erlang, un lenguaje de programación funcional robusto ideal para construir sistemas distribuidos concurrentes. Erlang permite un diseño flexible que es fácilmente escalable y fácilmente extensible.

Jonas
fuente
1
Gracias por su respuesta. "CouchDB usa Javascript ampliamente, incluso en la construcción de vistas". Entonces, ¿por qué el cliente es un navegador para el trabajo de fondo como la creación de una vista? Para tal tarea, ¿por qué un navegador entra en escena?
Jeff Musk
@ startup007: Vea la primera parte de mi respuesta. Los navegadores web ya están instalados en la mayoría de los sistemas actuales (por ejemplo, Mac OS X, Windows, Linux, iPhone, Android), por lo que el usuario no necesita instalar nada, ya que los brosers web pueden ejecutar JavaScript (código móvil).
Jonas
Pido disculpas por no haberlo entendido de inmediato. Déjame elaborar. Entonces, ¿están estas bases de datos abriendo navegadores en el lado del servidor para realizar alguna parte de la tarea y luego devolviendo la salida JSON?
Jeff Musk
1
Gracias Raynos! wiki en spidermonkey dice: "MongoDB, otro sistema de base de datos NoSQL utiliza SpiderMonkey para la ejecución de JavaScript del lado del servidor". en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm interesante
jeff musk
44
mal, ni MongoDB ni CouchdB usan el navegador como cliente. el cliente de la base de datos es una biblioteca que la aplicación (comúnmente una aplicación web pero podría ser cualquier tipo de aplicación) utiliza para administrar los datos almacenados en la base de datos. No hay navegador en la imagen. JavaScript se utiliza como lenguaje de definición de datos (un superconjunto de JSON), y también como lenguaje de procedimiento de almacenamiento, se ejecuta en el motor de la base de datos, no en el cliente, y ciertamente no en ningún navegador.
Javier
7

Porque JavaScript es un lenguaje de script.

Es un lenguaje flexible y dinámico que es familiar para las personas.

La otra razón por la que se usa JavaScript es porque se alinea bien con el formato JSON que usan estas bases de datos.

Y finalmente estas bases de datos necesitan un lenguaje que pueda ser interpretado. Porque el código para estas consultas se envía a través de la red.

Entonces necesitas un

  • dinámica
  • flexible
  • familiar
  • interpretado

idioma. No creo que JavaScript sea una mala elección aquí. Probablemente sea elegido por tener una sintaxis de estilo C.

Ahora, por qué se eligió JavaScript en lugar de otro lenguaje de script es una buena pregunta.

Raynos
fuente
2
Now why JavaScript was chosen over another scripting language: Podría especular que es porque JavaScript es el lenguaje de script más utilizado, extremadamente bien probado a través de su uso en los navegadores, y hay bastantes implementaciones excelentes de intérpretes de código abierto. CouchDB usa uneval(), una pista de que han construido su intérprete sobre SpiderMonkey .
Yannis
Microsoft apoyó VBscript en el lado del cliente muchos años atrás, pero afortunadamente eso nunca despegó ...
Mark K Cowan
6

Todos tendremos que comer pastel humilde cuando nos demos cuenta de que JS se está utilizando para escribir:

  • Bases de datos

  • Servidores

  • Sistema operativo

  • y una gran cantidad de bibliotecas, marcos, motores de renderizado y lenguajes de compilación,

... porque es mejor

En serio, por favor ... escúchame. No le dispares al mensajero.

Pregúntele a Microsoft por qué están creando Windows 8 con JS como ciudadano de primera clase. O el nuevo sistema operativo móvil de Mozilla, o Rivertrail, PhoneGap, ExtJS o WebGL de IBM.

¿Alguna de estas empresas o proyectos habría tenido éxito si los expertos no encontraran algo mejor en la implementación?

La respuesta es ... Lo hicieron. Lo hicimos. Entonces, el tema aquí debería ser claro: hay una mejor manera.

Pero, mejor es subjetivo: por lo tanto, debemos profundizar y comparar. ¿Qué es mejor?

Comenzó con AJAX ... y no se ha detenido.

  1. IO sin bloqueo. Este es un gran problema y vale la pena saberlo. En JS, este es el patrón de devolución de llamada. Resulta que el uso de devoluciones de llamada puede habilitar un servidor sin bloqueo: Node.js ~ aproximadamente 8 líneas de código. setTimeout () es una devolución de llamada. Procesamiento asincrónico de subproceso único.

  2. Flexibilidad. ¿Qué? -Java y C tienen clases e interfaz, pero se denominan orientadas a objetos. JavaScript solo tiene objetos. Pero se llama ... algo más.

    Tener solo objetos es bueno para la flexibilidad, porque los miembros y los métodos son completamente dinámicos en tiempo de ejecución. -La herencia prototípica no da miedo. Algunos expertos lo describen como un paquete de objetos. -JS es amigable con los errores. -Code se puede mezclar para dar como resultado componentes compuestos, sin mucho esfuerzo, o conocimiento de ... 'interfaces', 'abstracción', 'herencia', 'encapsulación', 'polimorfismo'. Cosas buenas, pero como Nike, en JS; Solo hazlo.

  3. Traducción de datos. Con JSON, los objetos se pueden transferir de adelante hacia atrás, de atrás hacia adelante. No hay traducciones de datos XML. JSON es claramente simple.

  4. Curva de aprendizaje baja. Es posible cortar y pegar código extremadamente complejo, y luego depurarlo para que exista. Escucho a un colega ... 'noobs'. Pero no es solo para novatos.

-Resulta que esta es una característica realmente agradable para la creación rápida de prototipos. Y están apareciendo sitios que aprovechan este diseño en el navegador, y más ampliamente; tiempo de ejecución de prototipos. Verifique JSFiddle y CodePen, también MicroJS. GitHub.

Like Transformers, with JS, there is more than meets the eye.  

It is a big deal.

ACTUALIZACIÓN: dado que esta publicación, JavaScript ahora es utilizado ampliamente por otros idiomas.

In Java - check out Nashorn.
In C++ - check out Emscripten, or ASM.
And there are many more.

The big surprise since the original writing of this answer was JS cross-compilation.

It turns out that many languages can be compiled to JS.

And the community is encouraging that... CoffeeScript, Dart, etc.    

This is not my specific area of expertise, but it is going on in big ways.

Simply put, we just don't know how the dynamism of JS is going to hash out yet. 
Jack Stone
fuente
Python puede hacer todo eso también
Jonathan
@JonathanLeaders - ¿todo? :)
Jack Stone
1
@ jonathan-líderes ¿Python puede ejecutar en un navegador web?
Aaron C
1
  • Puedes hacer menos con más: hay un par de escuelas en esto. La escuela de verbosidad quiere que todo se deletree con detalles súper finos que cualquier idiota pueda entender. JS es miembro de la escuela opuesta, donde puede superponer la complejidad de manera que sea más fácil obtener una visión general antes de comprender cómo funcionan los detalles más finos. Es mucho más fácil escribir en una interfaz en JS que en la mayoría de los idiomas, IMO.

  • Funciones de primera clase, cierres, herencia de prototipos: es un combo realmente flexible. Podemos imitar clases si queremos. Pero eso es visto como un esfuerzo algo inútil por aquellos que entienden muy bien a JS. La composición se adapta a JS mucho mejor que la herencia encadenada.

  • El bloqueo es útil en un nivel superior. Si, me escuchaste. Le ayuda a mantener el foco en el JS como mensajero en lugar del caballo de batalla y los procesos se ponen en cola a la vez que permiten interrupciones del comportamiento asincrónico entre las llamadas a funciones.

  • Diría que la curva de aprendizaje es en realidad un poco empinada para escribir JS de gran alcance, pero una vez que estás allí, es un puntazo. Sin embargo, no es nada difícil implementar cosas precocidas en JS en el nivel de habilidad inferior.

Erik Reppen
fuente
0

Esta pregunta está un poco anticuada, pero la razón para usar JavaScript frente a Java / C ++ es que ni Java ni C ++ admiten fácilmente fragmentos de código.

Incluso si JavaScript nunca se inventó, Java ni C ++ serían una buena opción para los fragmentos de código fuente que se ejecutarán en el lado del servidor. Escogerían otro idioma o inventarían el suyo. En el pasado, los productos solían crear su propio lenguaje, definir sus propias reglas de producción, AST, intérpretes, etc., que se especializaban en su dominio.

Pero con JavaScript es extremadamente fácil crear un lenguaje específico de dominio (DSL) para su producto e incrustar el motor sin tener que preocuparse por crear todas las demás infraestructuras no relacionadas con el dominio.

Andrew T Finnell
fuente
0

Modelo de programación dirigida por eventos

JavaScript se creó con un enfoque de cómputo no compartido de memoria basado en eventos. En el desarrollo de la interfaz de usuario esto es completamente viejo. No se asume que su "aplicación" tiene el control de un proceso. No hay API de proceso. Tampoco hay una función principal.

Su "aplicación" es una colección de scripts que se ejecutarán cuando suceda algo en particular, como

  • el script se carga en el navegador
  • la carga de la página html alcanza un cierto punto
  • en una interacción particular del usuario con un elemento dado

Esto coincide bastante bien con los pequeños fragmentos de lógica de procesamiento necesarios para las transformaciones de datos.

Lenguaje de escritura

Poder ejecutar sin una etapa de compilación significa que las instrucciones de procesamiento se pueden almacenar fácilmente. Puede guardar el script fácilmente como texto y pasarlo sin ningún tipo de datos o conocimiento especial.

Bastante simple, estable y compatible con versiones anteriores

El código que escribes hoy no es muy diferente al de hace 10 años. Es probable que el control de versiones no sea un gran problema para las personas que lo integran.

Performante

Hay varios buenos motores de código abierto con una tonelada de trabajo. Se ejecuta bastante más rápido que muchas alternativas.

Llaves

Muchas personas tienen restricciones en su comodidad con una variedad de lenguajes de programación. Solo saben cómo programar Java o C #, por ejemplo. Por lo tanto, esperan aprender JavaScript fácilmente porque parece familiar. Eso es, por supuesto, una ilusión. Cuando aprendí Python, era casi al mismo ritmo que aprender JavaScript. La sintaxis solo es emocionalmente significativa, suponiendo que no sea completamente oscura.

Henrik Vendelbo
fuente