Perché Javascript viene utilizzato in MongoDB e CouchDB invece di altre lingue come Java, C ++?


19

Ho fatto questa domanda su SO ma mi è stato suggerito di provare qui. Quindi ecco qui:

Finora la mia comprensione di Javascript è stata che è un linguaggio lato client che cattura eventi e rende dinamica una pagina web.

Ma leggendo il confronto tra MongoDB e CouchDB ho notato che entrambi utilizzano Javascript. Questo mi fa domandare il motivo dietro la scelta di JavaScript rispetto ad altre lingue convenzionali.

Immagino che sto cercando di capire il ruolo di JavaScript e i suoi vantaggi rispetto ad altre lingue.

Aggiornamento: non sto chiedendo le lingue / i driver supportati dai due database. Il confronto dice:

Sia CouchDB che MongoDB utilizzano Javascript. CouchDB utilizza Javascript ampiamente anche nella costruzione di viste .

MongoDB supporta anche l'esecuzione di funzioni javascript arbitrarie sul lato server e utilizza javascript per operazioni di mappatura / riduzione.

La mia mancanza di comprensione riguarda il motivo per cui Javascript viene utilizzato per il lavoro di backend. Perché è preferito per la creazione di viste in CouchDB o per l'utilizzo delle operazioni di mappa / riduzione? Perché C / C ++ o Java non sono stati utilizzati? Quali sono i vantaggi nell'uso di Javascript per tale lavoro di back-end?


3
Javascript non è solo un linguaggio di scripting del browser. Alcune altre applicazioni incorporano Javascript o un linguaggio simile (ad es. ActionScript in Flash, insieme a Javascript per lo scripting di numerose applicazioni Adobe). Non ne sono certo, ma forse Javascript non è mai stato concepito per essere incorporato solo nei browser web. Quindi ... perché non incorporarlo in un'applicazione di database back-end?
Steve314,

Da quando ho visto / letto JS in esecuzione nel browser, mi chiedo come viene eseguito sul lato server senza aprire un browser?
Jeff Musk,

1
Grazie. hai ragione. Stanno usando il compilatore SpiderMonkey per eseguire la parte JS sul lato server. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos lo ha sottolineato.
Jeff Musk,

6
Per questo avrai bisogno di un motore javascript, come V8 e SpiderMonkey . Esistono diversi usi di Javascript al di fuori del browser, Wikipedia ha una lunga lista .
yannis,

Hmmm - il mio commento precedente è accurato come generalizzazione, ma per me cercare di essere più specifico potrebbe essere pericoloso - Non so nulla di MongoDB o CouchDB. Anche se non c'è motivo per cui un'app di database back-end. su un server non può avere il proprio interprete Javascript indipendente dal browser, non so se è così che viene gestito, e le risposte sotto suggeriscono che probabilmente non lo è.
Steve314

Risposte:


15

Codice mobile e multipiattaforma

JavaScript è ciò che viene chiamato codice mobile , il codice viene trasportato dal server (MongoDB e CouchDB in questo caso) al client (il browser Web) ed eseguito sul client senza un processo di installazione.

Anche gli ambienti runtime JavaScript (browser Web) sono ampiamente disponibili su molte piattaforme. Ciò rende JavaScript un buon linguaggio multipiattaforma .

JavaScript non è utilizzato come lingua back-end principale

Il backend MongoDB è implementato in C ++ e il CouchDB è implementato in Erlang. Quindi JavaScript non è usato come lingua principale per il backend per questi sistemi.

Da mongodb.com :

Scritto in C ++

Da couchdb.apache.com :

CouchDB è scritto in Erlang, un robusto linguaggio di programmazione funzionale ideale per la creazione di sistemi distribuiti simultanei. Erlang consente un design flessibile che è facilmente scalabile e facilmente estensibile.


1
Grazie per la vostra risposta. "CouchDB utilizza Javascript ampiamente anche nella costruzione di viste". Quindi perché il client è un browser per il lavoro di back-end come la creazione di una vista? Per tale compito, perché viene visualizzato un browser.
Jeff Musk,

@ startup007: vedi la prima parte della mia risposta. I browser Web sono già installati sulla maggior parte dei sistemi oggi (ad es. Mac OS X, Windows, Linux, iPhone, Android), quindi l'utente non deve installare nulla poiché i web broser possono eseguire JavaScript (codice mobile).
Jonas,

Mi scuso per non averlo capito subito. Lasciami elaborare. Quindi questi database aprono i browser sul lato server per svolgere una parte dell'attività e quindi restituiscono l'output JSON?
Jeff Musk,

1
Grazie Raynos! wiki su spidermonkey dice: "MongoDB, un altro sistema di database NoSQL utilizza SpiderMonkey per l'esecuzione di JavaScript sul lato server." en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm interessante
jeff musk

4
sbagliato, né MongoDB né CouchdB utilizzano il browser come client. il client del database è una libreria che l'app (comunemente una webapp ma potrebbe essere qualsiasi tipo di applicazione) utilizza per gestire i dati memorizzati nel database. Non c'è browser nella foto. JavaScript è usato come linguaggio di definizione dei dati (un superset di JSON) e anche come linguaggio di procedura dello store, viene eseguito nel motore di database, non sul client e certamente non in nessun browser.
Javier,

7

Perché JavaScript è un linguaggio di scripting.

È un linguaggio flessibile e dinamico che è familiare alle persone.

L'altro motivo per cui viene utilizzato JavaScript è perché si allinea bene con il formato JSON utilizzato da questi database.

E infine questi database hanno bisogno di un linguaggio che possa essere interpretato. Perché il codice per queste query viene inviato sulla rete.

Quindi hai bisogno di un

  • dinamico
  • flessibile
  • familiare
  • interpretato

linguaggio. Non penso che JavaScript sia una cattiva scelta qui. Probabilmente è scelto per avere la sintassi in stile C.

Ora perché JavaScript è stato scelto su un altro linguaggio di scripting è una buona domanda.


2
Now why JavaScript was chosen over another scripting language: Potrei ipotizzare che sia perché JavaScript è il linguaggio di scripting più utilizzato, estremamente ben testato tramite il suo utilizzo sui browser e ci sono alcune eccellenti implementazioni di interpreti open source. CouchDB usa uneval(), un suggerimento che hanno costruito il loro interprete sopra SpiderMonkey .
yannis,

Microsoft ha supportato VBscript sul lato client molti anni fa, ma per fortuna non è mai decollato ...
Mark K Cowan,

6

Dovremo tutti mangiare humble-pie quando ci rendiamo conto che JS viene utilizzato per scrivere:

  • Banche dati

  • server

  • Sistema operativo

  • e una miriade di librerie, framework, motori di rendering e linguaggi di compilazione,

... perché è meglio.

Seriamente, per favore ... ascoltami. Non sparare al messaggero.

Chiedi a Microsoft perché stanno costruendo Windows 8 con JS come cittadino di prima classe. O il nuovo sistema operativo mobile di Mozilla o IBM Rivertrail, PhoneGap, ExtJS o WebGL.

Una di queste aziende o progetti avrebbe avuto successo se gli esperti non avessero trovato qualcosa di meglio nell'attuazione?

La risposta è ... Lo hanno fatto. Noi facemmo. Quindi il tema qui dovrebbe essere chiaro: esiste un modo migliore.

Ma meglio è soggettivo: quindi dobbiamo approfondire e confrontare. Cos'è meglio?

È iniziato con AJAX ... e non si è fermato.

  1. IO non bloccante. Questo è davvero un grosso problema e vale la pena saperlo. In JS questo è il modello di callback. Si scopre che l'uso dei callback può abilitare un server non bloccante: Node.js ~ circa 8 righe di codice. setTimeout () è un callback. Elaborazione asincrona a thread singolo.

  2. Flessibilità. Che cosa? -Java e C hanno classi e interfaccia, ma sono chiamati orientati agli oggetti. JavaScript ha solo oggetti. Ma si chiama ... qualcos'altro.

    -Avere solo oggetti è una buona cosa per la flessibilità, perché membri e metodi sono completamente dinamici in fase di esecuzione. -L'eredità prototipale non fa paura. Alcuni esperti lo descrivono come un pacchetto di oggetti. -JS è amichevole sugli errori. -Codice può mescolarsi insieme per produrre componenti compositi, senza molto sforzo o conoscenza di ... "interfacce", "astrazione", "eredità", "incapsulamento", "polimorfismo". Cose buone, ma come Nike, in JS; lo fai e basta.

  3. Data-Traduzione. Con JSON, gli oggetti possono essere trasferiti da un lato all'altro, da un lato all'altro. Nessuna traduzione di dati XML. JSON è chiaramente semplice.

  4. Bassa curva di apprendimento. È possibile tagliare e incollare codice estremamente complesso, quindi eseguirne il debug. Sento un collega ... "noobs". Ma non è solo per i noob.

-Si scopre che questa è una funzionalità davvero interessante per il prototipo rapido. E i siti stanno spuntando dappertutto che sfruttano questa cosa del design nel browser e più ampiamente; runtime-prototipazione. Acquista JSFiddle e CodePen, anche MicroJS. GitHub.

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

It is a big deal.

AGGIORNAMENTO: poiché questo post JavaScript è ora ampiamente utilizzato da altre lingue.

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. 

Python può fare anche tutto questo
Jonathan,

@JonathanLeaders - all? :)
Jack Stone,

1
@ jonathan-leader Python può essere eseguito su un browser web?
Aaron C

1
  • Puoi fare di meno con più - ci sono un paio di scuole su questo. La scuola di verbosità vuole che tutto sia spiegato con dettagli superfini che ogni idiota possa capire. JS è un membro della scuola opposta in cui è possibile stratificare la complessità in modo che sia più facile ottenere il quadro generale prima di capire come funzionano i dettagli più fini. È molto più semplice scrivere su un'interfaccia in JS che nella maggior parte delle lingue, IMO.

  • Funzioni di prima classe, chiusure, eredità prototipale - È una combinazione davvero molto flessibile. Possiamo imitare le classi se vogliamo. Ma questo è visto come uno sforzo in qualche modo inutile da parte di coloro che capiscono davvero bene JS. Compositing si adatta a JS molto meglio dell'eredità incatenata.

  • Il blocco è utile a un livello superiore. Sì, mi hai sentito. Ti aiuta a mantenere l'attenzione su JS come messenger piuttosto che sul cavallo di lavoro e elabora praticamente la coda stessa consentendo nel contempo interruzioni dal comportamento asincrono tra chiamate di funzione.

  • Direi che la curva di apprendimento è in realtà un po 'ripida per scrivere un potente JS ma una volta che sei lì, è uno spasso. Tuttavia, non è affatto difficile implementare roba precotta in JS a livello di abilità inferiore.


0

Questa domanda è un po 'datata ma la ragione per usare JavaScript vs Java / C ++ è che né Java né C ++ supportano facilmente frammenti di codice.

Anche se JavaScript non è mai stato inventato, Java e C ++ sarebbero stati una buona scelta per i frammenti di codice sorgente che verranno eseguiti sul lato server. Avrebbero scelto un'altra lingua o inventato la propria. In passato i prodotti utilizzati per creare la propria lingua, definire le proprie regole di produzione, AST, interprete ecc. Specializzati nel proprio dominio.

Ma con JavaScript è estremamente facile creare un DSL (Domain Specific Language) per il tuo prodotto e incorporare il motore senza doversi preoccupare di creare tutte le altre infrastrutture non di dominio.


0

Modello di programmazione event driven

JavaScript è stato creato con un approccio informatico basato sulla memoria non condivisa. Nello sviluppo dell'interfaccia utente questo è completamente vecchio cappello. Non si presume che la tua "applicazione" abbia il controllo di un processo. Non esiste un'API di processo. Né esiste una funzione principale.

La tua "applicazione" è una raccolta di script che verrà eseguita quando accade una cosa particolare come

  • lo script viene caricato nel browser
  • il caricamento della pagina html raggiunge un certo punto
  • su una particolare interazione dell'utente con un determinato elemento

Ciò si abbina abbastanza bene con i piccoli pezzi di logica di elaborazione necessari per le trasformazioni di dati.

Linguaggio di scripting

Essere in grado di eseguire senza una fase di compilazione significa che le istruzioni di elaborazione possono essere memorizzate facilmente. È possibile salvare facilmente lo script come testo e passarlo senza particolari tipi di dati o conoscenze.

Abbastanza semplice, stabile e compatibile con le versioni precedenti

Il codice che scrivi oggi non è molto diverso da 10 anni fa. È probabile che il controllo delle versioni non costituisca un grosso problema per le persone che lo incorporano.

performant

Ci sono molti buoni motori open source là fuori con un sacco di lavoro messo in loro. Si esegue un po 'più veloce di molte alternative.

Parentesi graffe

Molte persone sono limitate nel loro comfort con una gamma di linguaggi di programmazione. Sanno solo come programmare Java o C # per esempio. Quindi si aspettano di imparare facilmente JavaScript perché sembra familiare. Questa è ovviamente un'illusione. Quando ho imparato Python era praticamente allo stesso ritmo dell'apprendimento di JavaScript. La sintassi è solo emotivamente significativa supponendo che non sia completamente oscura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.