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?
fuente
Respuestas:
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 :
De couchdb.apache.com :
fuente
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
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.
fuente
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 usauneval()
, una pista de que han construido su intérprete sobre SpiderMonkey .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.
Pero, mejor es subjetivo: por lo tanto, debemos profundizar y comparar. ¿Qué es mejor?
Comenzó con AJAX ... y no se ha detenido.
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.
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.
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.
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.
ACTUALIZACIÓN: dado que esta publicación, JavaScript ahora es utilizado ampliamente por otros idiomas.
fuente
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.
fuente
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.
fuente
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
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.
fuente