Pourquoi Javascript est-il utilisé dans MongoDB et CouchDB au lieu d'autres langages tels que Java, C ++?

19

J'ai posé cette question sur SO mais on m'a suggéré d'essayer ici. Alors voilà:

Jusqu'à présent, ma compréhension de Javascript est qu'il s'agit d'un langage côté client qui capture les événements et rend une page Web dynamique.

Mais en lisant la comparaison entre MongoDB et CouchDB, j'ai remarqué que les deux utilisent Javascript. Cela me fait me demander la raison du choix de JavaScript par rapport aux autres langages conventionnels.

Je suppose que j'essaie de comprendre le rôle de JavaScript et ses avantages par rapport à d'autres langues.

Mise à jour: je ne pose pas de questions sur les langues / pilotes pris en charge par les deux bases de données. La comparaison dit:

CouchDB et MongoDB utilisent Javascript. CouchDB utilise largement Javascript, y compris dans la construction de vues .

MongoDB prend également en charge l'exécution de fonctions javascript arbitraires côté serveur et utilise javascript pour les opérations de mappage / réduction.

Mon manque de compréhension concerne la raison pour laquelle Javascript est utilisé pour le travail backend. Pourquoi est-il préférable de créer des vues dans CouchDB ou d'utiliser des opérations de carte / réduction? Pourquoi C / C ++ ou Java n'ont pas été utilisés? Quels sont les avantages d'utiliser Javascript pour un tel travail back-end?

Jeff Musk
la source
3
Javascript n'est pas seulement un langage de script de navigateur. Quelques autres applications intègrent Javascript ou un langage similaire (par exemple ActionScript dans Flash, ainsi que Javascript pour l'écriture de scripts pour un certain nombre d'applications Adobe). Je ne suis pas certain, mais peut-être que Javascript n'a jamais été conçu pour être intégré uniquement dans les navigateurs Web. Alors ... pourquoi ne pas l'intégrer dans une application de base de données back-end?
Steve314
Depuis que j'ai vu / lu sur JS fonctionnant dans un navigateur, je me demande comment est-il exécuté côté serveur sans ouvrir de navigateur?
Jeff Musk
1
Merci. tu as raison. Ils utilisent le compilateur SpiderMonkey pour faire une partie JS côté serveur. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos l'a souligné.
jeff musk
6
Pour cela, vous aurez besoin d'un moteur javascript, comme V8 et SpiderMonkey . Il existe de nombreuses utilisations de Javascript en dehors du navigateur, wikipedia a une longue liste .
yannis
Hmmm - mon commentaire précédent est précis en général, mais pour moi, essayer d'être plus précis pourrait être dangereux - je ne sais rien de MongoDB ou CouchDB. Bien qu'il n'y ait aucune raison pour laquelle une application de base de données principale. sur un serveur ne peut pas avoir son propre interpréteur Javascript indépendant du navigateur, je ne sais pas si c'est comme ça qu'il est géré, et les réponses ci-dessous suggèrent que ce n'est probablement pas le cas.
Steve314

Réponses:

15

Code mobile et multiplateforme

JavaScript est ce qu'on appelle le code mobile , le code est transporté du serveur (MongoDB et CouchDB dans ce cas) au client (le navigateur Web) et exécuté sur le client sans processus d'installation.

Les environnements d'exécution JavaScript (navigateurs Web) sont également largement disponibles sur de nombreuses plateformes. Cela fait de JavaScript un bon langage multiplateforme .

JavaScript n'est pas utilisé comme langue principale principale

Le backend MongoDB est implémenté en C ++ et le CouchDB est implémenté en Erlang. Donc, JavaScript n'est pas utilisé comme langue principale pour le backend de ces systèmes.

De mongodb.com :

Écrit en C ++

De couchdb.apache.com :

CouchDB est écrit en Erlang, un langage de programmation fonctionnel robuste idéal pour construire des systèmes distribués simultanés. Erlang permet une conception flexible qui est facilement évolutive et facilement extensible.

Jonas
la source
1
Merci pour votre réponse. "CouchDB utilise largement Javascript, y compris dans la construction de vues". Alors, pourquoi le client est un navigateur pour le travail back-end comme la construction d'une vue? Pour une telle tâche, pourquoi un navigateur apparaît-il dans l'image?
Jeff Musk
@ startup007: Voir la première partie de ma réponse. Les navigateurs Web sont déjà installés sur la plupart des systèmes aujourd'hui (par exemple, Mac OS X, Windows, Linux, iPhone, Android), de sorte que l'utilisateur n'a pas besoin d'installer quoi que ce soit car les navigateurs Web peuvent exécuter JavaScript (code mobile).
Jonas
Je m'excuse de ne pas l'avoir reçu tout de suite. Permettez-moi de développer. Ces bases de données ouvrent-elles donc des navigateurs côté serveur pour effectuer une partie de la tâche, puis retournent-elles la sortie JSON?
Jeff Musk
1
Merci Raynos! wiki sur spidermonkey dit- "MongoDB, un autre système de base de données NoSQL utilise SpiderMonkey pour l'exécution JavaScript côté serveur." en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm intéressant
jeff musk
4
faux, ni MongoDB ni CouchdB n'utilisent le navigateur comme client. le client de base de données est une bibliothèque que l'application (généralement une webapp mais qui peut être n'importe quel type d'application) utilise pour gérer les données stockées dans la base de données. Il n'y a pas de navigateur sur l'image. JavaScript est utilisé comme langage de définition de données (un surensemble de JSON), et également comme langage de procédure de stockage, il est exécuté dans le moteur de base de données, pas chez le client, et certainement pas dans aucun navigateur.
Javier
7

Parce que JavaScript est un langage de script.

C'est un langage flexible et dynamique familier aux gens.

L'autre raison pour laquelle JavaScript est utilisé est qu'il s'aligne bien avec le format JSON utilisé par ces bases de données.

Et enfin, ces bases de données ont besoin d'un langage qui puisse être interprété. Parce que le code de ces requêtes est envoyé sur le réseau.

Vous avez donc besoin d'un

  • dynamique
  • souple
  • familier
  • interprété

Langue. Je ne pense pas que JavaScript soit un mauvais choix ici. Il est probablement choisi pour avoir une syntaxe de style C.

Maintenant, pourquoi JavaScript a été choisi sur un autre langage de script est une bonne question.

Raynos
la source
2
Now why JavaScript was chosen over another scripting language: Je pourrais supposer que c'est parce que JavaScript est le langage de script le plus utilisé, extrêmement bien testé via son utilisation sur les navigateurs, et qu'il existe quelques excellentes implémentations d'interprètes open source. CouchDB utilise uneval(), un indice qu'ils ont construit leur interprète sur SpiderMonkey .
yannis
Microsoft a pris en charge VBscript côté client il y a plusieurs années, mais heureusement, cela n'a jamais décollé ...
Mark K Cowan
6

Nous devrons tous manger une tarte humble quand nous nous rendrons compte que JS est utilisé pour écrire:

  • Bases de données

  • Les serveurs

  • Système opérateur

  • et une myriade de bibliothèques, de frameworks, de moteurs de rendu et de langages de compilation,

... parce que c'est mieux.

Sérieusement, s'il vous plaît ... écoutez-moi. Ne frappe pas le messager.

Demandez à Microsoft pourquoi ils construisent Windows 8 avec JS en tant que citoyen de première classe. Ou le nouveau système d'exploitation mobile de Mozilla, ou Rivertrail d'IBM, PhoneGap, ExtJS ou WebGL.

L'une de ces entreprises ou de ces projets aurait-il réussi si les experts ne trouvaient pas quelque chose de mieux dans la mise en œuvre?

La réponse est ... Ils l'ont fait. Nous faisions. Le thème ici doit donc être clair: il existe une meilleure solution.

Mais, mieux c'est subjectif: nous devons donc explorer et comparer. Qu'est-ce qui est mieux?

Ça a commencé avec AJAX ... et ça ne s'est pas arrêté.

  1. E / S non bloquantes. C'est vraiment un gros problème et mérite d'être connu. Dans JS, c'est le modèle de rappel. Il s'avère que l'utilisation de rappels peut activer un serveur non bloquant: Node.js ~ environ 8 lignes de code. setTimeout () est un rappel. Traitement asynchrone à un seul thread.

  2. La flexibilité. Quelle? -Java et C ont des classes et une interface, mais sont appelés orientés objet. JavaScript n'a que des objets. Mais ça s'appelle ... autre chose.

    -Avoir uniquement des objets est une bonne chose pour la flexibilité, car les membres et les méthodes sont entièrement dynamiques au moment de l'exécution. -L'hérédité prototypique n'est pas effrayante. Certains experts le décrivent comme un pack d'objets. -JS est amical sur les erreurs. -Le code peut se mélanger pour aboutir à des Composites-Composants, sans trop d'effort, ni connaissance des ... "interfaces", "abstraction", "héritage", "encapsulation", "polymorphisme". De bonnes choses, mais comme Nike, en JS; vous venez de le faire.

  3. Traduction de données. Avec JSON, les objets peuvent être transférés d'avant en arrière, d'arrière en avant. Aucune traduction de données XML. JSON est clairement simple.

  4. Courbe d'apprentissage faible. Il est possible de couper et coller du code extrêmement complexe, puis de le déboguer par étapes pour qu'il existe. J'entends un collègue ... «noobs». Mais ce n'est pas seulement pour les noobs.

-Il s'avère que c'est une fonctionnalité vraiment intéressante pour le prototypage rapide. Et des sites surgissent partout qui exploitent cette conception dans le navigateur, et plus largement; prototypage à l'exécution. Checkout JSFiddle et CodePen, également MicroJS. GitHub.

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

It is a big deal.

MISE À JOUR: depuis cette publication, JavaScript est maintenant largement utilisé par d'autres langues.

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
la source
Python peut aussi faire tout cela
Jonathan
@JonathanLeaders - tout? :)
Jack Stone
1
@ jonathan-leaders Python peut-il s'exécuter sur un navigateur Web?
Aaron C
1
  • Vous pouvez faire moins avec plus - Il y a quelques écoles à ce sujet. L'école de verbosité veut que tout soit expliqué dans les moindres détails que tout idiot puisse comprendre. JS est membre de l'école opposée où vous pouvez superposer la complexité de manière à ce qu'il soit plus facile d'avoir une vue d'ensemble avant de comprendre le fonctionnement des détails les plus fins. Il est beaucoup plus facile d'écrire sur une interface en JS que dans la plupart des langues, IMO.

  • Fonctions de première classe, fermetures, héritage prototypique - C'est un combo vraiment, vraiment flexible. Nous pouvons imiter les cours si nous le voulons. Mais cela est considéré comme un effort quelque peu inutile par ceux qui comprennent très bien JS. Le compositing convient beaucoup mieux à JS que l'héritage chaîné.

  • Le blocage est utile à un niveau supérieur. Oui, tu m'as entendu. Il vous aide à rester concentré sur le JS en tant que messager plutôt que sur le cheval de bataille et les processus se mettent à peu près en file d'attente tout en permettant des interruptions du comportement asynchrone entre les appels de fonction.

  • Je dirais que la courbe d'apprentissage est en fait un peu abrupte pour écrire un JS puissant mais une fois que vous y êtes, c'est une huée. Cependant, il n'est pas du tout difficile d'implémenter des éléments précuits dans JS au niveau de compétence inférieur.

Erik Reppen
la source
0

Cette question est un peu datée mais la raison d'utiliser JavaScript vs Java / C ++ est que ni Java ni C ++ ne supportent facilement les fragments de code.

Même si JavaScript n'a jamais été inventé, Java ou C ++ auraient été un bon choix pour les fragments de code source qui s'exécuteraient côté serveur. Ils auraient choisi une autre langue ou inventé la leur. De retour dans la journée, les produits utilisés pour créer leur propre langue, définir leurs propres règles de production, AST, interprète, etc., spécialisés dans leur domaine.

Mais avec JavaScript, il est extrêmement facile de créer un langage spécifique au domaine (DSL) pour votre produit et d'intégrer le moteur sans avoir à vous soucier de créer toutes les autres infrastructures non liées au domaine.

Andrew T Finnell
la source
0

Modèle de programmation piloté par les événements

JavaScript a été créé avec une approche de la mémoire non partagée basée sur les événements pour l'informatique. Dans le développement de l'interface utilisateur, c'est un chapeau complètement ancien. Il n'y a aucune hypothèse que votre "application" contrôle un processus. Il n'y a pas d'API de processus. Il n'y a pas non plus de fonction principale.

Votre "application" est une collection de scripts qui seront exécutés lorsqu'une chose particulière se produira telle que

  • le script est chargé dans le navigateur
  • le chargement de la page html atteint un certain point
  • sur une interaction particulière de l'utilisateur avec un élément donné

Cela correspond assez bien aux petits morceaux de logique de traitement nécessaires aux transformations de données.

Langage de script

Le fait de pouvoir exécuter sans étape de compilation signifie que les instructions de traitement peuvent être stockées facilement. Vous pouvez facilement enregistrer le script sous forme de texte et le transmettre sans aucun type de données ou connaissances particulières.

Assez simple, stable et rétrocompatible

Le code que vous écrivez aujourd'hui n'est pas très différent d'il y a 10 ans. Le contrôle de version n'est probablement pas un problème majeur pour les personnes qui l'intègrent.

Performant

Il existe plusieurs bons moteurs open source avec une tonne de travail. Il s'exécute un peu plus rapidement que de nombreuses alternatives.

Accolades

Beaucoup de gens sont limités dans leur confort avec une gamme de langages de programmation. Ils savent seulement programmer Java ou C # par exemple. Ils s'attendent donc à apprendre JavaScript facilement car il semble familier. C'est bien sûr une illusion. Quand j'ai appris Python, c'était à peu près au même rythme que l'apprentissage de JavaScript. La syntaxe n'a de signification émotionnelle que si elle n'est pas complètement obscure.

Henrik Vendelbo
la source