Προγραμματισμός

Τι είναι το Deno; Ένα «καλύτερο» Node.js

Αν σας αρέσει το Node.js αλλά όχι ο διαχειριστής πακέτων του npm ή θέλετε ένα πιο ασφαλές περιβάλλον χρόνου εκτέλεσης JavaScript από το Node.js, ίσως βρείτε το νέο έργο ανοιχτού κώδικα Deno που ενδιαφέρει (η λέξη Deno είναι ένα αναγραμματικό του Node). Από την άλλη πλευρά, εάν χρησιμοποιείτε το Node.js στην παραγωγή, δεν υπάρχει τίποτα να δείτε εδώ, προχωρήστε - το Deno είναι ακόμα "πολύ υπό ανάπτυξη".

Το Deno είναι ένα πρόγραμμα για την εκτέλεση κώδικα JavaScript και TypeScript εκτός προγράμματος περιήγησης. Είναι η πιο πρόσφατη προσπάθεια με επικεφαλής τον Ryan Dahl, ο οποίος ίδρυσε το έργο Node.js το 2009 και είναι μια προσπάθεια να φανταστούμε ξανά το Node.js υπό το φως των εξελίξεων στο JavaScript από το 2009, συμπεριλαμβανομένου του μεταγλωττιστή TypeScript. Όπως το Node.js, το Deno είναι ουσιαστικά ένα κέλυφος γύρω από τη μηχανή JavaScript Google V8, αν και σε αντίθεση με το Node.js περιλαμβάνει τον μεταγλωττιστή TypeScript στην εκτελέσιμη εικόνα του.

Deno και προηγμένη JavaScript

Το 2009, η JavaScript δεν είχε αρκετές δυνατότητες που θα ήταν χρήσιμες για το Node.js, σύμφωνα με τον Dahl. Μερικά από αυτά έχουν προστεθεί στο JavaScript με την πάροδο των ετών ως μέρος του προτύπου ECMAScript (ES) και το TypeScript έχει ασχοληθεί με μερικά ακόμη.

Το JavaScript είχε συμβάντα και επιστροφές ουσιαστικά για πάντα, αλλά μπορεί να οδηγήσει σε μάλλον περίπλοκο κώδικα, ειδικά όταν θέλετε να αλυσοδέσετε ασύγχρονες ενέργειες. Υποσχέσεις Κάντε τη σύνταξη λίγο πιο ευανάγνωστη. ΕΝΑ υπόσχεση είναι ένα επιστρεφόμενο αντικείμενο που αντιπροσωπεύει την ενδεχόμενη ολοκλήρωση ή αποτυχία μιας ασύγχρονης λειτουργίας, στην οποία μπορείτε να επισυνάψετε επιστροφές κλήσεων, σε αντίθεση με τη μεταφορά επιστροφών κλήσης σε μια συνάρτηση. Δήλωση μιας συνάρτησης ασύγχρονος απλοποιεί περαιτέρω τη σύνταξη, επιτρέποντάς σας να χρησιμοποιήσετε αναμένω μέσα στη συνάρτηση για παύση με τρόπο που δεν αποκλείει έως ότου διευθετηθεί η υπόσχεση.

Όταν δημιουργήθηκε το Node.js, το de facto πρότυπο για λειτουργικές μονάδες JavaScript ήταν το CommonJS, το οποίο υποστηρίζει το npm. Έκτοτε, η επιτροπή ECMAScript ευλόγησε επίσημα ένα διαφορετικό πρότυπο, ES Modules, το οποίο υποστηρίζει το jspm. Το Deno υποστηρίζει ES Modules.

Οι συστοιχίες που πληκτρολογούνται είναι ένα API ES6 για το χειρισμό δυαδικών δεδομένων, κάτι που θα μπορούσε να χρησιμοποιήσει το Node.js. η έλλειψη υποστήριξης δυαδικών δεδομένων οδήγησε σε ορισμένα προβλήματα σχεδιασμού του Node.js. Το Deno χρησιμοποιεί δακτυλογραφημένους πίνακες όταν χρειάζεται να χειριστεί ακατέργαστα δυαδικά δεδομένα. Το Node.js υποστηρίζει τώρα πληκτρολογημένες συστοιχίες για κωδικό χρήστη.

Το TypeScript είναι ένα τυποποιημένο υπερσύνολο JavaScript που μεταγλωττίζεται σε απλή JavaScript (ES3 ή υψηλότερη · είναι διαμορφώσιμη). Το TypeScript προσθέτει προαιρετικούς τύπους, τάξεις και ενότητες στο JavaScript και υποστηρίζει εργαλεία για εφαρμογές JavaScript μεγάλης κλίμακας. (Ο Anders Hejlsberg το αποκαλεί «JavaScript που κλιμακώνεται».) Όπως αναφέρθηκε προηγουμένως, το Deno περιέχει μια εικόνα του μεταγλωττιστή TypeScript ως μέρος του χρόνου εκτέλεσης. Εάν περάσετε το αρχείο Deno a TypeScript, θα το μεταγλωττίσει πρώτα σε JavaScript και μετά θα το μεταβιβάσει στον κινητήρα V8.

Αδυναμίες σχεδίασης Node.js

Σύμφωνα με τον Dahl, ο οποίος τελικά σχεδίασε τόσο το Node.js όσο και το Deno, το Node.js πάσχει από τρία σημαντικά θέματα σχεδίασης:

  • ένα κακώς σχεδιασμένο σύστημα λειτουργικών μονάδων, με κεντρική διανομή ·
  • πολλά παλαιά API που πρέπει να υποστηρίζονται.
  • και έλλειψη ασφάλειας.

Το Deno επιλύει και τα τρία προβλήματα.

Ασφαλής εκτέλεση Deno

Ο τρόπος με τον οποίο το Deno βελτιώνει την ασφάλεια έναντι του Node.js είναι απλός: Από προεπιλογή, το Deno δεν θα επιτρέπει σε ένα πρόγραμμα να έχει πρόσβαση σε δίσκο, δίκτυο, υποεπεξεργασίες ή περιβαλλοντικές μεταβλητές. Όταν πρέπει να επιτρέψετε οποιοδήποτε από αυτά, μπορείτε να επιλέξετε με μια σημαία γραμμής εντολών, η οποία μπορεί να είναι τόσο κοκκώδης όσο θέλετε, για παράδειγμα - Allow-read = / tmp ή --allow-net = google.com. Μια άλλη βελτίωση της ασφάλειας στο Ντενό είναι ότι πεθαίνει πάντα με άγνωστα σφάλματα, σε αντίθεση με το Node.js, το οποίο θα επιτρέψει την εκτέλεση να συνεχιστεί μετά από ένα ανεκπλήρωτο σφάλμα, με αποτελέσματα που μπορεί να μην είναι προβλέψιμα.

Ενότητες Deno

Στο Node.js, φορτώνετε CommonJS modules χρησιμοποιώντας το απαιτώ λέξη-κλειδί και όλοι, τυπικοί και τρίτοι, προέρχονται σιωπηρά από το npmjs.com. Στο Ντενό, φορτώνετε μονάδες ES χρησιμοποιώντας το εισαγωγή λέξη-κλειδί και δηλώστε ρητά τη διεύθυνση URL. Για παράδειγμα:

εισαγωγή * ως αρχείο καταγραφής από το "//deno.land/std/log/mod.ts";

Οι λειτουργικές μονάδες Deno μπορούν να φιλοξενηθούν οπουδήποτε - δεν υπάρχει κεντρικό αποθετήριο για λειτουργικές μονάδες τρίτων. Επιπλέον, οι λειτουργικές μονάδες αποθηκεύονται προσωρινά στην κρυφή μνήμη και συλλέγονται τοπικά και δεν ενημερώνονται, εκτός εάν ζητήσετε ρητή ανανέωση. Επομένως, θα πρέπει να μπορείτε να εκτελείτε προγράμματα Deno που είναι ήδη στον φορητό υπολογιστή σας, εφόσον όλες οι εισαγωγές έχουν επιλυθεί μία φορά, ακόμα κι αν βρίσκεστε σε αεροπλάνο χωρίς σύνδεση.

Το Deno έχει μια κεντρική συλλογή πρότυπο ενότητες που δεν έχουν εξωτερικές εξαρτήσεις και ελέγχονται από την κεντρική ομάδα του Ντένο. ζει στον διακομιστή deno.land. Η συλλογή ενότητας deno_std είναι μια χαλαρή θύρα της τυπικής βιβλιοθήκης του Go.

Υπάρχει λίγη ιστορία πίσω από αυτήν την επιλογή μοντέλου για τη βιβλιοθήκη. Ο Dahl έγραψε το πρωτότυπο του Deno κυρίως στη γλώσσα Go, αλλά ανακάλυψε πιθανές συγκρούσεις μεταξύ των συλλεκτών σκουπιδιών στο Go και V8. Αυτός και οι συνεργάτες του ξαναγράψαν το Deno κατάλληλο με το V8, Rust και το ασύγχρονο πακέτο I / O Rust Tokio. Υλοποίησαν την τυπική βιβλιοθήκη του Deno σε TypeScript.

Σε αυτό το σημείο, το Deno είναι ένα λογικό και διασκεδαστικό περιβάλλον για χρήση για την κατασκευή μικρών ιδιωτικών έργων δέσμης ενεργειών σε TypeScript. Σύμφωνα με τον Dahl, το Deno δεν θα επηρεάσει ποτέ πραγματικά την επιτυχία του Node.js. Ωστόσο, μόλις φτάσει η Deno στην έκδοση 1.0, μπορεί να γίνει μια βιώσιμη επιλογή για την κατασκευή μεγαλύτερων έργων.