Microsoft выпустила ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Rust Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Windows API

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ Rust crate ΠΏΠΎΠ΄ MIT License, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

[dependencies]
windows = "0.2.1"

[build-dependencies]
windows = "0.2.1"

ПослС этого Π² скриптС сборки build.rs ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ для вашСго прилоТСния:

fn main() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}

ДокумСнтация ΠΎ доступных модулях ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π½Π° docs.rs.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

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

use bindings::{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programming::CloseHandle,
};

fn main() -> windows::Result<()> {
let doc = XmlDocument::new()?;
doc.load_xml("<html>hello world</html>")?;

let root = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "hello world");

unsafe {
let event = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(event).ok()?;
WaitForSingleObject(event, 0);
CloseHandle(event).ok()?;
}

Ok(())
}

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ unsafe, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, Π½Π΅ адаптируя ΠΈΡ… ΠΊ конвСнциями Rust. По Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ устроСн crate libc, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слуТит Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ crate для доступа ΠΊ libc ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ основа для пострСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ с бСзопасным интСрфСйсом.


ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ создан Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Win32 Metadata Project, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π²Π°Π½ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ созданиС API для Ρ€Π°Π·Π½Ρ‹Ρ… языков программирования. Вторая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая Π±Ρ‹Π»Π° создана Π½Π° основС Metadata Project Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Ρ„Π°Π·Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° — C#/Win32. Π’Π°ΠΊΠΆΠ΅ Microsoft анонсировала Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ вСрсиСй для Π‘++, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соврСмСнный ΡΡ‚ΠΈΠ»ΡŒ языка.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru