Dlaczego JavaScript jest używany w MongoDB i CouchDB zamiast w innych językach, takich jak Java, C ++?

19

Zadałem to pytanie na SO, ale zaproponowano mi wypróbowanie tutaj. A więc oto:

Do tej pory rozumiałem Javascript, że jest to język po stronie klienta, który rejestruje zdarzenia i sprawia, że ​​strona internetowa jest dynamiczna.

Ale po przeczytaniu porównania między MongoDB i CouchDB zauważyłem, że oba używają Javascript. To sprawia, że ​​zastanawiam się nad wyborem JavaScript w porównaniu do innych konwencjonalnych języków.

Myślę, że staram się zrozumieć rolę JavaScript i jego zalet w stosunku do innych języków.

Aktualizacja: Nie pytam o języki / sterowniki obsługiwane przez dwie bazy danych. Porównanie mówi:

Zarówno CouchDB, jak i MongoDB korzystają z Javascript. CouchDB wykorzystuje JavaScript w szerokim zakresie, w tym w tworzeniu widoków .

MongoDB obsługuje także uruchamianie dowolnych funkcji javascript po stronie serwera i używa javascript do operacji mapowania / zmniejszania.

Mój brak zrozumienia dotyczy tego, dlaczego JavaScript jest w ogóle używany do pracy z backendem. Dlaczego jest to preferowane do budowania widoków w CouchDB lub do używania operacji mapowania / zmniejszania? Dlaczego nie używano C / C ++ lub Java? Jakie są zalety korzystania z Javascript do takiej pracy?

Jeff Musk
źródło
3
JavaScript to nie tylko język skryptowy przeglądarki. Kilka innych aplikacji osadza Javascript lub podobny język (np. ActionScript we Flashu, wraz z Javascriptem do skryptowania wielu aplikacji Adobe). Nie jestem pewien, ale może JavaScript nigdy nie miał być osadzony tylko w przeglądarkach internetowych. Więc ... dlaczego nie osadzić go w aplikacji bazy danych zaplecza?
Steve314,
Ponieważ widziałem / czytałem o JS działającym w przeglądarce, zastanawiam się, jak to działa po stronie serwera bez otwierania przeglądarki?
jeff musk
1
dzięki. masz rację. Używają kompilatora SpiderMonkey do wykonania części JS po stronie serwera. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos zwrócił na to uwagę.
jeff musk
6
Do tego potrzebujesz silnika javascript, takiego jak V8 i SpiderMonkey . Istnieje wiele zastosowań Javascript poza przeglądarką, wikipedia ma długą listę .
yannis
Hmmm - mój poprzedni komentarz jest trafny jako uogólnienie, ale dla mnie próba uściślenia może być niebezpieczna - nie wiem nic o MongoDB ani CouchDB. Chociaż nie ma powodu, dla którego aplikacja bazy danych zaplecza. na serwerze nie może mieć własnego niezależnego od przeglądarki interpretera JavaScript, nie wiem, czy tak to jest obsługiwane, a poniższe odpowiedzi sugerują, że prawdopodobnie tak nie jest.
Steve314,

Odpowiedzi:

15

Kod mobilny i wieloplatformowy

JavaScript to tak zwany kod mobilny , kod jest przenoszony z serwera (w tym przypadku MongoDB i CouchDB) do klienta (przeglądarki internetowej) i wykonywany na kliencie bez procesu instalacji.

Środowiska wykonawcze JavaScript (przeglądarki internetowe) są również szeroko dostępne na wielu platformach. Dzięki temu JavaScript jest dobrym językiem dla wielu platform .

JavaScript nie jest używany jako podstawowy język zaplecza

Backend MongoDB jest zaimplementowany w C ++, a CouchDB jest zaimplementowany w Erlang. Tak więc JavaScript nie jest używany jako podstawowy język backendu dla tych systemów.

Od mongodb.com :

Napisane w C ++

Z couchdb.apache.com :

CouchDB jest napisany w Erlang, solidnym funkcjonalnym języku programowania idealnym do budowania współbieżnych systemów rozproszonych. Erlang pozwala na elastyczny projekt, który jest łatwo skalowalny i łatwo rozszerzalny.

Jonas
źródło
1
Dziękuję za odpowiedź. „CouchDB używa JavaScript w szerokim zakresie, w tym w tworzeniu widoków”. Dlaczego więc klient jest przeglądarką do pracy zaplecza, takiej jak budowanie widoku? Do takiego zadania, dlaczego przeglądarka pojawia się na zdjęciu.
jeff musk
@ startup007: Zobacz pierwszą część mojej odpowiedzi. Przeglądarki internetowe są już zainstalowane w większości systemów (np. Mac OS X, Windows, Linux, iPhone, Android), więc użytkownik nie musi niczego instalować, ponieważ brosery internetowe mogą wykonywać JavaScript (kod mobilny).
Jonas
Przepraszam, że nie dostałem tego od razu. Pozwól mi rozwinąć. Czy te bazy danych otwierają przeglądarki po stronie serwera, aby wykonać jakąś część zadania, a następnie zwracają dane wyjściowe JSON?
jeff musk
1
Dzięki Raynos! wiki na spidermonkey mówi: „MongoDB, inny system bazy danych NoSQL używa SpiderMonkey do wykonywania skryptów JavaScript po stronie serwera”. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm ciekawe
jeff musk
4
źle, ani MongoDB, ani CouchdB nie używają przeglądarki jako klienta. klient bazy danych jest biblioteką używaną przez aplikację (zwykle aplikację internetową, ale może to być dowolna aplikacja) do zarządzania danymi przechowywanymi w bazie danych. Na zdjęciu nie ma przeglądarki. JavaScript jest używany jako język definicji danych (nadzbiór JSON), a także jako język procedury składowania, jest wykonywany w silniku bazy danych, nie na kliencie, a na pewno nie w żadnej przeglądarce.
Javier
7

Ponieważ JavaScript jest językiem skryptowym.

Jest to elastyczny i dynamiczny język, który jest znany ludziom.

Innym powodem użycia JavaScript jest to, że dobrze dopasowuje się do formatu JSON używanego przez te bazy danych.

Wreszcie te bazy danych potrzebują języka, który można interpretować. Ponieważ kod tych zapytań jest wysyłany przez sieć.

Więc potrzebujesz

  • dynamiczny
  • elastyczne
  • znajomy
  • interpretowane

język. Nie sądzę, że JavaScript jest tutaj złym wyborem. Jest prawdopodobnie wybrany ze względu na składnię w stylu C.

Pytanie, dlaczego wybrano JavaScript zamiast innego języka skryptowego , jest dobrym pytaniem.

Raynos
źródło
2
Now why JavaScript was chosen over another scripting language: Mogę spekulować, że to dlatego, że JavaScript jest najczęściej używanym językiem skryptowym, wyjątkowo dobrze przetestowanym pod kątem jego użycia w przeglądarkach, i jest całkiem sporo doskonałych implementacji interpretera open source. Wykorzystuje CouchDB uneval(), wskazówkę, że zbudowali interpreter na SpiderMonkey .
yannis
Microsoft wspierał VBscript po stronie klienta wiele lat temu, ale na szczęście to nigdy nie wystartowało ...
Mark K Cowan
6

Wszyscy będziemy musieli jeść pokorne ciasto, gdy zdamy sobie sprawę, że JS jest używany do pisania:

  • Bazy danych

  • Serwery

  • System operacyjny

  • oraz niezliczoną liczbę bibliotek, frameworków, silników renderujących i języków kompilujących,

... bo tak jest lepiej.

Poważnie, proszę ... wysłuchaj mnie. Nie zabijaj posłańca.

Zapytaj Microsoft, dlaczego budują Windows 8 z JS jako obywatel pierwszej klasy. Lub nowy mobilny system operacyjny Mozilli lub Rivertrail, PhoneGap, ExtJS lub WebGL firmy IBM.

Czy którakolwiek z tych firm lub projektów byłaby skuteczna, gdyby eksperci nie znaleźli czegoś lepszego we wdrażaniu?

Odpowiedź brzmi ... zrobili. Zrobiliśmy. Tak więc temat powinien być jasny: istnieje lepszy sposób.

Lepsze jest jednak subiektywne: musimy więc przeanalizować i porównać. Co jest lepsze?

Zaczęło się od AJAX ... i nie przestało.

  1. Nieblokujące we / wy. To naprawdę wielka sprawa i warto o tym wiedzieć. W JS jest to wzorzec oddzwaniania. Okazuje się, że za pomocą wywołań zwrotnych można włączyć serwer nieblokujący: Node.js ~ około 8 linii kodu. setTimeout () to callback. Przetwarzanie asynchroniczne jednowątkowe.

  2. Elastyczność. Co? -Java i C mają klasy i interfejs, ale nazywane są obiektowymi. JavaScript ma tylko obiekty. Ale to się nazywa ... coś innego.

    -Obsługiwanie tylko obiektów jest zaletą dla elastyczności, ponieważ elementy i metody są w pełni dynamiczne w czasie wykonywania. - Dziedziczenie prototypowe nie jest przerażające. Niektórzy eksperci opisują to jako pakiet-obiekt. -JS jest przyjazny w przypadku błędów. -Kod może się ze sobą łączyć, tworząc Kompozytowe Komponenty, bez większego wysiłku lub znajomości ... „interfejsów”, „abstrakcji”, „dziedziczenia”, „enkapsulacji”, „polimorfizmu”. Dobre rzeczy, ale jak Nike, w JS; po prostu to zróbcie.

  3. Tłumaczenie danych. Dzięki JSON obiekty można przenosić od przodu do tyłu, od tyłu do przodu. Brak tłumaczeń danych XML. JSON jest wyraźnie prosty.

  4. Niska krzywa uczenia się. Możliwe jest wycinanie i wklejanie bardzo złożonego kodu, a następnie etapowe debugowanie go. Słyszę kolegę ... „noobsa”. Ale nie dotyczy to tylko noobów.

-Okazuje się, że jest to naprawdę fajna funkcja do szybkiego prototypowania. Wszędzie pojawiają się witryny, które wykorzystują tę funkcję projektowania w przeglądarce i szerzej; prototypowanie środowiska wykonawczego. Kasa JSFiddle i CodePen, także MicroJS. GitHub.

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

It is a big deal.

AKTUALIZACJA: ponieważ ten opublikowany kod JavaScript jest obecnie szeroko stosowany w innych językach.

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
źródło
Python potrafi to wszystko zrobić
Jonathan
@JathanathanLeaders - wszyscy? :)
Jack Stone
1
@ Jonathan-Leaders czy Python może działać w przeglądarce internetowej?
Aaron C
1
  • Więcej możesz zrobić mniej - jest na to kilka szkół. Szkoła gadatliwości chce wszystkiego, co zostało napisane w najdrobniejszych szczegółach, co każdy idiota może zrozumieć. JS jest członkiem przeciwnej szkoły, w której można warstwować złożoność, dzięki czemu łatwiej jest uzyskać pełny obraz, zanim zrozumie się, jak działają drobniejsze szczegóły. O wiele łatwiej jest pisać do interfejsu w JS niż w większości języków, IMO.

  • Funkcje pierwszej klasy, zamknięcia, dziedziczenie prototypów - to naprawdę, bardzo elastyczne połączenie. Możemy naśladować zajęcia, jeśli chcemy. Ale jest to postrzegane jako nieco bezcelowe przedsięwzięcie przez tych, którzy naprawdę dobrze rozumieją JS. Komponowanie pasuje do JS znacznie lepiej niż dziedziczenie w łańcuchach.

  • Blokowanie jest przydatne na wyższym poziomie. Tak, słyszałeś mnie Pomaga skupić się na JS jako komunikatorze, a nie na koniu roboczym, i sam przetwarza kolejki, pozwalając na przerwy w zachowaniu asynchronicznym między wywołaniami funkcji.

  • Powiedziałbym, że krzywa uczenia się jest trochę stroma w pisaniu potężnego JS, ale kiedy już tam będziesz, jest to huk. Jednak wdrożenie JS na niższym poziomie umiejętności wcale nie jest trudne.

Erik Reppen
źródło
0

To pytanie jest trochę przestarzałe, ale powodem użycia JavaScript vs Java / C ++ jest to, że ani Java, ani C ++ nie obsługują fragmentów kodu.

Nawet jeśli JavaScript nigdy nie został wynaleziony, Java ani C ++ byłyby dobrym wyborem dla fragmentów kodu źródłowego, które będą wykonywane po stronie serwera. Wybraliby inny język lub wymyślili własny. W przeszłości produkty używane do tworzenia własnego języka, definiowania własnych reguł produkcji, AST, tłumacza itp., Które specjalizowały się w ich dziedzinie.

Jednak dzięki JavaScript niezwykle łatwo jest stworzyć język specyficzny dla domeny (DSL) dla twojego produktu i osadzić silnik bez martwienia się o stworzenie całej infrastruktury niezwiązanej z domeną.

Andrew T Finnell
źródło
0

Model programowania sterowany zdarzeniami

JavaScript został stworzony z wykorzystaniem opartego na zdarzeniach podejścia do obliczeń bez pamięci współużytkowanej. W rozwoju interfejsu użytkownika jest to całkowicie stary kapelusz. Nie zakłada się, że „aplikacja” kontroluje proces. Brak interfejsu API procesu. Nie ma też głównej funkcji.

Twoja „aplikacja” to zbiór skryptów, które zostaną wykonane, gdy wydarzy się określona rzecz, na przykład

  • skrypt jest ładowany w przeglądarce
  • ładowanie strony HTML osiąga określony punkt
  • na konkretnej interakcji użytkownika z danym elementem

To całkiem dobrze pasuje do niewielkich fragmentów logiki przetwarzania potrzebnych do transformacji danych.

Język skryptowy

Możliwość wykonania bez etapu kompilacji oznacza, że ​​instrukcje przetwarzania można łatwo przechowywać. Możesz łatwo zapisać skrypt jako tekst i przekazywać go bez specjalnych typów danych lub wiedzy.

Całkiem prosta, stabilna i kompatybilna wstecz

Kod, który piszesz dzisiaj, nie różni się zbytnio od 10 lat temu. Przechowywanie wersji prawdopodobnie nie będzie stanowiło większego problemu dla osób go osadzających.

Performant

Istnieje kilka dobrych silników open source z dużą ilością pracy. Działa nieco szybciej niż wiele alternatyw.

Nawiasy klamrowe

Wiele osób ma ograniczony komfort w zakresie języków programowania. Wiedzą tylko na przykład, jak programować Java lub C #. Dlatego oczekują łatwego uczenia się JavaScript, ponieważ wygląda znajomo. To oczywiście złudzenie. Kiedy nauczyłem się języka Python, było prawie w tym samym tempie co nauka JavaScript. Składnia jest istotna emocjonalnie, zakładając, że nie jest całkowicie niejasna.

Henrik Vendelbo
źródło