BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MicrosoftがRust For Windowsをプレビュー

MicrosoftがRust For Windowsをプレビュー

原文(投稿日:2021/04/18)へのリンク

Microsoftは、Rust for Windowsのプレビュー版を発表した。これは、任意のWindows APIを使ってWindows用のRustアプリを作成できるようにすることを目的としている。

Rust for Windowsは、win32metadataプロジェクトを活用して古いAPIと最近のAPIの両方を利用できるようにすることを目指している。そしてC#とF#以外の言語向けのWindows APIの慣用的な投影を作成することを目的としている。

Rust for Windowsは、windowsクレートから入手できる。

windowsクレートを使うと、APIを説明するメタデータから直接生成されたコードを使って、過去、現在、未来のWindows APIを呼び出すことができます。そして、Rustパッケージを直接呼び出すことができ、まるで別のRustモジュールであるかのように呼び出すことができます。

windowsクレートは、必要なすべてのWindows APIへのバインディングをその場で生成できる。 build.rsファイル内で必要なタイプを指定する。

fn main() {
    windows::build!(
        Windows::Data::Xml::Dom::*,
        Windows::Win32::WindowsProgramming::CloseHandle,
        Windows::Win32::WindowsAndMessaging::MessageBoxA,
        Windows::Win32::SystemServices::{
            CreateEventW, SetEvent, WaitForSingleObject
        },
    );
}

生成されたバインディングは、インポートしてRustソースファイルで使用できる。

mod bindings {
    ::windows::include_bindings!();
}

use bindings::{
    Windows::Data::Xml::Dom::*,
    Windows::Win32::SystemServices::{CreateEventW, SetEvent, WaitForSingleObject, PWSTR},
    Windows::Win32::WindowsAndMessaging::{MessageBoxA, HWND, MESSAGEBOX_STYLE},
    Windows::Win32::WindowsProgramming::CloseHandle,
};

Microsoftは、Direct2DMicrosoft.Web.WebView2.CoreWin2Dなど、さまざまなWindows APIを実行する多数のサンプルプログラムを提供している。さらに、Robert Mikhayelyan氏は、MinesweeperをWindows for Rustに移植した

Rustは、win32metadataから派生した最新の言語プロジェクションである。win32metadataは、Windows APIプロジェクションの自動化を実現しただけでなく、uintなどの固有でない型を固有の列挙型に変換したり、HANDLEやGDIオブジェクトなどの不透明な (opaque) 型を厳密に型指定された構造体に変換したりすることで、簡単に使えるよう取り組んでいる。

投影されたすべてのAPIに関するRustドキュメントを入手可能であり、Windows APIと型がどのように慣用的なRustに投影されているかを説明している。

前述のように、Rust for Windowsはまだプレビュー段階にある。プロジェクトはソースコードのバグを特定して修正するコントリビューションを歓迎する。

この記事に星をつける

おすすめ度
スタイル

BT