Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rust入门系列:01、第一个rust程序 #58

Open
MagicalBridge opened this issue Jun 19, 2024 · 0 comments
Open

Rust入门系列:01、第一个rust程序 #58

MagicalBridge opened this issue Jun 19, 2024 · 0 comments
Labels
documentation Improvements or additions to documentation

Comments

@MagicalBridge
Copy link
Owner


theme: channing-cyan

第一个rust程序

fn main() {
    println!("hello world");
}

代码解释

这段代码是一个 Rust 程序的入口点,即程序的执行从这里开始。让我们逐行解释一下:

fn main() {

这一行声明了一个叫做 main 的函数。在 Rust 中,main 函数是程序的入口点,编译器会从这里开始执行程序。fn 是 Rust 中声明函数的关键字。

    println!("hello world");

这一行是调用 Rust 标准库中的 println! 宏,用于在终端打印文本。println! 宏接受一个格式化字符串作为参数,在这里是 "hello world"。当执行到这一行时,程序会在终端输出 hello world

}

这是 main 函数的结束标志,表示函数体的结束。

这段代码的作用是:

当运行这个 Rust 程序时,它会在终端打印出 hello world。这是一个最基本的 Rust 程序示例,非常简单,但涵盖了一些基本概念,如函数声明、程序入口点和输出语句。

rust中的宏

在 Rust 中,宏是一种元编程工具,允许你在编译期执行代码生成或代码转换操作。宏可以看作是一种语法扩展,能帮助你以一种简洁的方式编写更加简洁、抽象和通用的代码。

Rust 中有两种主要的宏:

  1. 声明式宏(Declarative Macros)

声明式宏允许你编写一些类似于匹配模式的代码,用来匹配特定的代码模式,然后通过规则来转换成其他Rust代码。它们在元编程方面用途很广,如实现类似C语言的预处理器功能、约束多态实现、字符串格式化库等。

例如之前提到的 println! 就是一个声明式宏。它将字符串格式化代码转化为相应的函数调用代码。

  1. 过程式宏(Procedural Macros)

过程式宏允许你在编译期以可控的方式生成任意代码,通过加载在单独crates中的程序来实现。过程式宏必须将源码重写为抽象语法树(AST)并对其进行操作。它们常用于代码生成和语法扩展,如实现派生Trait、构建Web框架等。

过程式宏通常以 #[derive(...)]#[procedure_macro_name] 等属性使用。

宏使Rust语言更加强大灵活。然而,过度使用宏会降低可读性和可维护性。因此,通常建议 只在存在合理动机且明确的局部使用场景下使用宏,一般情况下还是应该优先考虑普通函数和Trait。正确使用宏有助于编写更加安全、高效和抽象的Rust代码。

@MagicalBridge MagicalBridge added the documentation Improvements or additions to documentation label Jun 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant