Почему Javascript используется в MongoDB и CouchDB вместо других языков, таких как Java, C ++?

19

Я задал этот вопрос на SO, но мне предложили попробовать здесь. Так что вот так:

До сих пор я понимал Javascript, что это клиентский язык, который фиксирует события и делает веб-страницу динамичной.

Но, читая сравнение между MongoDB и CouchDB, я заметил, что оба используют Javascript. Это заставляет меня задуматься о причине выбора JavaScript по сравнению с другими традиционными языками.

Думаю, я пытаюсь понять роль JavaScript и его преимущества перед другими языками.

Обновление: я не спрашиваю о языках / драйверах, поддерживаемых двумя базами данных. Сравнение говорит:

И CouchDB, и MongoDB используют Javascript. CouchDB широко использует Javascript, включая создание представлений .

MongoDB также поддерживает запуск произвольных функций JavaScript на стороне сервера и использует JavaScript для операций отображения / сокращения.

Мое непонимание относится к тому, почему Javascript вообще используется для серверной работы. Почему он предпочтителен для построения представлений в CouchDB или для использования операций map / Reduce? Почему C / C ++ или Java не использовались? Каковы преимущества использования Javascript для такой серверной работы?

Джефф Маск
источник
3
Javascript - это не только язык сценариев браузера. Несколько других приложений встраивают Javascript или аналогичный язык (например, ActionScript во Flash вместе с Javascript для создания сценариев для ряда приложений Adobe). Я не уверен, но, возможно, Javascript никогда не предназначался только для встраивания в веб-браузеры. Итак ... почему бы не встроить его в серверное приложение базы данных?
Steve314
Поскольку я видел / читал о JS, работающем в браузере, мне интересно, как он работает на стороне сервера, не открывая браузер?
Джефф Маск
1
Благодарю. вы правы. Они используют компилятор SpiderMonkey для выполнения части JS на стороне сервера. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos указал на это.
Джефф Маск
6
Для этого вам понадобится движок JavaScript, такой как V8 и SpiderMonkey . Существует довольно много вариантов использования Javascript вне браузера, в Википедии длинный список .
Яннис
Хммм - мой предыдущий комментарий точен как обобщение, но для меня попытка быть более конкретным может быть опасной - я ничего не знаю о 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 обеспечивает гибкую конструкцию, которая легко масштабируется и легко расширяется.

Jonas
источник
1
Благодарю за ваш ответ. «CouchDB широко использует Javascript, включая создание представлений». Так почему же клиент является браузером для серверной работы, такой как создание представления? Для такой задачи, почему браузер входит в картину.
Джефф Маск
@ startup007: см. первую часть моего ответа. Веб-браузеры уже установлены на большинстве систем сегодня (например, Mac OS X, Windows, Linux, iPhone, Android), поэтому пользователю не нужно ничего устанавливать, поскольку веб-браузеры могут выполнять JavaScript (мобильный код).
Джонас
Я прошу прощения за то, что не получил это сразу. Позвольте мне уточнить. Итак, открывают ли эти базы данных браузеры на стороне сервера для выполнения некоторой части задачи, а затем возвращают вывод JSON?
Джефф Маск
1
Спасибо Рейнос! Вики о spidermonkey говорят: «MongoDB, другая система баз данных NoSQL, использует SpiderMonkey для выполнения JavaScript на стороне сервера». en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . хм интересно
Джефф Маск
4
неправильно, ни MongoDB, ни CouchdB не используют браузер в качестве клиента. клиент базы данных - это библиотека, которую приложение (обычно веб-приложение, но может быть любым приложением) использует для управления данными, хранящимися в базе данных. Там нет браузера на картинке. JavaScript используется в качестве языка определения данных (расширенный набор JSON), а также в качестве языка процедур хранения, он выполняется в ядре базы данных, а не на клиенте и, конечно же, не в любом браузере.
Хавьер
7

Потому что JavaScript это язык сценариев.

Это гибкий и динамичный язык, который знаком людям.

Другая причина использования JavaScript в том, что он хорошо согласуется с форматом JSON, который используют эти базы данных.

И, наконец, эти базы данных нуждаются в языке, который можно интерпретировать. Потому что код для этих запросов отправляется по сети.

Так что вам нужно

  • динамический
  • гибкий
  • знакомые
  • интерпретированы

язык. Я не думаю, что JavaScript это плохой выбор здесь. Вероятно, он выбран из-за наличия синтаксиса в стиле C.

Теперь, почему JavaScript был выбран по сравнению с другим языком сценариев, это хороший вопрос.

Raynos
источник
2
Now why JavaScript was chosen over another scripting languageЯ могу предположить, что это потому, что JavaScript является наиболее широко используемым языком сценариев, чрезвычайно хорошо протестирован благодаря использованию в браузерах, и существует довольно много отличных реализаций интерпретатора с открытым исходным кодом. CouchDB использует uneval()намек на то, что они построили свой интерпретатор поверх SpiderMonkey .
Яннис
Microsoft поддерживала VBscript на стороне клиента много лет назад, но, к счастью, это никогда не развивалось ...
Марк К Коуэн
6

Нам всем придется съесть скромный пирог, когда мы поймем, что JS используется для записи:

  • Базы данных

  • Серверы

  • Операционная система

  • и множество библиотек, фреймворков, движков рендеринга и компиляции языков,

... потому что это лучше.

Серьезно, пожалуйста ... выслушай меня. Не стреляйте в курьера.

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

Была ли бы какая-либо из этих компаний или проектов успешной, если бы эксперты не нашли что-то лучшее в реализации?

Ответ ... Они сделали. Мы сделали. Так что тема здесь должна быть понятной: есть лучший путь.

Но лучше субъективно: поэтому мы должны углубиться и сравнить. Что лучше?

Это началось с 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. Синтаксис только эмоционально значим, если он не совсем неясен.

Хенрик Вендельбо
источник