Mulakan dengan pengaturcaraan Rust dalam Windows

Bolehkah Microsoft beralih dari penggunaan C, C ++, dan C # ke bahasa lain? Satu catatan blog baru-baru ini dari Pusat Keselamatan Keselamatan Microsoft (MSRC) menunjukkan bahawa ia mungkin mencari alternatif, dengan tujuan untuk mengurangkan risiko kodnya. Seperti yang dinyatakan oleh Gavin Thomas, pengurus kejuruteraan keselamatan utama di MSRC, salah satu penyebab utama bug dalam kod Microsoft yang dilaporkan ke MSRC adalah kerosakan memori, pepijat yang membiarkan memori ditimpa atau mengakses memori yang harus dilindungi.

Menjaga memori dengan selamat

Keselamatan memori telah menjadi masalah penting sejak sekian lama, tetapi kerja statistik yang dilakukan oleh MSRC menunjukkan bahawa masalah ini tidak akan hilang. Anda mempunyai banyak alat untuk membantu menulis kod selamat, dari Kitaran Hidup Pembangunan Selamat Microsoft sendiri, hingga menggunakan bahasa yang lebih selamat untuk memori seperti C #. Tetapi pendekatan tersebut mempunyai pertukaran: Kod yang mereka hasilkan lebih lambat dan berfungsi pada tahap yang lebih tinggi daripada C ++.

Itu bukan masalah untuk kod yang dihadapi pelanggan. Tidak ada perbezaan persepsi antara pengalaman pengguna C ++ - develoepd dan pengalaman C #. Tetapi tahap sistem, kod yang digunakan untuk membina sistem operasi dan pemacu peranti, ada perbezaan besar. Kitaran pemproses penting semasa anda bekerja di peringkat sistem, dan seperti yang ditunjukkan oleh Thomas dalam catatan blognya, bahasa yang tidak dilindungi seperti C ++ dan C sebenarnya satu-satunya alat yang secara historis berfungsi pada tahap itu.

Sudah jelas bahawa pendekatan selamat memori yang digunakan oleh bahasa tingkat tinggi tidak berfungsi pada tahap sistem. Sebilangan besar masalah yang melanda projek Longhorn Microsoft yang telah digugurkan disebabkan oleh usaha membina keseluruhan OS pada platform .NET. Oleh itu, bagaimana kita dapat menjadikan keselamatan memori menjadi asas kepada pembangunan sistem?

Memperkenalkan Karat

Jawapannya datang dengan generasi baru bahasa pengaturcaraan sistem seperti Go dan Rust, bahasa yang mempunyai reka bentuk selamat memori. Bersih dengan kelajuan C dan C ++. Microsoft sudah menggunakan Go secara ekstensif di Azure, kerana itu adalah bahasa yang ditulis oleh Kubernetes. Tetapi pendekatan ini belum sampai ke Windows, di mana C ++ masih menjadi raja pengaturcaraan sistem.

Dalam catatan blognya, Thomas membuat hujah untuk menggunakan Mozilla's Rust sebagai bahasa sistem selamat untuk Windows. Ini adalah cadangan yang menarik, dan satu yang sudah mendapat satu bukti besar yang memihak kepadanya: Pereka bahasa Mozilla sudah menggunakannya dalam siaran penyemak imbas web terbarunya, di mana ia memberi kuasa kepada mesin rendering Mozilla semasa dan generasi akan datang. Pengguna Rust besar lain termasuk repositori modul JavaScript NPM, Dropbox, dan Oracle. Malah Microsoft sudah menggunakannya, dengan kod Rust di beberapa alat Azure IoT Edge-nya.

Menyiapkan persekitaran pengembangan Windows Rust

Tempat yang jelas untuk memulakan dengan pengembangan Rust adalah Visual Studio Code. Di pasaran Sambungannya, anda boleh menemui beberapa peluasan yang memasang Pelayan Bahasa Rust dan dilengkapi dengan sokongan bahasa penuh serta alat untuk membina aplikasi Rust anda dari Visual Studio Code. Saya telah menggunakan pelanjutan rasmi Rust dari pasukan bahasa Rust. Alat lain memberikan sokongan untuk potongan kod untuk memulakan pembangunan, serta alat debug dan ujian tambahan. Bahkan ada alat untuk membina dokumentasi untuk kod anda. Perlu memasang paket pelanjutan Rust sebagai sebahagian daripada persekitaran Visual Studio Code Ruse anda, kerana ini menambah alat tambahan untuk bekerja dengan alat pengembangan Rust sendiri.

Anda perlu terlebih dahulu memasang pengkompil Rust dan pengurus pakej Cargo. Laman web pemasangan Rust rasmi akan mengesan versi Windows yang anda gunakan dan memuat turun yang sesuai. Malah ada arahan untuk memasang Rust pada Windows Subsistem untuk Linux (WSL), jika anda menggunakan WSL sebagai sebahagian daripada rangkaian alat pengembangan Unix. Menjalankan pemasang Rustup memuat turun komponen bahasa dan menetapkan PATH Windows . Anda mendapat pilihan untuk menyesuaikan pemasangan, tetapi dalam praktiknya lebih baik menerima lalai.

Memahami keselamatan karat dan ingatan

Sekiranya anda memprogram C atau C ++, peralihan ke Rust agak mudah. Terdapat banyak persamaan antara bahasa, walaupun konsep pemilikan Rust menjadikannya selamat untuk memori. Kepemilikan membolehkan Rust menguruskan skop pemboleh ubah, membiarkannya berlaku hanya ketika berada dalam ruang lingkup. Sekiranya mereka tidak digunakan, mereka tidak berada dalam ingatan. Beberapa pemboleh ubah adalah literal, nilai yang tidak dapat diubah menjadi kod anda. Tetapi jenis pemboleh ubah yang lebih kompleks dapat meminta memori ketika diset, proses yang dalam banyak bahasa memerlukan anda memperuntukkan memori secara eksplisit dan kemudian membebaskannya apabila pemboleh ubah atau objek tidak lagi diperlukan. Rust mengotomatisasi ini, menangani penggunaan memori sebagai sebahagian daripada pengurusan skopnya.

Pasukan di Mozilla yang mencipta Rust telah memikirkan secara mendalam mengenai keselamatan ingatan dan pertukaran yang boleh berlaku di persekitaran yang selamat. Hasilnya adalah bahasa yang selamat dan cepat, dengan alat yang menguruskan timbunan memori dan timbunan. Menetapkan nilai ke fungsi mengubah hak miliknya, memindahkannya dari satu skop ke skop yang lain; proses yang serupa menguruskan nilai yang dikembalikan dari panggilan fungsi.

Pemilikan adalah konsep yang kompleks, tetapi ia penting. Ini melindungi memori dan hanya membiarkan fungsi yang memiliki nilai mengubahnya, bahkan ketika Anda menggunakan referensi ke pemboleh ubah. Kerana Rust menganggap rujukan sebagai meminjam pembolehubah, cuba mengubahnya hanya akan menghasilkan kesalahan, kecuali jika anda menyatakannya dapat berubah.

Masa depan Rust di Windows

Penting untuk diingat bahawa Rust masih merupakan bahasa muda, dan banyak perkara yang anda anggap biasa dalam pembangunan Windows tidak ada. Tidak ada integrasi langsung dengan Win32 atau Windows SDK teras lain, dan anda tidak akan mendapat sokongan untuk alat GUI Windows tanpa memasang perpustakaan tambahan. Walau bagaimanapun, itu bukan masalah yang anda fikirkan: Rust, seperti Go, adalah bahasa pengaturcaraan sistem. Ini alat peringkat rendah, cepat dan selamat. Itu menjadikannya sesuai untuk membina kod yang memanipulasi data anda, menghancurkan nombor, dan memproses tatasusunan. Daripada menggunakan rutin C ++ di mana anda bekerja dengan banyak memori, gunakan Rust sebagai gantinya, mengurangkan risiko yang berkaitan dengan kerosakan memori.

Sekiranya anda ingin mengembangkan aplikasi GUI di Rust, anda mempunyai pilihan untuk menggunakan salah satu dari beberapa perpustakaan UI. Mungkin yang paling mudah digunakan adalah Kiss-ui, yang menyokong pengembangan GUI Windows dan Linux, dengan akses Win32 API serta sokongan untuk GTK lintas platform. Perpustakaan lain menambah sokongan API Win32 yang lebih mendalam.

Walaupun Microsoft tidak menyokong Rust secara langsung, terdapat banyak sokongan komuniti. Walaupun memasang rantai alat sepenuhnya mungkin masih perlu memilih pelbagai elemen yang anda perlukan dan menggunakan alat seperti Rustup untuk memasangnya, kedatangan paket dan pelanjutan Kod Visual Studio nampaknya siap untuk mempermudah prosesnya. Kemas kini berkala menunjukkan bahawa ini adalah projek langsung, dengan pasukan Rust dan sejumlah penyumbang pihak ketiga sedang berusaha.

Prinsip yang mendasari penggunaan bahasa yang selamat dari memori adalah penting, dan tentunya bagus untuk melihat orang-orang di MSRC menangani masalah tersebut. Sehingga ada siaran rasmi bahasa pengaturcaraan sistem rendah yang selamat untuk memori, ia pasti bernilai memberi Rust sekali lagi. Sekiranya Microsoft memilihnya, anda akan berada di depan permainan.

Di luar Windows, Rust adalah bahasa utama untuk pembangunan WebAssembly dan semestinya membantu menyampaikan aplikasi web yang jauh lebih hebat dalam pelepasan Edge bertenaga Chromium yang akan datang — satu lagi sebab untuk memberikan pandangan yang teliti.