Por que o Javascript é usado no MongoDB e no CouchDB em vez de outros idiomas, como Java, C ++?

19

Eu fiz essa pergunta no SO, mas foi sugerido que tente aqui. Então aqui vai:

Até agora, meu entendimento do Javascript é que é uma linguagem do lado do cliente que captura eventos e torna uma página da web dinâmica.

Mas, ao ler a comparação entre o MongoDB e o CouchDB , notei que ambos estão usando Javascript. Isso me faz pensar na razão por trás da escolha do JavaScript em relação a outras linguagens convencionais.

Acho que estou tentando entender o papel do JavaScript e suas vantagens sobre outros idiomas.

Atualização: não estou perguntando sobre os idiomas / drivers suportados pelos dois bancos de dados. A comparação diz:

O CouchDB e o MongoDB usam Javascript. O CouchDB usa o Javascript extensivamente, inclusive na construção de visualizações .

O MongoDB também suporta a execução de funções javascript arbitrárias do lado do servidor e usa javascript para operações de mapeamento / redução.

Minha falta de entendimento diz respeito ao motivo pelo qual o Javascript está sendo usado no trabalho de back-end. Por que é preferível criar vistas no CouchDB ou usar operações de mapa / redução? Por que C / C ++ ou Java não foram usados? Quais são as vantagens em usar o Javascript para esse trabalho de back-end?

Jeff Musk
fonte
3
Javascript não é apenas uma linguagem de script do navegador. Alguns outros aplicativos incorporam Javascript ou uma linguagem semelhante (por exemplo, ActionScript no Flash, juntamente com Javascript para criar scripts para vários aplicativos da Adobe). Não tenho certeza, mas talvez o Javascript nunca tenha sido planejado para ser incorporado apenas em navegadores da web. Então ... por que não incorporá-lo em um aplicativo de banco de dados de back-end?
Steve314
Desde que eu vi / li sobre JS executando no navegador, gostaria de saber como é executado no lado do servidor sem abrir um navegador?
jeff almíscar
1
obrigado. você está certo. Eles estão usando o compilador SpiderMonkey para executar a parte JS do lado do servidor. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos apontou isso.
jeff almíscar
6
Para isso, você precisará de um mecanismo javascript, como V8 e SpiderMonkey . Existem muitos usos para Javascript fora do navegador, a wikipedia tem uma lista longa .
yannis
Hmmm - meu comentário anterior é preciso como generalização, mas tentar ser mais específico pode ser perigoso - não sei nada sobre MongoDB ou CouchDB. Embora não haja motivo para um aplicativo de banco de dados de back-end. em um servidor não pode ter seu próprio interpretador Javascript independente do navegador, não sei se é assim que é tratado e as respostas abaixo sugerem que provavelmente não é.
Steve314

Respostas:

15

Código móvel e multiplataforma

JavaScript é o que chamamos de código para celular , o código é transportado do servidor (MongoDB e CouchDB nesse caso) para o cliente (o navegador da web) e executado no cliente sem um processo de instalação.

Os ambientes de tempo de execução JavaScript (navegadores da web) também estão amplamente disponíveis em muitas plataformas. Isso faz do JavaScript uma boa linguagem de plataforma cruzada .

JavaScript não é usado como idioma principal de back-end

O back-end do MongoDB é implementado em C ++ e o CouchDB é implementado em Erlang. Portanto, o JavaScript não é usado como idioma principal para o back-end para esses sistemas.

From mongodb.com :

Escrito em C ++

Em couchdb.apache.com :

O CouchDB foi escrito em Erlang, uma robusta linguagem de programação funcional, ideal para a construção de sistemas distribuídos simultâneos. O Erlang permite um design flexível, facilmente escalável e facilmente extensível.

Jonas
fonte
1
Obrigado pela sua resposta. "O CouchDB usa Javascript extensivamente, incluindo na construção de visualizações". Então, por que o cliente é um navegador para o trabalho de back-end, como a construção de uma exibição? Para tal tarefa, por que um navegador está entrando em cena.
jeff almíscar
@ startup007: Veja a primeira parte da minha resposta. Atualmente, os navegadores da Web já estão instalados na maioria dos sistemas (por exemplo, Mac OS X, Windows, Linux, iPhone, Android), para que o usuário não precise instalar nada, pois os usuários da Web podem executar JavaScript (código móvel).
Jonas
Peço desculpas por não ter entendido imediatamente. Deixe-me elaborar. Então, esses bancos de dados estão abrindo navegadores no lado do servidor para executar parte da tarefa e retornando a saída JSON?
jeff musk
1
Obrigado Raynos! O wiki do spidermonkey diz: "O MongoDB, outro sistema de banco de dados NoSQL usa o SpiderMonkey para execução de JavaScript no servidor." pt.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm interessante
jeff musk
4
errado, nem o MongoDB nem o CouchdB usam o navegador como cliente. o cliente do banco de dados é uma biblioteca que o aplicativo (geralmente um aplicativo da web, mas pode ser qualquer tipo de aplicativo) usa para gerenciar os dados armazenados no banco de dados. Não há navegador na imagem. O JavaScript é usado como uma linguagem de definição de dados (um superconjunto de JSON) e também como a linguagem de procedimento de armazenamento, é executada no mecanismo de banco de dados, não no cliente e, certamente, em nenhum navegador.
Javier
7

Porque o JavaScript é uma linguagem de script.

É uma linguagem flexível e dinâmica, familiar às pessoas.

A outra razão pela qual o JavaScript é usado é porque ele se alinha bem ao formato JSON que esses bancos de dados usam.

E, finalmente, esses bancos de dados precisam de uma linguagem que possa ser interpretada. Porque o código para essas consultas é enviado pela rede.

Então você precisa de um

  • dinâmico
  • flexível
  • familiar
  • interpretado

língua. Eu não acho que o JavaScript é uma má escolha aqui. Provavelmente foi escolhido por ter sintaxe no estilo C.

Agora, por que o JavaScript foi escolhido sobre outra linguagem de script é uma boa pergunta.

Raynos
fonte
2
Now why JavaScript was chosen over another scripting language: Eu poderia especular que é porque o JavaScript é a linguagem de script mais usada, extremamente bem testada por meio do uso em navegadores, e existem algumas excelentes implementações de interpretadores de código aberto. O CouchDB usa uneval(), uma dica de que eles construíram seu intérprete sobre o SpiderMonkey .
yannis
Microsoft fez suporte VBscript no lado do cliente há muitos anos atrás, mas felizmente que nunca decolou ...
Mark K Cowan
6

Todos teremos que comer torta humilde quando percebermos que o JS está sendo usado para escrever:

  • Bases de dados

  • Servidores

  • Sistema operacional

  • e uma infinidade de bibliotecas, estruturas, mecanismos de renderização e linguagens de compilação,

... porque é melhor.

Sério, por favor ... me ouça. Não atire no mensageiro.

Pergunte à Microsoft por que eles estão criando o Windows 8 com JS como cidadão de primeira classe. Ou o novo sistema operacional móvel da Mozilla, ou Rivertrail, PhoneGap, ExtJS ou WebGL da IBM.

Alguma dessas empresas ou projetos teria sucesso se os especialistas não encontrassem algo melhor na implementação?

A resposta é ... Eles fizeram. Nós fizemos. Portanto, o tema aqui deve ser claro: existe um caminho melhor.

Mas, melhor é subjetivo: portanto, precisamos fazer uma pesquisa detalhada e comparar. O que é melhor?

Começou com o AJAX ... e não parou.

  1. E / S sem bloqueio. Este é realmente um grande negócio e vale a pena conhecer. Em JS, este é o padrão de retorno de chamada. Acontece que o uso de retornos de chamada pode ativar um servidor sem bloqueio: Node.js ~ cerca de 8 linhas de código. setTimeout () é um retorno de chamada. Processamento assíncrono de thread único.

  2. Flexibilidade. O que? -Java e C têm classes e interface, mas são chamados de orientação a objetos. JavaScript possui apenas objetos. Mas é chamado ... outra coisa.

    Ter apenas objetos é uma boa opção para flexibilidade, porque membros e métodos são totalmente dinâmicos no tempo de execução. A herança prototípica não é assustadora. Alguns especialistas a descrevem como um pacote de objetos. -JS é amigável em erros. -Code pode se misturar para resultar em componentes compostos, sem muito esforço ou conhecimento de ... 'interfaces', 'abstração', 'herança', 'encapsulamento', 'polimorfismo'. Coisas boas, mas como a Nike, em JS; você apenas faz.

  3. Tradução de dados. Com o JSON, os objetos podem ser transferidos de frente para trás e de trás para frente. Nenhuma conversão de dados XML. JSON é claramente simples.

  4. Baixa curva de aprendizado. É possível recortar e colar código extremamente complexo e depois depurá-lo. Eu ouço um colega ... 'noobs'. Mas não é apenas para noobs.

- Acontece que esse é um recurso muito bom para a prototipagem rápida. E sites estão surgindo por todo o lado, alavancando essa coisa de design no navegador e mais amplamente; prototipagem em tempo de execução. Checkout JSFiddle e CodePen, também MicroJS. GitHub.

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

It is a big deal.

UPDATE: uma vez que esta postagem, o JavaScript agora é usado extensivamente por outros 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
fonte
Python pode fazer todos aqueles bem
Jonathan
@JonathanLeaders - all? :)
Jack Stone
1
@ jonathan-líderes O Python pode rodar em um navegador da web?
Aaron C
1
  • Você pode fazer menos com mais - existem algumas escolas sobre isso. A escola de verbosidade quer tudo explicado em detalhes super finos que qualquer idiota pode entender. JS é um membro da escola oposta, onde você pode estratificar a complexidade de maneira que seja mais fácil entender o cenário antes de entender como os detalhes mais refinados funcionam. É muito mais fácil gravar em uma interface em JS do que na maioria dos idiomas, o IMO.

  • Funções de primeira classe, fechamentos, herança prototípica - é uma combinação muito, muito flexível. Podemos imitar aulas, se quisermos. Mas isso é visto como um esforço sem sentido por aqueles que entendem JS muito bem. A composição combina com JS muito melhor do que a herança encadeada.

  • O bloqueio é útil em um nível superior. Sim, você me ouviu. Ajuda a manter o foco no JS como mensageiro, e não no cavalo de trabalho, e os processos se enfileiram, permitindo interrupções do comportamento assíncrono entre chamadas de função.

  • Eu diria que a curva de aprendizado é um pouco íngreme para escrever JS poderosos, mas quando você está lá, é uma piada. No entanto, não é difícil implementar coisas pré-cozidas em JS no nível de habilidade mais baixo.

Erik Reppen
fonte
0

Esta questão é um pouco antiga, mas o motivo para usar JavaScript vs Java / C ++ é que nem Java nem C ++ suportam facilmente fragmentos de código.

Mesmo que o JavaScript nunca tenha sido inventado, Java e C ++ seriam uma boa opção para os fragmentos de código-fonte que serão executados no servidor. Eles escolheriam outro idioma ou inventaram o seu. No passado, os produtos usados ​​para criar seu próprio idioma, definir suas próprias regras de produção, AST, intérprete etc. especializados em seu domínio.

Porém, com JavaScript, é extremamente fácil criar uma DSL (Linguagem Específica de Domínio) para o seu produto e incorporar o mecanismo sem ter que se preocupar em criar todas as outras infraestruturas não relacionadas ao domínio.

Andrew T Finnell
fonte
0

Modelo de programação orientada a eventos

O JavaScript foi criado com uma abordagem de memória não compartilhada orientada a eventos. No desenvolvimento da interface do usuário, isso é completamente antigo. Não há suposição de que seu "aplicativo" esteja no controle de um processo. Não há API de processo. Também não há uma função principal.

Seu "aplicativo" é uma coleção de scripts que serão executados quando algo específico acontecer, como

  • o script é carregado no navegador
  • o carregamento da página html atinge um certo ponto
  • em uma interação específica do usuário com um determinado elemento

Isso combina muito bem com os pequenos pedaços da lógica de processamento necessários para as transformações de dados.

Linguagem de script

Ser capaz de executar sem um estágio de compilação significa que as instruções de processamento podem ser armazenadas facilmente. Você pode salvar o script facilmente como texto e transmiti-lo sem nenhum tipo de dado ou conhecimento especial.

Bastante simples, estável e compatível com versões anteriores

O código que você escreve hoje não é muito diferente de 10 anos atrás. O controle de versão provavelmente não será um grande problema para as pessoas que o incorporam.

Desempenho

Existem vários bons mecanismos de código aberto por aí com uma tonelada de trabalho neles. Ele executa um pouco mais rápido do que muitas alternativas.

Aparelho Encaracolado

Muitas pessoas têm um conforto restrito com uma variedade de linguagens de programação. Eles sabem apenas como programar Java ou C #, por exemplo. Portanto, eles esperam aprender JavaScript facilmente, porque parece familiar. Isso é obviamente uma ilusão. Quando eu aprendi Python, estava praticamente no mesmo ritmo que o aprendizado de JavaScript. A sintaxe é apenas emocionalmente significativa, desde que não seja completamente obscura.

Henrik Vendelbo
fonte