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

Ξεκινήστε με τον προγραμματισμό Rust στα Windows

Θα μπορούσε η Microsoft να αλλάξει από τη χρήση των C, C ++ και C # σε άλλες γλώσσες; Μια πρόσφατη δημοσίευση ιστολογίου από το Κέντρο Ασφάλειας της Microsoft (MSRC) πρότεινε ότι μπορεί να εξετάζει εναλλακτικές λύσεις, με στόχο τη μείωση των κινδύνων για τον κώδικά της. Όπως ο Gavin Thomas, ο κύριος διευθυντής μηχανικής ασφαλείας στο MSRC, σημείωσε ότι μία από τις κύριες αιτίες των σφαλμάτων στον κώδικα της Microsoft που αναφέρονται στο MSRC είναι η καταστροφή της μνήμης, τα σφάλματα που επιτρέπουν την αντικατάσταση της μνήμης ή την πρόσβαση σε αυτό που πρέπει να προστατεύεται.

Διατήρηση της μνήμης ασφαλή

Η ασφάλεια της μνήμης υπήρξε ένα σημαντικό ζήτημα για μεγάλο χρονικό διάστημα, αλλά η στατιστική εργασία που πραγματοποίησε το MSRC δείχνει ότι το ζήτημα δεν εξαφανίζεται. Έχετε πολλά εργαλεία για να βοηθήσετε στη σύνταξη ασφαλούς κώδικα, από τον κύκλο ζωής ασφαλούς ανάπτυξης της Microsoft, έως τη χρήση νεότερων γλωσσών που είναι ασφαλείς στη μνήμη όπως το C # Όμως αυτές οι προσεγγίσεις έχουν τις αντισταθμίσεις τους: Ο κωδικός που παράγουν είναι πιο αργός και λειτουργεί σε υψηλότερο επίπεδο από το C ++.

Αυτό δεν είναι πρόβλημα για τον κωδικό που αντιμετωπίζει ο πελάτης. Δεν υπάρχει αντιληπτή διαφορά μεταξύ της εμπειρίας χρήστη C ++ - develoepd και μιας ενσωματωμένης C #. Αλλά σε επίπεδο συστήματος, ο κώδικας που χρησιμοποιείται για τη δημιουργία λειτουργικών συστημάτων και προγραμμάτων οδήγησης συσκευών, υπάρχει μεγάλη διαφορά. Οι κύκλοι επεξεργαστών έχουν σημασία όταν εργάζεστε σε επίπεδο συστήματος και, όπως επισημαίνει ο Thomas στην ανάρτηση του ιστολογίου του, οι μη προστατευμένες γλώσσες όπως το C ++ και το C είναι πραγματικά τα μόνα εργαλεία που λειτουργούν ιστορικά σε αυτό το επίπεδο.

Είναι σαφές ότι οι προσεγγίσεις που είναι ασφαλείς στη μνήμη που χρησιμοποιούνται από γλώσσες υψηλότερου επιπέδου δεν λειτουργούν σε επίπεδο συστήματος. Πολλά από τα προβλήματα που μαστίζουν το ματαιωμένο έργο Longhorn της Microsoft προκλήθηκαν από την προσπάθεια δημιουργίας ενός ολόκληρου λειτουργικού συστήματος στην πλατφόρμα .NET. Πώς μπορούμε λοιπόν να φέρουμε την ασφάλεια της μνήμης στα θεμέλια της ανάπτυξης του συστήματος;

Παρουσιάζοντας το Rust

Η απάντηση έρχεται με μια νέα γενιά γλωσσών προγραμματισμού συστημάτων όπως το Go και το Rust, γλώσσες που έχουν σχέδια ασφαλή στη μνήμη. Καθαρά με την ταχύτητα C και C ++. Η Microsoft χρησιμοποιεί ήδη το Go εκτενώς στο Azure, επειδή είναι η γλώσσα στην οποία γράφεται το Kubernetes. Αλλά αυτές οι προσεγγίσεις δεν έχουν φτάσει ακόμα στα Windows, όπου το C ++ εξακολουθεί να είναι ο βασικός προγραμματισμός συστημάτων.

Στην ανάρτηση του ιστολογίου του, ο Thomas κάνει ένα επιχείρημα για τη χρήση του Mozilla's Rust ως ασφαλούς γλώσσας συστημάτων για Windows. Είναι μια ενδιαφέρουσα πρόταση και έχει ήδη ένα μεγάλο σημείο απόδειξης υπέρ του: Ο σχεδιαστής γλωσσών Mozilla το χρησιμοποιεί ήδη στις τελευταίες εκδόσεις του προγράμματος περιήγησης ιστού, όπου τροφοδοτεί τους τρέχοντες και κινητήρες απόδοσης της Mozilla. Άλλοι μεγάλοι χρήστες Rust περιλαμβάνουν το αποθετήριο λειτουργικών μονάδων JavaScript NPM, Dropbox και Oracle. Ακόμη και η Microsoft το χρησιμοποιεί ήδη, με τον κωδικό Rust σε ορισμένα από τα εργαλεία του Azure IoT Edge.

Ρύθμιση περιβάλλοντος ανάπτυξης Windows Rust

Το προφανές μέρος για να ξεκινήσετε με την ανάπτυξη Rust είναι το Visual Studio Code. Στην αγορά επεκτάσεων, μπορείτε να βρείτε πολλές επεκτάσεις που εγκαθιστούν τον διακομιστή γλωσσών Rust και που παρέχονται με πλήρη υποστήριξη γλώσσας, καθώς και εργαλεία για τη δημιουργία εφαρμογών Rust από τον κώδικα Visual Studio. Χρησιμοποιώ την επίσημη επέκταση Rust από την ομάδα γλωσσών Rust. Άλλα εργαλεία παρέχουν υποστήριξη για αποσπάσματα κώδικα για να ξεκινήσουν την ανάπτυξη, καθώς και πρόσθετα εργαλεία εντοπισμού σφαλμάτων και δοκιμών. Υπάρχουν ακόμη και εργαλεία για την κατασκευή τεκμηρίωσης για τον κωδικό σας. Αξίζει να εγκαταστήσετε το πακέτο επέκτασης Rust ως μέρος του περιβάλλοντος του Visual Studio Code Ruse, καθώς αυτό προσθέτει επιπλέον εργαλεία για εργασία με τα εργαλεία ανάπτυξης του Rust.

Πρώτα πρέπει να εγκαταστήσετε τον μεταγλωττιστή Rust και τον διαχειριστή πακέτων Cargo. Ο επίσημος ιστότοπος εγκατάστασης Rust θα εντοπίσει την έκδοση των Windows που χρησιμοποιείτε και θα παρέχει την κατάλληλη λήψη. Υπάρχουν ακόμη και οδηγίες για την εγκατάσταση του Rust στο υποσύστημα Windows για Linux (WSL), εάν χρησιμοποιείτε το WSL ως μέρος μιας αλυσίδας εργαλείων ανάπτυξης του Unix. Η εκτέλεση του προγράμματος εγκατάστασης Rustup κατεβάζει τα στοιχεία γλώσσας και ρυθμίζει τα Windows ΜΟΝΟΠΑΤΙ. Έχετε την επιλογή προσαρμογής της εγκατάστασης, αλλά στην πράξη είναι καλύτερο να αποδεχτείτε τις προεπιλογές.

Κατανόηση της ασφάλειας σκουριάς και μνήμης

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

Η ομάδα του Mozilla που δημιούργησε τον Rust έχει σκεφτεί βαθιά την ασφάλεια της μνήμης και τις αντισταθμίσεις που μπορούν να συμβούν σε ένα ασφαλές περιβάλλον. Το αποτέλεσμα είναι μια γλώσσα που είναι και ασφαλής και γρήγορη, με εργαλεία που διαχειρίζονται τόσο στοίβες μνήμης όσο και σωρούς. Η εκχώρηση μιας τιμής σε μια συνάρτηση αλλάζει την ιδιοκτησία της, μεταφέροντάς την από το ένα πεδίο στο άλλο. μια παρόμοια διαδικασία διαχειρίζεται τιμές που επιστρέφονται από μια κλήση συνάρτησης.

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

Το μέλλον του Rust στα Windows

Είναι σημαντικό να θυμάστε ότι το Rust εξακολουθεί να είναι μια νέα γλώσσα και πολλά από αυτά που θεωρείτε δεδομένα στην ανάπτυξη των Windows δεν είναι εκεί. Δεν υπάρχει άμεση ενσωμάτωση με Win32 ή άλλα βασικά SDK Windows και δεν θα βρείτε υποστήριξη για εργαλεία Windows GUI χωρίς εγκατάσταση πρόσθετων βιβλιοθηκών. Ωστόσο, αυτό δεν είναι τόσο μεγάλο όσο νομίζετε: Το Rust, όπως το Go, είναι μια γλώσσα προγραμματισμού συστημάτων. Είναι ένα εργαλείο χαμηλού επιπέδου, γρήγορο και ασφαλές. Αυτό το καθιστά ιδανικό για τη δημιουργία κώδικα που χειρίζεται τα δεδομένα σας, τη μείωση των αριθμών και την επεξεργασία συστοιχιών. Αντί να χρησιμοποιείτε ρουτίνες C ++ όπου εργάζεστε με μεγάλες ποσότητες μνήμης, χρησιμοποιήστε το Rust αντ 'αυτού, μειώνοντας τον κίνδυνο που σχετίζεται με καταστροφή της μνήμης.

Εάν θέλετε να αναπτύξετε εφαρμογές GUI στο Rust, έχετε την επιλογή να χρησιμοποιήσετε μία από πολλές βιβλιοθήκες UI. Ίσως το πιο εύκολο στη χρήση είναι το Kiss-ui, το οποίο υποστηρίζει την ανάπτυξη GUI για Windows και Linux, με πρόσβαση API Win32 καθώς και υποστήριξη για GTK πολλαπλών πλατφορμών. Άλλες βιβλιοθήκες προσθέτουν βαθύτερη υποστήριξη API Win32.

Ακόμα κι αν η Microsoft δεν καταλήξει να υποστηρίζει άμεσα το Rust, υπάρχει πολλή υποστήριξη κοινότητας. Ενώ η συναρμολόγηση μιας πλήρους αλυσίδας εργαλείων μπορεί να εξακολουθεί να είναι θέμα επιλογής των διαφόρων στοιχείων που χρειάζεστε και χρησιμοποιώντας εργαλεία όπως το Rustup για να τα εγκαταστήσετε, η άφιξη των επεκτάσεων και των πακέτων επέκτασης κώδικα του Visual Studio φαίνεται να είναι έτοιμη να απλοποιήσει τη διαδικασία. Οι τακτικές ενημερώσεις δείχνουν ότι πρόκειται για ένα ζωντανό έργο, με την ομάδα του Rust και μια σειρά από τρίτους συνεργάτες να εργάζονται σε αυτό.

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

Εκτός των Windows, το Rust είναι μια βασική γλώσσα για την ανάπτυξη WebAss Assembly και θα βοηθήσει στην παράδοση πολύ πιο ισχυρών εφαρμογών ιστού στην επερχόμενη έκδοση Edge με την υποστήριξη Chromium - ένας ακόμη λόγος για να του δώσει μια προσεκτική εμφάνιση.