Ο συγγραφέας του Node.js παρουσίασε την ασφαλή πλατφόρμα JavaScript Deno 1.0

Μετά από δύο χρόνια ανάπτυξης παρουσιάζονται πρώτη μεγάλη κυκλοφορία Ντενό 1.0, μια πλατφόρμα για αυτόνομη εκτέλεση εφαρμογών σε JavaScript και TypeScript, η οποία μπορεί να χρησιμοποιηθεί για τη δημιουργία προγραμμάτων χειρισμού που εκτελούνται στον διακομιστή. Η πλατφόρμα αναπτύχθηκε από τον Ryan Dahl (Ράιαν Νταχ), δημιουργός του Node.js. Όπως το Node.js, το Deno χρησιμοποιεί μηχανή JavaScript V8, το οποίο χρησιμοποιείται επίσης σε προγράμματα περιήγησης που βασίζονται στο Chromium. Ταυτόχρονα, το Deno δεν είναι ένα fork του Node.js, αλλά είναι ένα νέο έργο που δημιουργήθηκε από την αρχή. Κωδικός έργου διανέμονται από με άδεια MIT. Συνελεύσεις έτοιμος για Linux, Windows και macOS.

Ο σημαντικός αριθμός έκδοσης σχετίζεται με τη σταθεροποίηση των API στον χώρο ονομάτων Deno, τα οποία είναι υπεύθυνα για την αλληλεπίδραση των εφαρμογών με το ΛΣ. Διεπαφές λογισμικού που έχουν μέχρι τώρα δεν έχει σταθεροποιηθεί, είναι κρυφά από προεπιλογή και είναι διαθέσιμα μόνο όταν εκτελούνται σε λειτουργία "--ασταθής". Καθώς δημιουργούνται νέες εκδόσεις, τέτοια API θα γίνονται σταδιακά σταθερά. Το API στον παγκόσμιο χώρο ονομάτων, το οποίο περιλαμβάνει κοινές συναρτήσεις όπως setTimeout() και fetch(), είναι όσο το δυνατόν πιο κοντά στο API των συμβατικών προγραμμάτων περιήγησης ιστού και έχει αναπτυχθεί σύμφωνα με τα πρότυπα Ιστού για προγράμματα περιήγησης. Τα API που παρέχονται από τη Rust, τα οποία χρησιμοποιούνται απευθείας στον κώδικα της πλατφόρμας, καθώς και η διεπαφή για την ανάπτυξη πρόσθετων για χρόνο εκτέλεσης Deno, δεν έχουν ακόμη σταθεροποιηθεί και συνεχίζουν να αναπτύσσονται.

Τα βασικά κίνητρα για τη δημιουργία μιας νέας πλατφόρμας JavaScript ήταν η επιθυμία να εξαλειφθούν τα εννοιολογικά λάθη, παράδεκτος στην αρχιτεκτονική Node.js και παρέχει στους χρήστες ένα πιο ασφαλές περιβάλλον. Για να βελτιωθεί η ασφάλεια, ο κινητήρας V8 είναι γραμμένος σε Rust, το οποίο αποφεύγει πολλά από τα τρωτά σημεία που προκύπτουν από τη χειραγώγηση της μνήμης χαμηλού επιπέδου, όπως η μετά την ελεύθερη πρόσβαση, οι μηδενικές παραπομπές δείκτη και οι υπερβάσεις buffer. Η πλατφόρμα χρησιμοποιείται για την επεξεργασία αιτημάτων σε λειτουργία μη αποκλεισμού Tokio, γραμμένο και στο Rust. Το Tokio σάς επιτρέπει να δημιουργείτε εφαρμογές υψηλής απόδοσης με βάση την αρχιτεκτονική που βασίζεται σε συμβάντα, υποστηρίζοντας πολλαπλές νήματα και επεξεργασία αιτημάτων δικτύου σε ασύγχρονη λειτουργία.

Ο κύριος χαρακτηριστικά Deno:

  • Προεπιλεγμένη διαμόρφωση προσανατολισμένη στην ασφάλεια. Η πρόσβαση σε αρχεία, η δικτύωση και η πρόσβαση στις μεταβλητές περιβάλλοντος είναι απενεργοποιημένες από προεπιλογή και πρέπει να ενεργοποιηθούν ρητά. Οι εφαρμογές εκτελούνται από προεπιλογή σε απομονωμένα περιβάλλοντα sandbox και δεν μπορούν να έχουν πρόσβαση στις δυνατότητες του συστήματος χωρίς την παραχώρηση ρητών αδειών.
  • Ενσωματωμένη υποστήριξη για TypeScript πέρα ​​από JavaScript. Ο τυπικός μεταγλωττιστής TypeScript χρησιμοποιείται για τον έλεγχο τύπων και τη δημιουργία JavaScript, κάτι που οδηγεί σε επιτυχία απόδοσης σε σύγκριση με την ανάλυση JavaScript στο V8. Στο μέλλον, σχεδιάζουμε να προετοιμάσουμε τη δική μας υλοποίηση του συστήματος ελέγχου τύπου TypeScript, το οποίο θα βελτιώσει την απόδοση επεξεργασίας TypeScript κατά μια τάξη μεγέθους.
  • Ο χρόνος εκτέλεσης έρχεται με τη μορφή ενός ενιαίου αυτόνομου εκτελέσιμου αρχείου ("deno"). Για να τρέξετε εφαρμογές χρησιμοποιώντας το Deno αρκεί κατεβάστε για την πλατφόρμα του υπάρχει ένα εκτελέσιμο αρχείο, μεγέθους περίπου 20 MB, το οποίο δεν έχει εξωτερικές εξαρτήσεις και δεν απαιτεί καμία ειδική εγκατάσταση στο σύστημα. Επιπλέον, το deno δεν είναι μια μονολιθική εφαρμογή, αλλά είναι μια συλλογή από πακέτα κλουβιών στο Rust (deno_core, Rusty_v8), το οποίο μπορεί να χρησιμοποιηθεί ξεχωριστά.
  • Κατά την εκκίνηση του προγράμματος, καθώς και για τη φόρτωση λειτουργικών μονάδων, μπορείτε να χρησιμοποιήσετε τη διεύθυνση URL. Για παράδειγμα, για να εκτελέσετε το πρόγραμμα welcome.js, μπορείτε να χρησιμοποιήσετε την εντολή "deno https://deno.land/std/examples/welcome.js". Ο κώδικας από εξωτερικούς πόρους λαμβάνεται και αποθηκεύεται προσωρινά στο τοπικό σύστημα, αλλά δεν ενημερώνεται ποτέ αυτόματα (η ενημέρωση απαιτεί ρητά την εκτέλεση της εφαρμογής με τη σημαία "--reload").
  • Αποτελεσματική επεξεργασία αιτημάτων δικτύου μέσω HTTP σε εφαρμογές· η πλατφόρμα έχει σχεδιαστεί για τη δημιουργία εφαρμογών δικτύου υψηλής απόδοσης.
  • Η δυνατότητα δημιουργίας καθολικών εφαρμογών Ιστού που μπορούν να εκτελεστούν τόσο σε Deno όσο και σε κανονικό πρόγραμμα περιήγησης ιστού.
  • διαθεσιμότητα τυπικό σύνολο μονάδων, η χρήση του οποίου δεν απαιτεί δέσμευση σε εξωτερικές εξαρτήσεις. Οι ενότητες από την τυπική συλλογή έχουν υποβληθεί σε πρόσθετο έλεγχο και δοκιμές συμβατότητας.
  • Εκτός από το χρόνο εκτέλεσης, η πλατφόρμα Deno λειτουργεί επίσης ως διαχειριστής πακέτων και σας επιτρέπει να έχετε πρόσβαση σε λειτουργικές μονάδες μέσω URL μέσα στον κώδικα. Για παράδειγμα, για να φορτώσετε μια λειτουργική μονάδα, μπορείτε να καθορίσετε στον κωδικό "εισαγωγή * ως αρχείο καταγραφής από το "https://deno.land/std/log/mod.ts". Τα αρχεία που λαμβάνονται από εξωτερικούς διακομιστές μέσω URL αποθηκεύονται προσωρινά. Η δέσμευση σε εκδόσεις λειτουργικών μονάδων καθορίζεται με τον καθορισμό των αριθμών έκδοσης μέσα στη διεύθυνση URL, για παράδειγμα, "https://unpkg.com/[προστασία μέσω email]/dist/liltest.js";
  • Η δομή περιλαμβάνει ένα ενσωματωμένο σύστημα επιθεώρησης εξάρτησης (την εντολή «deno info») και ένα βοηθητικό πρόγραμμα για τη μορφοποίηση κώδικα (deno fmt).
  • Όλα τα σενάρια εφαρμογών μπορούν να συνδυαστούν σε ένα αρχείο JavaScript.

Διαφορές από το Node.js:

  • Το Deno δεν χρησιμοποιεί τη διαχείριση πακέτων npm
    και δεν συνδέεται με αποθετήρια, οι λειτουργικές μονάδες απευθύνονται μέσω μιας διεύθυνσης URL ή μέσω μιας διαδρομής αρχείου και οι ίδιες οι μονάδες μπορούν να τοποθετηθούν σε οποιονδήποτε ιστότοπο.
  • Η Deno δεν χρησιμοποιεί το "package.json" για τον ορισμό λειτουργικών μονάδων.
  • Διαφορά API, όλες οι ασύγχρονες ενέργειες στο Deno επιστρέφουν μια υπόσχεση.
  • Το Deno απαιτεί ρητό ορισμό όλων των απαραίτητων δικαιωμάτων για αρχεία, μεταβλητές δικτύου και περιβάλλοντος.
  • Όλα τα σφάλματα που δεν παρέχονται με τους χειριστές οδηγούν στον τερματισμό της εφαρμογής.
  • Το Deno χρησιμοποιεί το σύστημα λειτουργικών μονάδων ECMAScript και δεν υποστηρίζει την require();
  • Ο ενσωματωμένος διακομιστής HTTP της Deno είναι γραμμένος σε TypeScript και εκτελείται πάνω από εγγενείς υποδοχές TCP, ενώ ο διακομιστής HTTP Node.js είναι γραμμένος σε C και παρέχει δεσμεύσεις για JavaScript. Οι προγραμματιστές της Deno έχουν επικεντρωθεί στη βελτιστοποίηση ολόκληρου του επιπέδου υποδοχής TCP και στην παροχή μιας πιο γενικής διεπαφής. Ο διακομιστής Deno HTTP παρέχει χαμηλότερη απόδοση, αλλά εγγυάται προβλέψιμο χαμηλό λανθάνοντα χρόνο. Για παράδειγμα, στη δοκιμή, μια απλή εφαρμογή βασισμένη σε διακομιστή Deno HTTP μπόρεσε να επεξεργαστεί 25 χιλιάδες αιτήματα ανά δευτερόλεπτο με μέγιστη καθυστέρηση 1.3 χιλιοστών του δευτερολέπτου. Στο Node.js, μια παρόμοια εφαρμογή επεξεργαζόταν 34 χιλιάδες αιτήματα ανά δευτερόλεπτο, αλλά οι καθυστερήσεις κυμαίνονταν από 2 έως 300 χιλιοστά του δευτερολέπτου.
  • Το Deno δεν είναι συμβατό με πακέτα για το Node.js (NPM), αλλά αναπτύσσεται ξεχωριστά ενδιάμεσο για συμβατότητα με την τυπική βιβλιοθήκη Node.js, καθώς αναπτύσσεται, όλο και περισσότερες εφαρμογές που έχουν γραφτεί για το Node.js θα μπορούν να εκτελούνται στο Deno.
  • Πηγή: opennet.ru

Προσθέστε ένα σχόλιο