update rust

This commit is contained in:
JMARyA 2024-07-17 08:24:40 +02:00
parent 53cd927e13
commit a04152d981
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263

View file

@ -4,7 +4,7 @@ source: https://doc.rust-lang.org/book
mime: "text/rust" mime: "text/rust"
extension: "rs" extension: "rs"
obj: concept obj: concept
rev: 2024-02-13 rev: 2024-07-17
--- ---
# Rust # Rust
@ -655,6 +655,56 @@ mymacro!("Hello", "World");
This macro gets expanded to the code inside the `macro_rules!` section with the provided arguments. For more information on macros, see the [docs](https://doc.rust-lang.org/reference/macros-by-example.html). This macro gets expanded to the code inside the `macro_rules!` section with the provided arguments. For more information on macros, see the [docs](https://doc.rust-lang.org/reference/macros-by-example.html).
Macros work kind of like a match statement. In the matcher, `$ name : fragment-specifier` matches a Rust syntax fragment of the kind specified and binds it to the metavariable `$name`. Valid fragment specifiers are:
- `item`: an Item
- `block`: a BlockExpression
- `stmt`: a Statement without the trailing semicolon (except for item statements that require semicolons)
- `pat_param`: a PatternNoTopAlt
- `pat`: at least any PatternNoTopAlt, and possibly more depending on edition
- `expr`: an Expression
- `ty`: a Type
- `ident`: an IDENTIFIER_OR_KEYWORD or RAW_IDENTIFIER
- `path`: a TypePath style path
- `tt`: a TokenTree (a single token or tokens in matching delimiters (), [], or {})
- `meta`: an Attr, the contents of an attribute
- `lifetime`: a LIFETIME_TOKEN
- `vis`: a possibly empty Visibility qualifier
- `literal`: matches -?LiteralExpression
Common Rust Macros:
- `assert!(bool)`: Asserts that a boolean expression is true at runtime.
- `assert_eq!(a, b)`: Asserts that two expressions are equal to each other (using `PartialEq`).
- `assert_ne!(a, b)`: Asserts that two expressions are not equal to each other (using `PartialEq`).
- `debug_assert!(bool)` Asserts that a boolean expression is true at runtime.
- `debug_assert_eq!(a, b)`: Asserts that two expressions are equal to each other.
- `debug_assert_ne!(a, b)`: Asserts that two expressions are not equal to each other.
- `module_path!()`: Expands to a string that represents the current module path.
- `file!()`: Expands to the file name in which it was invoked.
- `line!()`: Expands to the line number on which it was invoked.
- `column!()`: Expands to the column number at which it was invoked.
- `concat!()`: Concatenates literals into a static string slice.
- `cfg!()`: Evaluates boolean combinations of configuration flags at compile-time.
- `compile_error!(msg)`: Causes compilation to fail with the given error message when encountered.
- `panic!()`: Panics the current thread.
- `dbg!()`: Prints and returns the value of a given expression for quick and dirty debugging.
- `env!(var)`: Inspects an environment variable at compile time.
- `option_env!(var)`: Optionally inspects an environment variable at compile time.
- `print!()`: Prints to the standard output.
- `println!()`: Prints to the standard output, with a newline.
- `eprint!()`: Prints to the standard error.
- `eprintln!()`: Prints to the standard error, with a newline.
- `format!()`: Creates a String using interpolation of runtime expressions.
- `write!()`: Writes formatted data into a buffer.
- `writeln!()`: Write formatted data into a buffer, with a newline appended.
- `include!()`: Parses a file as an expression or an item according to the context.
- `include_bytes!()`: Includes a file as a reference to a byte array.
- `include_str!()`: Includes a UTF-8 encoded file as a string.
- `matches!()`: Returns whether the given expression matches the provided pattern.
- `todo!()`: Indicates unfinished code.
- `unimplemented!()`: Indicates unimplemented code by panicking with a message of “not implemented”.
- `unreachable!()`: Indicates unreachable code.
- `vec![]`: Creates a Vec containing the arguments.
## `unsafe` Rust ## `unsafe` Rust
Rust is focused strongly on safety, but sometimes doing something dangerous is necessary. In this case you can use the `unsafe` keyword. `unsafe` should be used only when needed as it may cause undefinied behaviour, but when debugging you can solely focus on your `unsafe` blocks as all potential dangerous operations are neatly packaged in them. Rust is focused strongly on safety, but sometimes doing something dangerous is necessary. In this case you can use the `unsafe` keyword. `unsafe` should be used only when needed as it may cause undefinied behaviour, but when debugging you can solely focus on your `unsafe` blocks as all potential dangerous operations are neatly packaged in them.