Το Wasmer 3.0, ένα κιτ εργαλείων για τη δημιουργία εφαρμογών που βασίζονται σε WebAssembly, είναι διαθέσιμο

Παρουσιάζεται η τρίτη σημαντική έκδοση του έργου Wasmer, η οποία αναπτύσσει έναν χρόνο εκτέλεσης για την εκτέλεση μονάδων WebAssembly που μπορούν να χρησιμοποιηθούν για τη δημιουργία καθολικών εφαρμογών που μπορούν να εκτελεστούν σε διαφορετικά λειτουργικά συστήματα, καθώς και για την εκτέλεση μη αξιόπιστου κώδικα μεμονωμένα. Ο κώδικας του έργου είναι γραμμένος σε Rust και διανέμεται με την άδεια MIT.

Η δυνατότητα εκτέλεσης μιας εφαρμογής σε διαφορετικές πλατφόρμες παρέχεται με τη μεταγλώττιση κώδικα σε ενδιάμεσο κώδικα WebAssembly χαμηλού επιπέδου, ο οποίος μπορεί να εκτελεστεί σε οποιοδήποτε λειτουργικό σύστημα ή να ενσωματωθεί σε προγράμματα σε άλλες γλώσσες προγραμματισμού. Τα προγράμματα είναι ελαφριά κοντέινερ που εκτελούν ψευδοκώδικα WebAssembly. Αυτά τα κοντέινερ δεν είναι συνδεδεμένα με το λειτουργικό σύστημα και μπορούν να περιλαμβάνουν κώδικα που γράφτηκε αρχικά σε οποιαδήποτε γλώσσα προγραμματισμού. Η εργαλειοθήκη Emscripten μπορεί να χρησιμοποιηθεί για τη μεταγλώττιση στο WebAssembly. Για τη μετάφραση του WebAssembly σε κώδικα μηχανής της τρέχουσας πλατφόρμας, υποστηρίζει τη σύνδεση διαφόρων backend μεταγλώττισης (Singlepass, Cranelift, LLVM) και μηχανών (με χρήση JIT ή δημιουργίας κώδικα μηχανής).

Οι εφαρμογές είναι απομονωμένες από το κύριο σύστημα σε περιβάλλον sandbox και έχουν πρόσβαση μόνο στη δηλωμένη λειτουργικότητα (ένας μηχανισμός ασφαλείας που βασίζεται στη διαχείριση δυνατοτήτων - για ενέργειες με κάθε έναν από τους πόρους (αρχεία, κατάλογοι, υποδοχές, κλήσεις συστήματος, κ.λπ.), η αίτηση πρέπει να έχει τις κατάλληλες εξουσίες). Ο έλεγχος πρόσβασης και η αλληλεπίδραση με το σύστημα παρέχονται χρησιμοποιώντας το WASI (WebAssembly System Interface) API, το οποίο παρέχει διεπαφές προγραμματισμού για εργασία με αρχεία, υποδοχές και άλλες λειτουργίες που παρέχονται από το λειτουργικό σύστημα.

Η πλατφόρμα σάς επιτρέπει να επιτύχετε απόδοση εκτέλεσης εφαρμογών κοντά σε εγγενείς συγκροτήσεις. Χρησιμοποιώντας το Native Object Engine για τη λειτουργική μονάδα WebAssembly, μπορείτε να δημιουργήσετε κώδικα μηχανής ("wasmer compile -native" για τη δημιουργία προμεταγλωττισμένων αρχείων αντικειμένων .so, .dylib και .dll), ο οποίος απαιτεί ελάχιστο χρόνο εκτέλεσης για την εκτέλεση, αλλά διατηρεί όλη την απομόνωση του sandbox χαρακτηριστικά. Είναι δυνατή η παροχή προμεταγλωττισμένων προγραμμάτων με ενσωματωμένο Wasmer. Το Rust API και το Wasm-C-API προσφέρονται για τη δημιουργία πρόσθετων και επεκτάσεων.

Για να εκκινήσετε ένα κοντέινερ WebAssembly, απλώς εγκαταστήστε το Wasmer στο σύστημα χρόνου εκτέλεσης, το οποίο παρέχεται χωρίς εξωτερικές εξαρτήσεις ("curl https://get.wasmer.io -sSfL | sh") και εκτελέστε το απαραίτητο αρχείο ("wasmer test.wasm" ). Τα προγράμματα διανέμονται με τη μορφή κανονικών λειτουργικών μονάδων WebAssembly, η διαχείριση των οποίων μπορεί να γίνει με τη χρήση του διαχειριστή πακέτων WAPM. Το Wasmer είναι επίσης διαθέσιμο ως βιβλιοθήκη που μπορεί να χρησιμοποιηθεί για την ενσωμάτωση κώδικα WebAssembly σε προγράμματα Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir και Java.

Σημαντικές αλλαγές στο Wasmer 3.0:

  • Προστέθηκε η δυνατότητα δημιουργίας εγγενών εκτελέσιμων αρχείων για οποιαδήποτε πλατφόρμα. Η εντολή "wasmer create-exe" έχει επανασχεδιαστεί πλήρως για να μετατρέψει ένα ενδιάμεσο αρχείο κώδικα WebAssembly σε αυτόνομα εκτελέσιμα για πλατφόρμες Linux, Windows και macOS που μπορούν να εκτελεστούν χωρίς να εγκαταστήσετε το ίδιο το Wasmer.
  • Είναι δυνατή η εκκίνηση πακέτων WAPM που βρίσκονται στον κατάλογο wapm.io χρησιμοποιώντας την εντολή «wasmer run». Για παράδειγμα, η εκτέλεση του "wasmer run python/python" θα κατεβάσει το πακέτο python από το αποθετήριο wapm.io και θα το εκτελέσει.
  • Το Wasmer Rust API έχει επανασχεδιαστεί πλήρως, αλλάζοντας το στυλ εργασίας με τη μνήμη και παρέχοντας τη δυνατότητα ασφαλούς αποθήκευσης αντικειμένων Wasm στη δομή του Store. Μια νέα δομή MemoryView έχει προταθεί που επιτρέπει την ανάγνωση και την εγγραφή δεδομένων σε μια γραμμική περιοχή μνήμης.
  • Ένα σύνολο στοιχείων wasmer-js έχει υλοποιηθεί για την εκτέλεση του Wasmer σε ένα πρόγραμμα περιήγησης ιστού και την αλληλεπίδραση μαζί του από JavaScript χρησιμοποιώντας τη βιβλιοθήκη wasm-bindgen. Στις δυνατότητές του, το wasmer-js αντιστοιχεί στα εξαρτήματα wasmer-sys που έχουν σχεδιαστεί για την εκτέλεση του Wasmer σε κανονικά λειτουργικά συστήματα.
  • Οι κινητήρες έχουν απλοποιηθεί. Αντί για ξεχωριστούς κινητήρες για JIT, δυναμική και στατική σύνδεση (Universal, Dylib, StaticLib), προσφέρεται τώρα ένας κοινός κινητήρας και η φόρτωση και η αποθήκευση κώδικα ελέγχεται στο επίπεδο της ρύθμισης των παραμέτρων.
  • Για την αποσειροποίηση των τεχνουργημάτων, χρησιμοποιείται το πλαίσιο rkyv, το οποίο διασφαλίζει τη λειτουργία σε λειτουργία μηδενικής αντιγραφής, δηλ. το οποίο δεν απαιτεί πρόσθετη εκχώρηση μνήμης και εκτελεί αποσειριοποίηση μόνο χρησιμοποιώντας την αρχική προσωρινή μνήμη. Η χρήση του rkyv έχει αυξήσει σημαντικά την ταχύτητα εκκίνησης.
  • Ο μεταγλωττιστής singlepass Singlepass έχει βελτιωθεί, προσθέτοντας υποστήριξη για λειτουργίες πολλαπλών τιμών, βελτιωμένη αξιοπιστία και πρόσθετη υποστήριξη για πλαίσια χειρισμού εξαιρέσεων.
  • Βελτιωμένη υλοποίηση του API WASI (WebAssembly System Interface). Τα προβλήματα στη διεπαφή λογισμικού WASI για την εργασία με το σύστημα αρχείων έχουν επιλυθεί. Οι εσωτερικοί τύποι έχουν επανασχεδιαστεί χρησιμοποιώντας το WAI (WebAssembly Interfaces), το οποίο θα επιτρέψει μια σειρά νέων λειτουργιών στο μέλλον.

Πηγή: opennet.ru

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