WebAssembly: Σημασία, Πλεονεκτήματα, θήκες χρήσης και άλλα
Παγιδευτείτε στη διαφημιστική εκστρατεία WebAssembly, αλλά δεν είστε ακριβώς σίγουροι τι είναι; Εδώ είναι το χαμηλό.

Το WebAssembly ή το Wasm είναι μια μορφή δυαδικού κώδικα για τη δημιουργία προγραμμάτων που μπορούν να εκτελεστούν σε οποιαδήποτε αρχιτεκτονική υπολογιστή.
Το σύστημα περιλαμβάνει μια εικονική μηχανή και έναν μεταγλωττιστή που μεταφράζει τον κώδικα του υπολογιστή από γλώσσες προγραμματισμού, όπως η C ή η C++ σε μορφές αναγνώσιμες από τον άνθρωπο .wat και δυαδικές μορφές .wasm.
Ο αρχικός στόχος του WebAssembly ήταν να δώσει τη δυνατότητα στους προγραμματιστές να αναπτύξουν εφαρμογές υψηλής απόδοσης για ιστοσελίδες, επιτρέποντας σχεδόν εγγενείς ταχύτητες εκτέλεσης μέσα σε ένα πρόγραμμα περιήγησης. Αλλά η τεχνολογία φαίνεται τώρα να εξελίσσεται πέρα από τα προγράμματα περιήγησης και στο cloud.
Αυτός ο οδηγός σάς δείχνει όλα όσα χρειάζεται να γνωρίζετε για αυτήν την εξελισσόμενη τεχνολογία, τα δυνατά και τα αδύνατα σημεία της, καθώς και τις μελλοντικές της δυνατότητες.
Τι είναι το WebAssembly;
WebAssembly είναι μια μορφή δυαδικού κώδικα που εκτελείται σε μια εικονική μηχανή και στην οποία μπορούν να μεταγλωττιστούν διαφορετικές γλώσσες. Έχει σχεδιαστεί για να είναι φορητό και μπορεί να εκτελεστεί σε πρόγραμμα περιήγησης ιστού ή ως εφαρμογή διακομιστή.
Κυκλοφόρησε για πρώτη φορά το 2017, το WebAssembly είναι μια σύσταση του W3C από το 2019 και διατηρείται από πολλούς συνεργάτες, συμπεριλαμβανομένων των Mozilla, Google, Microsoft, Red Hat και πολλών άλλων.
Ο αρχικός στόχος ήταν να αναπτυχθούν σχεδόν εγγενείς ταχύτητες εκτέλεσης όπως θα συναντούσατε με τις εφαρμογές C/C++ μέσα στο πρόγραμμα περιήγησης. Προορίζεται επίσης να είναι ένα ασφαλές, ανοικτού προτύπου, με δυνατότητα εντοπισμού σφαλμάτων και χωρίς έκδοση πρότυπο ιστού που είναι συμβατό προς τα πίσω και συμβατό με JavaScript.
Πώς λειτουργεί το WebAssembly;
Το WebAssembly έχει σχεδιαστεί ως μηχανή χρόνου εκτέλεσης, όπως Java ή JavaScript, που μπορεί να ενσωματωθεί σε περιβάλλον προγράμματος περιήγησης ή διακομιστή για την εκτέλεση κώδικα υπολογιστή που έχει μεταγλωττιστεί σε μορφές κειμένου .wasm binary ή .wat.
Για να γράψει κώδικα για την εκτέλεση WebAssembly, ο προγραμματιστής γράφει το πρόγραμμα σε οποιαδήποτε από τις πολλές υποστηριζόμενες γλώσσες. Στη συνέχεια, μεταγλωττίστε το χρησιμοποιώντας έναν μεταγλωττιστή WebAssembly είτε AOT (Ahead of Time) είτε JIT (ακριβώς έγκαιρα).
Αυτός ο κώδικας μπορεί να κάνει τις περισσότερες εργασίες στο περιβάλλον εκτέλεσης, αλλά δεν μπορεί να έχει πρόσβαση ή να τροποποιήσει τα αντικείμενα DOM ενός προγράμματος περιήγησης. Οποιαδήποτε τέτοια αλληλεπίδραση πρέπει να διέρχεται μέσω JavaScript.
Πώς να δημιουργήσετε ένα δείγμα εφαρμογής WebAssembly
Η δημιουργία μιας απλής εφαρμογής Wasm για το πρόγραμμα περιήγησης ιστού είναι δυνατή με μερικά μόνο βήματα, όπως μπορείτε να δείτε παρακάτω:
- Κατεβάστε και εγκαταστήστε το Emscripten SDK.
- Γράψτε το δείγμα σας helloworld.γ κωδικοποιήστε ή κάντε το σε C++/Rust αν προτιμάτε.
- τρέξιμο emcc helloworld.c -s WASM=1 -s helloworld.html σε ένα τερματικό για να μεταγλωττίσετε τον κώδικα στο WebAssembly με το Emscripten. Θα δημιουργήσει τα αρχεία Wasm binary, HTML και JavaScript που χρειάζεστε (κωδικός κόλλας).
- Εξυπηρετήστε τη σελίδα helloworld.html μέσω του προγράμματος περιήγησής σας.
Τα πλεονεκτήματα του WebAssembly
Υπάρχουν πολλοί λόγοι για να υιοθετήσετε το WebAssembly και τις σχετικές τεχνολογίες του, όπως:
- Σχεδόν εγγενής απόδοση – Το WebAssembly έχει σχεδιασμό τόσο χαμηλού επιπέδου που προσφέρει επιδόσεις παρόμοιες με γλώσσες χαμηλού επιπέδου όπως η C και η C++.
- Ασφάλεια – Το σύστημα έχει σχεδιαστεί για να είναι ασφαλές απομονώνοντάς το σε εικονικό περιβάλλον με περιορισμένη πρόσβαση στο σύστημα.
- Open Standard – Πολλοί οργανισμοί και άτομα συνεισφέρουν στο WebAssembly και αποτελεί επίσημη σύσταση του W3C.
- Ελαφρύ – Το WebAssembly μεταγλωττίζεται σε δυαδικό κώδικα για να εκτελεστεί σε μια εικονική μηχανή. Αυτός ο κωδικός είναι φορητός και δεν χρειάζεται ούτε συνοδεύεται από αρχεία συστήματος.
- Υποστήριξη πολλαπλών γλωσσών – Περισσότερες από 50 γλώσσες μπορούν να μεταγλωττιστούν στο WebAssembly.
- Ανεξάρτητη πλατφόρμα – Η εικονική μηχανή WebAssembly έχει σχεδιαστεί για κάθε αρχιτεκτονική ώστε να παρουσιάζει το ίδιο περιβάλλον χρόνου εκτέλεσης. Το μόνο που πρέπει να κάνει ένας προγραμματιστής είναι να γράψει κώδικα για το WebAssembly.
Οι περιορισμοί του WebAssembly
- Εργασία σε εξέλιξη – Το πρότυπο βρίσκεται ακόμη σε εξέλιξη και, ως εκ τούτου, πολλά χαρακτηριστικά και βελτιώσεις δεν έχουν ακόμη έρθει.
- Χωρίς αποκομιδή σκουπιδιών – Το WebAssembly εξακολουθεί να στερείται συλλογής σκουπιδιών, αν και ενδέχεται να εφαρμοστεί σύντομα.
- Δεν υπάρχει πρόσβαση στο DOM – Δεν μπορείτε να αποκτήσετε πρόσβαση στο DOM ενός προγράμματος περιήγησης ιστού απευθείας από το WebAssembly, θα πρέπει να περάσετε μέσω JavaScript.
WebAssembly εναντίον Java
Η Java είναι κάπως η παλαιότερη υλοποίηση του WebAssembly. Σχεδιάστηκε ως μια γλώσσα εγγραφής, που τρέχει οπουδήποτε, αλλά ανέπτυξε πολλά ζητήματα στην πορεία.
Όπως και με την Java, το WebAssembly χρησιμοποιεί ένα RE (Περιβάλλον χρόνου εκτέλεσης) για να εκτελέσει τον κώδικά του, αλλά σε αντίθεση με την Java, μπορείτε να γράψετε το WebAssembly στη γλώσσα της επιλογής σας.
WebAssembly εναντίον JavaScript
Το WebAssembly εκτελείται στο πρόγραμμα περιήγησης ή σε άλλο περιβάλλον κεντρικού υπολογιστή, όπως ακριβώς το JavaScript. Ωστόσο, όπου η JavaScript παραδίδεται στο περιβάλλον εκτέλεσης σε μορφή κειμένου και μεταγλωττίζεται ακριβώς στην ώρα της, το WebAssembly έχει τόσο μορφή κειμένου όσο και δυαδική.
Μέσα στα προγράμματα περιήγησης ιστού, η JavaScript έχει πρόσβαση στο DOM, ενώ το WebAssembly όχι. Ωστόσο, όσον αφορά την ταχύτητα εκτέλεσης, το WebAssembly ξεπερνά την JavaScript, με τις σχεδόν εγγενείς ταχύτητες εκτέλεσης κώδικα.
Η ταχύτητα είναι εκεί που το WebAssembly λάμπει και ο λόγος που είναι ιδανικό για τόσες πολλές χρήσεις. Μπορείτε να φορτώσετε το WebAssembly σε ένα πρόγραμμα περιήγησης χρησιμοποιώντας JavaScript και οι δύο κωδικοί μπορούν να εκτελούνται μαζί και να μοιράζονται πόρους.
WebAssembly Vs Docker Vs Kubernetes
Το Docker και το Kubernetes είναι δύο από τις δημοφιλείς τεχνολογίες που τροφοδοτούν το cloud computing. Το Docker είναι μια τεχνολογία κοντέινερ που επιτρέπει στους προγραμματιστές να συσκευάσουν μια εφαρμογή με όλες τις εξαρτήσεις του συστήματος σε ένα ενιαίο πακέτο. Αυτό καθιστά εύκολη την ανάπτυξη της εφαρμογής σε οποιοδήποτε περιβάλλον cloud σε ένα δευτερόλεπτο ή λιγότερο.
Το Kubernetes, από την άλλη πλευρά, είναι ένα σύστημα ανοιχτού κώδικα για τη διαχείριση και την ανάπτυξη εφαρμογών με εμπορευματοκιβώτια όπως το Docker, το CRI-O, το containerd και οποιαδήποτε υλοποίηση Kubernetes CRI (Container Runtime Interface). Το Kubernetes διευκολύνει επίσης την κλιμάκωση των αναπτύξεων cloud σε πολλούς διακομιστές ή εικονικές μηχανές.
Από αυτή την άποψη, το WebAssembly είναι περισσότερο παρόμοιο με το Docker και μπορεί να γίνει για να εκτελείται ως εφαρμογή cloud με κοντέινερ χρησιμοποιώντας το Kubernetes. Προσφέρει επίσης πολλά πλεονεκτήματα σε σχέση με το Docker, αλλά μάλλον δεν θα το αντικαταστήσει.
Beyond The Browser
Στην αρχή υπήρχαν διακομιστές ιστού. Έπρεπε να αφιερώσεις ένα πλήρες μηχάνημα ως διακομιστή. Στη συνέχεια, υπήρχαν εικονικές μηχανές ή VM, που επέτρεπαν σε έναν διακομιστή να τρέχει μόνο σε ένα ή περισσότερα νήματα CPU. Ωστόσο, έπρεπε να έχετε ένα αποκλειστικό VM.
Το cloud computing κατέστησε δυνατή την εκκίνηση και την εκτέλεση διακομιστών μόνο όταν χρειαζόταν, μέσω της αποθήκευσης των εφαρμογών. Αυτό οδήγησε σε μείωση του κόστους, καθώς έπρεπε να πληρώσετε μόνο για ό,τι χρησιμοποιείτε – όχι άλλα αποκλειστικά μηχανήματα. Αλλά υπάρχουν ακόμα μερικά ζητήματα.
Πρώτον, τα αρχεία docker μπορεί να είναι αρκετά Gigabyte και αυτό σημαίνει μια μικρή καθυστέρηση στην εκκίνηση και άλλα ζητήματα διαχείρισης. Ένα παρόμοιο αρχείο Wasm, ωστόσο, μπορεί να είναι μόνο μερικά MB, επειδή είναι ένα προ-μεταγλωττισμένο δυαδικό αρχείο. Αυτό του δίνει πολύ γρηγορότερο χρόνο εκκίνησης από το Docker, ιδανικό για ορισμένες κρίσιμες για το χρόνο εφαρμογές.
Δεύτερον, ο σχεδιασμός του WebAssembly σημαίνει ότι ο προγραμματιστής δεν χρειάζεται να διαχειρίζεται και να εκχωρεί πόρους συστήματος, μπορεί απλώς να φτάσει στο σημείο χρησιμοποιώντας τη γλώσσα προγραμματισμού της επιλογής του.
Αυτές οι δυνατότητες καθιστούν το WebAssembly ιδανικό για την εκτέλεση μικρουπηρεσιών cloud, αν και οι εφαρμογές Docker εξακολουθούν να είναι προτιμότερες για εφαρμογές που απαιτούν περισσότερο έλεγχο του λειτουργικού περιβάλλοντος και του συστήματος αρχείων.
Για περισσότερες πληροφορίες, έργα όπως WasmCloud και WasmEdge αναπτύσσουν το WebAssembly σε μια βιώσιμη πλατφόρμα υπολογιστών.
Περιπτώσεις χρήσης Wasm
Υπάρχουν πολλές περιπτώσεις χρήσης για το WebAssembly, δεδομένης της ιδιόμορφης φύσης του. Μπορούν να χωριστούν σε τρεις μεγάλες ομάδες. ρυθμίσεις εντός προγράμματος περιήγησης, εκτός προγράμματος περιήγησης και υβριδικές ρυθμίσεις.
Ο τύπος του προγράμματος περιήγησης είναι αυτονόητος και το εξωτερικό του προγράμματος περιήγησης αναφέρεται κυρίως σε αναπτύξεις διακομιστή, IoT και cloud, ενώ το υβριδικό αναφέρεται σε συνδυασμό των δύο.
Ακολουθεί μια ματιά στις περιπτώσεις χρήσης όπου το Wasm μπορεί να υπερέχει:
- Υπάρχει ήδη κώδικας υψηλής απόδοσης – Παλιός αλλά υπέροχος κώδικας που μπορείτε απλώς να μεταφέρετε στο WebAssembly.
- Νέος κώδικας υψηλής απόδοσης – Αυτά που πρέπει να σχεδιάσετε και να εφαρμόσετε από την αρχή.
- Μεταφορά εφαρμογών επιφάνειας εργασίας στον Ιστό – Αυτό θα μπορούσε να ανοίξει μια νέα σειρά λύσεων για επιτραπέζιους υπολογιστές που βασίζονται στο διαδίκτυο, όπως π.χ επεξεργασία βίντεο μέσω web.
- Το cloud computing – Τρέχοντας δίπλα στον Docker και την Kubernetes για νέες ευκαιρίες.
Ακολουθεί μια ματιά σε συγκεκριμένες εφαρμογές και σενάρια όπου το Wasm μπορεί να διαπρέψει:
- Επεξεργασία βίντεο & εικόνας
- Σχεδιασμός παιχνιδιών
- Εφαρμογές AI
- Εφαρμογές εικονικής και επαυξημένης πραγματικότητας
- Εφαρμογές μουσικής
- Εφαρμογές P2P
- Εφαρμογές από την πλευρά του διακομιστή
- Υπολογισμοί cloud/cluster
- Σχεδίαση υποβοηθούμενη από υπολογιστή
- Προσομοίωση πλατφόρμας λειτουργικού συστήματος
- κρυπτογράφηση
- Τοπικός διακομιστής Ιστού
- Εφαρμογές απομακρυσμένης επιφάνειας εργασίας
- Επιστημονικές απεικονίσεις
- Υβριδικές εγγενείς εφαρμογές σε smartphone
- Σε συσκευές IoT
Λίστα υποστηριζόμενων γλωσσών και πλαισίων
Περισσότερες από 50 γλώσσες μεταγλωττίζονται στο WebAssembly και εδώ είναι μερικές από τις πιο δημοφιλείς:
- C
- C + +
- R
- Ruby
- Swift
- Go
- Κοτλίν
- Σκωρία
- PHP
- Σακάκι – Ένα πλαίσιο για προγραμματιστές .NET.
- JwebAssembly – Μεταγλωττιστής για bytecode Java και σχετικές γλώσσες όπως JRuby, Jython, Groovy, Scala και Kotlin.
- Πουρνάρι – Ένα πλαίσιο Rust για τη δημιουργία εφαρμογών ιστού πολλαπλών νημάτων χρησιμοποιώντας το WebAssembly.
- AssemblyScript – Μια γλώσσα ειδικά σχεδιασμένη για τη δημιουργία κώδικα WebAssembly.
- Σιτηρά – Μια ισχυρά δακτυλογραφημένη λειτουργική γλώσσα.
- Motoko
Μπορείτε να βρείτε περισσότερες γλώσσες εδώ.
Λίστα με τους χρόνους εκτέλεσης και τα εργαλεία WebAssembly
- Όλα τα μεγάλα προγράμματα περιήγησης έχουν υποστήριξη Wasm
- Πυωδίδιο – Χρόνος εκτέλεσης Python στο πρόγραμμα περιήγησης με την επιστημονική στοίβα Python, συμπεριλαμβανομένων των Panda, NumPy, SciPy.
- wamr
- βάρος – Για μικρο-υπηρεσίες και εφαρμογές ιστού
- Ήμουν – Αρθρωτή διεπαφή συστήματος
- WasmTime – Γρήγορος και ασφαλής χρόνος εκτέλεσης WebAssembly.
- Wasmer
- Lucet
- wasmCloud – Σύννεφο περιβάλλον
- Krustlet – Kubernetes kublete για τρέξιμο Wasm, γραμμένο σε Rust.
- WasmEdge – Περιβάλλον χρόνου εκτέλεσης cloud και edge
Συμπέρασμα
Φτάσαμε στο τέλος του ταξιδιού μας στο WebAssembly και τι περιέχει για τους υπολογιστές. Και όπως μπορείτε να δείτε, υπόσχεται πολλά.
Είναι ακόμα ένα έργο σε εξέλιξη, αλλά σε συνεχή εξέλιξη. Και αν σας ενδιαφέρει, μπορείτε να βρείτε περισσότερες πληροφορίες εδώ, εδώ, να εδώ.





