rust-embedded / book

Documentation on how to use the Rust Programming Language to develop firmware for bare metal (microcontroller) devices
https://docs.rust-embedded.org/book/
Apache License 2.0
1.08k stars 173 forks source link

Update Interoperability section #351

Closed abt8601 closed 1 year ago

abt8601 commented 1 year ago

Following the discussion on #348, this PR proposes the following changes to the Interoperability section:

I intentionally kept mentions of the cty crate and the cstr_core crate since the next section uses the former. We may also consider updating the following section to use core::ffi instead of the cty crate.

This PR also introduces two additional changes.

First, it changes the descriptions regarding the implicit conversion between C and Rust types. The book says that the compiler implicitly converts between the two types, but it doesn't sound right to say that the example (reproduced below) works because of the conversion. It works simply because, on platforms where unsigned int is 32-bit long, c_uint and u32 are the same type because the former is a type alias of the latter. This PR also removes the unsafe from the example since I believe it plays no role.

unsafe fn foo(num: u32) {
    let c_num: c_uint = num;
    let r_num: u32 = c_num;
}

Second, it changes the text formatting in the type correspondence table. The types in the table now use code formatting. Also, the presentation of C pointer types is updated (e.g. *charchar *).

Closes #348.

bors[bot] commented 1 year ago

Build succeeded!

The publicly hosted instance of bors-ng is deprecated and will go away soon.

If you want to self-host your own instance, instructions are here. For more help, visit the forum.

If you want to switch to GitHub's built-in merge queue, visit their help page.