wydanie projektu , oferująca zbliżoną do Node.js platformę do wykonywania aplikacji w JavaScript i TypeScript, która może być używana do uruchamiania aplikacji bez przymusu przeglądarki, na przykład do tworzenia handlerów działających na serwerze. W Deno używany jest silnik JavaScript, , który stosowany jest również w Node.js i przeglądarkach opartych na projekcie Chromium. Kod projektu jest objęty licencją MIT. Projekt rozwija Ryan Dahl (), twórca platformy JavaScript Node.js.
Jednym z głównych celów stworzenia nowego środowiska uruchomieniowego dla JavaScript jest zapewnienie bardziej bezpiecznego otoczenia. Aby zwiększyć bezpieczeństwo, otoczka wokół silnika V8 jest napisana w języku Rust, co pozwala uniknąć wielu luk bezpieczeństwa wynikających z niskopoziomowej pracy z pamięcią, takich jak dostęp do obszaru pamięci po jego zwolnieniu, dereferencja wskaźników zerowych i przekroczenie granic bufora. Do obsługi żądań w trybie nieblokującym stosowana jest platforma , również napisana w języku Rust. Tokio umożliwia tworzenie aplikacji o wysokiej wydajności opartych na architekturze zdarzeniowej (Event-driven), obsługujących wielowątkowość i przetwarzanie żądań sieciowych w trybie asynchronicznym.
Podstawowe Deno:
- Skoncentrowanie na bezpieczeństwie w domyślnej konfiguracji. Dostępu do plików, możliwości sieciowe i dostęp do zmiennych środowiskowych są domyślnie zablokowane i wymagają wyraźnego włączenia;
- Wbudowane wsparcie dla języka TypeScript oprócz JavaScript;
- Środowisko uruchomieniowe dostarczane jest w postaci jednego samowystarczalnego pliku wykonawczego („deno”). Aby uruchomić aplikacje za pomocą Deno, wystarczy na swoją platformę jeden plik wykonywalny o rozmiarze około 10 MB, nie mający zewnętrznych zależności i nie wymagający żadnej specjalnej instalacji w systemie;
- Podczas uruchamiania programu, a także do ładowania modułów można użyć adresacji przez URL. Na przykład, aby uruchomić program welcome.js, można użyć polecenia „deno https://deno.land/std/examples/welcome.js”. Kod z zewnętrznych źródeł jest pobierany i buforowany na lokalnym systemie, ale nigdy nie jest automatycznie aktualizowany (aby go zaktualizować, należy wyraźnie uruchomić aplikację z flagą „—reload”);
- Skuteczna obsługa żądań sieciowych HTTP w aplikacjach, platforma jest zaprojektowana do tworzenia wysokowydajnych aplikacji sieciowych;
- Możliwość tworzenia uniwersalnych aplikacji webowych, które mogą działać zarówno w Deno, jak i w zwykłej przeglądarce internetowej;
- Oprócz runtime, platforma Deno pełni także rolę menedżera pakietów i umożliwia odwoływanie się do modułów za pomocą URL w kodzie. Na przykład, aby załadować moduł, można w kodzie wskazać «import * as log from «https://deno.land/std/log/mod.ts». Pliki pobrane z zewnętrznych serwerów za pomocą URL są buforowane. Powiązanie z wersjami modułów określane jest przez numery wersji w URL, na przykład «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- W skład systemu zintegrowano system inspekcji zależności (komenda «deno info») oraz narzędzie do formatowania kodu (deno fmt).
- Dla twórców aplikacji zestaw standardowych modułów, które przeszły dodatkowy audyt i testy kompatybilności;
- Wszystkie skrypty aplikacji mogą zostać połączone w jeden plik JavaScript.
Różnice w stosunku do Node.js:
- Deno nie korzysta z menedżera pakietów npm
i nie jest powiązany z repozytoriami, adresowanie modułów odbywa się za pomocą URL lub ścieżki plików, a same moduły mogą być umieszczone na dowolnej stronie; - W Deno nie używa się «package.json» do definiowania modułów;
- Różnice w API, wszystkie asynchroniczne operacje w Deno zwracają obietnicę;
- Deno wymaga jawnego określenia wszystkich potrzebnych uprawnień dla plików, sieci i zmiennych środowiskowych;
- Wszystkie błędy, które nie mają obsługi, prowadzą do zakończenia działania aplikacji;
- W Deno stosuje się system modułów ECMAScript i nie obsługuje require().
Źródło: opennet.ru
