Чому Javascript використовується в MongoDB та CouchDB замість інших мов, таких як Java, C ++?


19

Я задав це питання на SO, але запропонували спробувати тут. Тож ось що:

На сьогодні я розумію Javascript, що це мова на стороні клієнта, яка фіксує події та робить веб-сторінку динамічною.

Але читаючи порівняння між MongoDB та CouchDB, я помітив, що обидва використовують Javascript. Це змушує мене замислитися над причиною вибору JavaScript у порівнянні з іншими звичайними мовами.

Я думаю, я намагаюся зрозуміти роль JavaScript та її переваги перед іншими мовами.

Оновлення: я не запитую про мови / драйвери, які підтримуються двома базами даних. Порівняння говорить:

І CouchDB, і MongoDB використовують Javascript. CouchDB широко використовує Javascript, в тому числі і для побудови переглядів .

MongoDB також підтримує виконання довільних функцій javascript на сервері та використовує javascript для операцій з картою / зменшенням.

Моє нерозуміння стосується того, чому Javascript взагалі використовується для бекенд-роботи. Чому він надає перевагу для створення представлень у CouchDB або для використання карт / зменшення операцій? Чому C / C ++ або Java не використовувались? Які переваги використання Javascript для такої бек-енд роботи?


3
Javascript - це не лише скриптова мова браузера. Кілька інших додатків вбудовують Javascript або подібну мову (наприклад, ActionScript у Flash, а також Javascript для створення деяких програм Adobe). Я не впевнений, але , можливо , Javascript ніколи не був призначений , щоб тільки бути вбудований в веб - браузерах. Отже ... чому б не вставити його в бек-енд-додаток бази даних?
Steve314

Оскільки я бачив / читав про те, як JS працює в браузері, мені цікаво, як це працює на стороні сервера, не відкриваючи браузер?
jeff musk

1
Спасибі. ти правий. Вони використовують компілятор SpiderMonkey, щоб зробити частину JS на стороні сервера. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos зазначив це.
jeff musk

6
Для цього вам знадобиться двигун javascript, як V8 та SpiderMonkey . Існує досить багато застосувань для Javascript поза браузером, у wikipedia є довгий список .
янніс

Хммм - мій попередній коментар точний як узагальнення, але для мене намагатися бути більш конкретним може бути небезпечно - я нічого не знаю про MongoDB або CouchDB. Хоча немає причин, чому бэк-енд додаток для бази даних. на сервері не може бути власний браузерний незалежний інтерпретатор Javascript, я не знаю, як це обробляється, а відповіді нижче припускають, що, мабуть, це не так.
Steve314

Відповіді:


15

Мобільний код та крос-платформа

JavaScript - це те, що називається мобільним кодом , код транспортується з сервера (MongoDB і CouchDB в цьому випадку) до клієнта (веб-браузера) і виконується на клієнті без процесу встановлення.

Середовища виконання JavaScript (веб-браузери) також широко доступні на багатьох платформах. Це робить JavaScript гарною міжплатформою .

JavaScript не використовується в якості основної мови

Вхідний модуль MongoDB реалізований в C ++, а CouchDB - в Erlang. Таким чином, JavaScript не використовується як основна мова для бекенда для тезових систем.

З сайту mongodb.com :

Написано на C ++

З couchdb.apache.com :

CouchDB написаний на Erlang, надійною функціональною мовою програмування, ідеальною для побудови одночасно розподілених систем. Erlang забезпечує гнучку конструкцію, яка легко масштабується і легко розширюється.


1
Спасибі за вашу відповідь. "CouchDB широко використовує Javascript, включаючи в побудову переглядів". То чому клієнт - це веб-переглядач для задньої роботи, такий як побудова подання? Для такого завдання чому браузер потрапляє на зображення.
jeff musk

@ startup007: Дивіться першу частину моєї відповіді. В більшості систем сьогодні вже встановлені веб-браузери (наприклад, Mac OS X, Windows, Linux, iPhone, Android), тому користувачеві нічого не потрібно встановлювати, оскільки веб-броузери можуть виконувати JavaScript (мобільний код).
Йонас

Прошу вибачення за те, що не отримав його відразу. Дозвольте мені детальніше. Тож ці бази даних відкривають браузери на стороні сервера, щоб виконати якусь частину завдання, а потім повернути вихід JSON?
jeff musk

1
Дякую Райнос! Вікі на spidermonkey говорить: "MongoDB, інша база даних NoSQL використовує SpiderMonkey для виконання JavaScript на сервері".en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . хм цікаво
jeff musk

4
неправильно, ні MongoDB, ні CouchdB не використовують браузер як клієнта. клієнт бази даних - це бібліотека, яку програма (зазвичай це веб-версія, але це може бути будь-який додаток) використовує для управління даними, що зберігаються в базі даних. На зображенні немає браузера. JavaScript використовується як мова визначення даних (набір JSON), а також як мова зберігання процедур, він виконується в двигуні бази даних, а не у клієнта і, звичайно, не в будь-якому браузері.
Хав'єр

7

Тому що JavaScript - це сценарій мови.

Це гнучка та динамічна мова, знайома людям.

Інша причина, що використовується в JavaScript, полягає в тому, що він добре узгоджується з форматом JSON, який використовують ці бази даних.

І нарешті для цих баз даних потрібна мова, яку можна інтерпретувати. Тому що код для цих запитів надсилається по мережі.

Тож вам потрібна

  • динамічний
  • гнучка
  • знайомий
  • інтерпретується

мову. Я не думаю, що JavaScript тут поганий вибір. Це, мабуть, вибрано для синтаксису стилю C.

Тепер, чому JavaScript був обраний на іншій мові сценаріїв - хороше питання.


2
Now why JavaScript was chosen over another scripting language: Я можу припустити, що це тому, що JavaScript є найбільш широко використовуваною скриптовою мовою, надзвичайно добре перевірена через її використання в браузерах, і є досить багато відмінних реалізацій інтерпретаторів з відкритим кодом. CouchDB використовує uneval()натяк на те, що вони побудували свого перекладача поверх SpiderMonkey .
янніс

Microsoft підтримував VBscript на стороні клієнта багато років тому, але, на щастя, ніколи не знімався ...
Марк К Коуан

6

Нам усім доведеться їсти скромний пиріг, коли зрозуміємо, що JS використовується для написання:

  • Бази даних

  • Сервери

  • Операційна система

  • і безліч бібліотек, фреймворків, механізмів візуалізації та мов компіляції,

... тому що краще.

Серйозно, будь ласка ... вислухай мене. Не стріляйте в месенджера.

Запитайте Microsoft, чому вони будують Windows 8 з JS як громадянина першого класу. Або нова мобільна ОС Mozilla, або Rivertrail, PhoneGap, ExtJS або WebGL IBM.

Чи була б якась із цих компаній чи проектів успішною, якби експерти не знайшли щось краще в реалізації?

Відповідь ... Вони зробили. Ми зробили. Тож тема повинна бути зрозумілою: є кращий шлях.

Але, краще, це суб’єктивно: тому ми мусимо деталізувати та порівнювати. Що краще?

Він почався з AJAX ... і не зупинився.

  1. Неблокуючий IO. Це дійсно велика справа і про це варто знати. У JS це схема зворотного виклику. Виявляється, за допомогою зворотних дзвінків можна включити неблокуючий сервер: Node.js ~ приблизно 8 рядків коду. setTimeout () - зворотний дзвінок. Однопоточна асинхронна обробка.

  2. Гнучкість. Що? -Java і C мають класи та інтерфейс, але називаються об'єктно-орієнтованими. У JavaScript є лише об'єкти. Але це називається ... щось інше.

    -Забезпечення лише об'єктів - це приємна річ для гнучкості, оскільки члени та методи повністю динамічні під час виконання. -Прототипічне успадкування не страшно. Деякі експерти описують це як об'єкт-пакет. -JS доброзичливий щодо помилок. -Код може поєднуватися разом, щоб утворити складові компоненти без особливих зусиль чи знань ... 'інтерфейсів', 'абстракції', 'успадкування', 'інкапсуляції', 'поліморфізму'. Гарні речі, але як Nike, в JS; ти просто це робиш.

  3. Переклад даних. За допомогою JSON об'єкти можна переносити спереду назад, назад. Немає перекладів XML даних. JSON явно простий.

  4. Крива низького рівня навчання. Можна вирізати і вставити надзвичайно складний код, а потім поетапно налагодити його. Я чую колегу ... "ноб". Але це не тільки для ноб.

- Виявляється, це дійсно приємна особливість для швидкого прототипування. І веб-сайти спливають у всьому, що використовує цю річ, що розробляється в браузері, і в більш широкому плані; тривалість прототипування. Оформити замовлення JSFiddle та CodePen, також MicroJS. GitHub.

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

It is a big deal.

ОНОВЛЕННЯ: оскільки ця публікація JavaScript зараз широко використовується іншими мовами.

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 також може зробити все це
Джонатан,

@JonathanLeaders - все? :)
Джек Стоун

1
@ jonathan-leader може Python запускатись у веб-браузері?
Аарон С

1
  • З меншим можна зробити менше - на цьому є кілька шкіл. Школа багатослівної роботи хоче, щоб все було прописано надзвичайно дрібними деталями, які може зрозуміти будь-який ідіот. JS є членом протилежної школи, де можна скласти складність, щоб було легше отримати широку картину, перш ніж зрозуміти, як працюють більш тонкі деталі. Набагато простіше писати в інтерфейс на JS, ніж на більшості мов, IMO.

  • Функції першого класу, закриття, успадкування прототипів - це дійсно, дуже гнучка комбота. Ми можемо наслідувати заняття, якщо хочемо. Але це сприймається як дещо безглузде починання тих, хто добре розуміє JS. Композиція підходить JS набагато краще, ніж прикута до спадщини.

  • Блокування корисно на більш високому рівні. Так, ви мене почули. Це допомагає вам зберегти фокус на JS як месенджері, а не на робочій коні та обробляє в значній мірі самі черги, дозволяючи перервати асинхронну поведінку між викликами функцій.

  • Я б сказав, що крива навчання насправді трохи крута для написання потужного JS, але як тільки ти там, це гудок. Однак, на нижчому рівні вміння реалізувати заздалегідь запечені речі в JS не важко.


0

Це питання трохи застаріло, але причиною використання JavaScript проти Java / C ++ є те, що ні Java, ні C ++ легко підтримують фрагменти коду.

Навіть якби JavaScript ніколи не був винайдений, Java або C ++ були б хорошим вибором для фрагментів вихідного коду, які виконуватимуться на стороні сервера. Вони б вибрали іншу мову або придумали свою. Ще тоді продукти, які використовувались для створення власної мови, визначають власні правила виробництва, AST, перекладачі тощо, що спеціалізуються на їхній галузі.

Але за допомогою JavaScript надзвичайно просто створити мову для домену (DSL) для свого продукту та вбудувати двигун, не турбуючись про створення іншої інфраструктури, що не стосується домену.


0

Модель програмування, керована подіями

JavaScript був створений з підходом до обчислень, орієнтованих на подію, що не використовується спільною пам'яттю. У розробці інтерфейсу це абсолютно стара шапка. Немає припущення, що ваша "програма" контролює процес. API процесу немає. Також немає основної функції.

Ваша "програма" - це набір сценаріїв, які будуть виконані, коли трапиться певна річ, наприклад

  • скрипт завантажується в браузер
  • завантаження html-сторінки досягає певної точки
  • про конкретну взаємодію користувача з заданим елементом

Це досить добре поєднується з невеликими фрагментами логіки обробки, необхідних для перетворення даних.

Мова сценарію

Можливість виконання без етапу компіляції означає, що інструкції з обробки можна легко зберігати. Ви можете легко зберегти скрипт у вигляді тексту та передати його без особливих типів даних чи знань.

Досить просто, стабільно і назад сумісні

Код, який ви пишете сьогодні, не так сильно відрізняється від 10 років тому. Версія не може бути проблемою для людей, які вбудовують її.

Виконавець

Є кілька хороших двигунів з відкритим кодом з тоном роботи. Він виконується трохи швидше, ніж багато альтернативних варіантів.

Фігурні дужки

Багато людей обмежені у своєму комфорті різноманітними мовами програмування. Вони знають лише, як, наприклад, програмувати Java або C #. Тому вони розраховують легко вивчити JavaScript, оскільки це виглядає звично. Це, звичайно, ілюзія. Коли я вивчив Python, він був майже в тому ж темпі, що і вивчення JavaScript. Синтаксис є лише емоційно значущим, припускаючи, що він не зовсім незрозумілий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.