Deno 1.0 jako następca Node.js
Deno, czyli nowe środowisko uruchomieniowe JavaScriptu oraz TypeScriptu, zostało wydane w wersji 1.0. Ma się ono stać lepszą wersją Node.js, które powstało w czasach, kiedy JavaScript był znaczenie mniej rozwinięty niż obecenie. Głównym twórcą tego projektu jest Ryan Dahl, który stworzył wcześniej wspomniany Node.js. Nie należy jednak panikować — Node.js jeszcze nie odchodzi do lamusa, a Deno zapewne nie zastąpi go z dnia na dzień.
Dlaczego Deno
Ryan Dahl twierdzi, że Deno powstało jako bardziej nowoczesna wersja Node.js. Należy tutaj przede wszystkim zwrócić uwagę na to, że Node.js zostało stworzone w 2009 roku, czyli jeszcze zanim do JavaScriptu zostały wprowadzone obietnice z async/await oraz moduły ES i typowane tablice.
Co więcej, Dahl chciał poprawić pewne rzeczy, które w poprzednim środowisku uruchomieniowym nie działały zbyt dobrze. Tutaj na pierwszym planie jest słabo zaprojektowany system modułów z centralną dystrybucją oraz mnóstwo legacy API, które trzeba obsługiwać. Poprawienia również wymagało bezpieczeństwo Node’a.
Dahl stwierdził, że lepszym pomysłem niż mierzenie się z problemami Node'a będzie stworzenie czegoś całkiem nowego. Stąd inicjatywa Deno, którą ogłosił w 2018 roku w prezentacji "10 Things I Regret About Node.js". Zobaczmy zatem, co ma do zaoferowania Deno.
Czym jest Deno
Według deno.land Deno jest prostym i nowoczesnym środowiskiem uruchomieniowym JavaScriptu oraz TypeScriptu zbudowanym w Rust i korzystającym z V8. Do funkcji nowego produktu należy obsługa TypeScript out of the box oraz domyślnie wyłączony dostęp do plików, sieci i środowiska, co umożliwia większe bezpieczeństwo.
Deno zawiera również wbudowane programy narzędziowe, takie jak dependency inspector (deno info, które pozwoli zapobiegać sytuacjom takim jak dodawanie niepotrzebnych zależności) oraz code formatter (deno fmt). Co więcej, przyszli użytkownicy będą mogli korzystać ze sprawdzonych, standardowych modułów, które zostały stworzone specjalnie do pracy z Deno.
Więcej szczegółów na temat Deno 1.0 poniżej.
Obsługa obietnic
Odpowiednikiem obietnic w Node.js był EventEmitter, wokół którego budowane były istotne API, takie jak gniazda czy HTTP. Niestety ten mechanizm miał wiele problemów, których część udało się ominąć przez dodanie do EventEmittera dodatkowych funkcji. Wady tego rozwiązania powodowały, że wiele programów Node'a dało się zalać danymi.
W Deno gniazda nadal są asynchroniczne, ale otrzymywanie danych wymaga od użytkowników użycia read()
. Dzięki temu nie potrzebuje takich obejść jak stosowany w Node.js pause()
.
Rust API
Głównym komponentem obecnym w Deno jest command-line interface (CLI). Deno nie jest jednak programem monolitycznym, a raczej modularnym zestawem create'ów Rusta.
Crate deno_core
jest gołą wersją Deno bez zależności dla TypeScript, czy Tokio, a CLI jest całkowicie zbudowane wokół deno_core
.
Crate rusty_v8
zapewnia natomiast bindingi Rusta z API C++ do V8. API napisane w Ruście ma jak najbardziej przypominać oryginalne API C++. Cały kod źródłowy V8 znajduje się w rusty_v8
. Co więcej, cały interfejs ma być możliwie bezpieczny do końcowego wykorzystania.
Inne ulepszenia
Twórcy Deno celują w jak największą stabilność rozwiązania, pomimo że całość składa się z wielu interfejsów i komponentów. Cały czas również powstaje masa pluginów, które mają poprawić działanie środowiska uruchomieniowego.
Pełny opis nowego projektu znajduje się tutaj. Natomiast osoby, które chcą wypróbować Deno, powinny zajrzeć na tę stronę.