首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Rust语言学习交流

    Rust公开课:《通过实战理解 Rust 》| Vol. 3

    课程主题:《通过实战理解 Rust 》 课程时间: 2021年8月15日 20:30-21:30 课程介绍: 如果想用 Rust 开发大型目,或者学习大型项目代码,特别是框架级别的项目,那么 Rust机制肯定是一个必须掌握的技能。 语言强大的一个特点就是可以创建和利用,不过创建看起来挺复杂,常常令刚接触 Rust 的开发者生畏惧。 在本次公开课中帮助你理解 Rust Macro 的基本原理,学习如何创自已的 Rust ,以及查看源码学习的实现。 课程大纲 什么是 Rust 什么是运行原理 如何创建 Rust 过程 阅读 datafuse 项目源码, 学习项目中的实现

    36130发布于 2021-08-12
  • 来自专栏程序员

    rust声明式

    rust 中,我们一开始就在使用,例如 println!, vec!, assert_eq! 等。看起来和函数在使用时只是多了一个 !。 实际上这些都是声明式(也叫示例或macro_rules!),rust 还支持过程,过程为我们提供了强大的元编程工具。 声明式 声明式类似于 match 匹配。 和 match 不同的是,里的值是一段 rust 源代码。所有这些都发生在编译期,并没有运行期的性能损耗。下面是一个例子: // 声明一个add macro_rules! 而 Rust 编译器会自动处理变量名和作用域,确保展开后的代码不会引入未预料的变量冲突。下面是一个C/C++中使用的例子。 这也是rust是 Hygienic Macros 的体现。

    78610编辑于 2023-07-24
  • Rust难点之一:

    Rust之所以难,这也有很大的关系,把设计的比传统的要复杂一些,在记忆中就是代码替换,但Rust已经超出了这个定义。3年前,你在学习Rust3年后,你还在学习Rust,可见Rust入坑要谨慎。 Rust的分类声明式和函数可以简单的理解为代码替换,也可以理解为传统的。声明式和过程的区别声明式按模式去匹配进行代码模板替换。按常规理解就行。 可以出现在模块中的项block代码块{ let x = 5; x }由大括号包围的代码块meta元项derive(Debug), cfg(test)属性内部的内容vis可见性pub, pub(crate)可见性修饰符3. [1, 2, 3] 或 vec![0; 5]最常用的集合断言和测试名用途示例说明assert!条件断言assert!(x > 0);条件为假时 panicassert_eq! (config)数据库连接池UI 框架过程Rust GUI)名所属框架用途示例说明#[component]yewYew 组件#[function_component] fn Comp()WebAssembly

    15810编辑于 2026-02-11
  • 来自专栏独行猫a的沉淀积累总结

    Rust中的过程

    过程rust里的强大的武器,非常值得学习rust的人去掌握。但过程的编写有点难度,且文档也不太详细,最近也专门学习了下过程,算是有点收获,写下一点东西。 3、proc_macro2 更好的proc_macro更方便的接口,能和syn、quote一起更好的配合应用。 什么是过程? 过程(Procedure Macro)是Rust中的一种特殊形式的,它将提供比普通更强大的功能。方便起见,本文将Rust中由macro_rules!定义的称为规则以示区分。 proc_macro(std) 和 proc_macro2(3rd-party) 但在nightly版本里,以上的这些crate都不需要了,不依赖第三方crate,还有就是语法上是稍微有些不同,大部分是一样的 结语 过程确实是rust里的黑魔法,希望这篇文章能帮助到一些人了解并使用过程,体会到rust的强大。 实例代码可以在这里看到。

    3.1K30编辑于 2022-06-27
  • 来自专栏菠萝上市没有

    Rust 过程之Syn(crate)

    概念 在编写过程时,经常需要对TokenStream 进行解析和处理。 而Syn库就是专门用于对TokenStream进行解析。 Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree of Rust source code. Syn 用于将Rust tokens 解析为Rust 源码语法树。 实践 在过程使用Syn解析的流程: 定义自己存储结构 实现syn::parse::Parse 使用parse_macro_input!()生成源码树。 使用过程为struct添加hello方法: 使用parse_macro_input 解析到DeriveInput 获取struct name TokenStream 使用quote!

    3.6K30发布于 2021-06-21
  • 来自专栏繁依Fanyi 的专栏

    Rust 基础篇】Rust 声明:代码生成的魔法

    Rust中的一种特殊函数,它可以接受代码片段作为输入,并根据需要生成代码片段作为输出。 本篇博客将深入探讨Rust中的声明,包括声明的定义、声明的特点、声明的使用方法,以及一些实际场景中的应用案例,以便读者全面了解Rust声明的魔力。 1. ("Point2D: x={}, y={}, color={}", t.point3.x, t.point3.y, t.point3.color); } 在上述例子中,我们定义了两个 point! 通过嵌套使用声明,我们可以灵活地生成复杂的数据结构,并在编译期间进行代码生成。这种元编程的能力使得Rust在构建高度可定制化和灵活的数据结构时非常强大。 3. 声明Rust中强大的元编程工具,通过模式匹配和代码生成,它使得代码更加灵活、易读和简洁。希望通过本篇博客的阐述,读者对Rust声明有了更深入的了解,并能在实际项目中灵活运用。谢谢阅读!

    89630编辑于 2023-10-12
  • 来自专栏光城(guangcity)

    Rust那些事之过程

    Rust那些事之过程 1.过程 过程是一种扩展Rust编译器和提供可用于扩展该语言的插件的方法。 过程的工作原理非常简单:取一段称为输入TokenStream的代码,将其转换为抽象语法树(ast),从输入处获得的内容构建一个新的TokenStream(使用syn::parse()方法),并将其作为输出代码注入编译器 2.derive 使用侧: #[derive(StructShow)] pub struct Point { x: f64, y: f64 } 我们需要使用proc-macro来实现该功能 将rust语法转位TokenStream返回给编译器即可。 ("{}", p); 今天写的这个例子比较简单,过程功能很强大,后续继续研究,期待一起探讨~ 本节完~

    66210编辑于 2023-02-28
  • 来自专栏菠萝上市没有

    Rust 过程(Procedural Macros)基础

    概念 的作用就是在编译期间对原代码进行扩展,实现目标功能。简单的说就是生成代码的代码。 . — The Rust Reference (你可以简单认为,过程是一个将原有AST语法树转换为另外一个AST语法树的函数) 个人理解,Rust 相比C++中的定义, 它提供了一种可用让开发人员更容易介入代码编译过程的入口 Rust 过程定义分三种 #[proc_macro] 函数似 和macro_rules! #[proc_macro_derive(Name)] 派生 用于结构体(struct)、枚举(enum)、联合(union)类型,可为其实现函数或特征(Trait) 3. 目前没用到,先注释了 # proc-macro2 = "1.0.27" # syn = {version="1.0.72", features=["full"]} image.pnglib.rs 3.

    3.4K00发布于 2021-06-09
  • 来自专栏繁依Fanyi 的专栏

    Rust 基础篇】Rust 属性:定制你的代码

    属性的基本概念 1.1 属性的定义 在Rust中,属性是一种特殊的,它允许开发者在代码上方添加自定义的属性,并在编译期间对代码进行处理。 1.2 属性的特点 属性Rust中具有以下几个特点: 代码定制化处理:属性允许开发者在代码上方添加自定义的属性,并根据属性的输入对代码进行定制化处理。 代码安全性:属性生成的代码必须是合法的Rust代码,它们受到Rust编译器的类型检查和安全检查。这保证了生成的代码不会引入潜在的编译错误和安全漏洞。 2. 在的处理逻辑中,我们根据参数生成了不同类型的函数。在main函数中,我们调用了通过my_function生成的hello函数。 3. 希望通过本篇博客的阐述,读者对Rust属性有了更深入的了解,并能在实际项目中灵活运用。谢谢阅读!

    1.4K20编辑于 2023-10-12
  • 来自专栏繁依Fanyi 的专栏

    Rust 基础篇】Rust:代码生成的黑魔法

    本篇博客将深入探讨Rust中的,包括的定义、的分类、的使用方法,以及一些实际场景中的应用案例,以便读者全面了解Rust的神奇之处。 1. 过程:是一种更为高级的,它通过编写Rust代码来处理输入的代码,并在编译期间生成新的代码。 (1, 2, 3, 4, 5); println! 在展开中,我们使用递归调用将多个表达式相加,最终得到它们的和,并输出结果。 3. Rust的应用案例 Rust在实际开发中有许多应用案例,以下是一些常见的应用场景: 5.1 DRY原则(Don’t Repeat Yourself) 可以帮助我们遵循DRY原则,减少代码的重复编写

    2K60编辑于 2023-10-12
  • 来自专栏繁依Fanyi 的专栏

    Rust 基础篇】Rust派生:自动实现trait的魔法

    派生的基本概念 1.1 派生的定义 在Rust中,派生是一种特殊的,它允许开发者为自定义的数据类型自动实现trait。 代码安全性:派生生成的trait实现代码必须是合法的Rust代码,它们受到Rust编译器的类型检查和安全检查。这保证了派生生成的trait实现不会引入潜在的编译错误和安全漏洞。 2. 在的处理逻辑中,我们根据参数生成了不同类型的trait实现,并将其与原始的trait实现代码合并。 3. (p1, p3); assert_ne!(p1, p2); assert! 派生的局限性 虽然派生Rust中非常强大,但它也有一些局限性需要注意: trait的限制:派生只能自动实现由Rust标准库或第三方库定义的trait,无法自动实现用户自定义的trait。

    1.5K20编辑于 2023-10-12
  • Rust 开发之属性参数解析

    场景开发过程时经常需要处理结构体或枚举体上的属性参数,如下 Command 结构体的 args 字段有属性 each = "arg",#[derive(Builder)]pub struct Command ], }, }, }, // 其它字段省略 入口

    48110编辑于 2024-01-22
  • 来自专栏繁依Fanyi 的专栏

    Rust 基础篇】Rust类函数:代码生成的魔法

    在本篇博客中,我们将深入探讨Rust中的类函数,包括类函数的定义、使用方法以及一些实际应用案例,以帮助读者充分了解类函数的魅力。 1. 类函数的基本概念 1.1 类函数的定义 在Rust中,类函数是一种特殊的,它允许开发者创建类似函数调用的,并在编译期间对代码进行生成和转换。 代码安全性:类函数生成的代码必须是合法的Rust代码,它们受到Rust编译器的类型检查和安全检查。这保证了生成的代码不会引入潜在的编译错误和安全漏洞。 2. 在的处理逻辑中,我们根据参数生成了不同类型的输出,并将其转换为TokenStream返回。 3. 类函数的应用案例 3.1 自定义数据结构 类函数可以用于定制化地生成自定义数据结构。 结论 本篇博客中,我们深入探讨了Rust中的类函数,包括其定义、使用方法以及应用案例。

    80120编辑于 2023-10-12
  • 一起长锈:3 类型安全的Rust(从Java与C++转Rust之旅)

    他们两个列出了“猜骰子冷热”游戏的7个用户故事,改编自Guessing Game的故事: 1 获取玩家猜的两个骰子点数之和并显示给玩家 2 生成两个骰子点数之和的随机答案 3 比较答案与玩家猜的点数之和 贾克强:“在Rust里,可以让我们在编译时对代码做出更复杂的处理和生成。” “Rust在编译时操作代码,通过模式匹配和代码展开来生成代码,这不仅仅是简单的文本替换。” 3.3.1 替换代码文本的C++的 席双嘉:“C++的Rust不一样。它是由预处理器用来处理的。C++的在编译前就把代码文本进行简单的替换了。 Rust的println!其实是一个,不是函数,这就意味着它在编译时会变成真正负责输出的代码。 C++的Rust不一样,C++的在编译前就把代码文本进行简单的替换了。 在处理时间上,Rust和C++在编译前后处理,Java注解可能在编译时或运行时处理。

    59932编辑于 2024-06-10
  • 来自专栏菠萝上市没有

    Rust 过程简单仿写Lombok 功能

    今天尝试下使用Rust中的过程来实现类似功能。

    1.2K50发布于 2021-06-23
  • 来自专栏python3

    3)Zabbix设置

    zabbix (1)是一种抽象,他根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到时会自动进行这一模式替换,可以理解为变量。 (2)zabbix有许多内置的,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等 (3 )为了更强的灵活性,zabbix支持全局、模版或主机级别自定义,用户自定义要使用"{$MACRO}"这种特殊的语法格式,的名称只能使用大写字母、数字及下划线 (4)可以应用在item keys和 定义一个,定义为{$INBOUND_OK}值为200000 ? s 将定义流量触发的值设置为刚才定义的,这样值的变化就会根据的变化而变化。 ? 验证,查看图形的触发器,就是定义的值 ? ximenfeibing.blog.51cto.com/8809812/1670988 (2)Zabbix客户端监控+报警:http://ximenfeibing.blog.51cto.com/8809812/1670999 (3

    1.3K10发布于 2020-01-06
  • 来自专栏风骚语言Rust

    Rust中打印语句为什么使用实现?

    Rust中打印语句为什么使用?在Rust中,打印语句使用(例如println!和format!)的主要原因是为了在编译时进行字符串格式检查,并在不引入运行时开销的情况下提供更高的性能和安全性。 Rust允许在字符串中插入变量,而在编译时,编译器可以检查这些插值是否与实际的变量类型匹配。这有助于捕获潜在的格式化错误,防止运行时发生类型不匹配或其他问题。 在编译时,Rust会检查实际传递的参数是否与占位符的数量和类型匹配。2. 零成本抽象Rust中的提供了一种零成本的抽象。这意味着使用并不会引入运行时开销。在编译时,会被展开为实际的代码。 的实现过程。它通过展开、格式化参数和输出到标准输出三个步骤来实现。println! 可以将格式化参数和输出到标准输出这两个步骤合并成一个步骤,从而提高代码的性能。3. 和类似的使得代码更加灵活、可重用,并允许在编译时进行更多的优化。这是 Rust 中推崇的一种编程风格,有助于编写安全、高性能的代码。

    79810编辑于 2024-02-15
  • 来自专栏Rust语言学习交流

    Rust日报】2022-07-15 Rust 定义,拯救运行时错误

    Rust 定义,拯救运行时错误 如果你碰巧在 Rust 应用程序中使用 Lua ,你可以编写一个小,在 Lua 上强制执行它并运行 Lua 解释器以在编译时捕获相关错误。 作者以 Aerospike 分布式键值存储为,展开了如何通过 rust 中展开 lua 解析到 AST 上并校验 Aerospike 规则的方法。 C++ vs Rust :可变性和所有权 本文中,作者比较了 C++ 和 Rust 可变性,所有权等特性。 这篇文章可能对刚开始接触 Rust 的 C++ 开发人员特别有帮助。 侯盛鑫 坏姐姐 社区学习交流平台订阅: Rust.cc 论坛: 支持 rss 微信公众号:Rust 语言中文社区

    58810编辑于 2022-11-28
  • 来自专栏程序员分享

    Rust编程完全指南:用元编程解锁Rust的终极力量

    编译时计算(零运行时开销)在编译期展开,这意味着:没有运行时性能损失错误在编译时就能发现生成的代码可以被编译器完全优化3. (sum 1, 2, 3, 4, 5)); // 15}1.4 实战案例:类型安全的单位转换rust 体验AI代码助手 代码解读复制代码macro_rules! [1, 2, 3, 4, 5];// ✅ 但要注意展开可能增加二进制大小// 如果在很多地方调用且生成大量代码,考虑改用函数常见误区误区 1:可以做任何事现实: 有明确的限制。 ();}误区 3:过度使用问题代码:rust 体验AI代码助手 代码解读复制代码// ❌ 这个可以用简单函数实现macro_rules! ($x); // 在内部调试 )* } };}3. 编译时打印rust 体验AI代码助手 代码解读复制代码// 在过程中打印调试信息eprintln!

    12210编辑于 2026-03-18
  • 来自专栏Rust语言学习交流

    Rust日报】2023-10-02 改进 Rust 中的自动完成功能

    改进 Rust 中的自动完成功能 自动完成是 IDE 提供的一种功能,可以帮助开发者在编写代码时快速找到正确的关键字和参数。在 Rust 中,自动完成功能可能会出现不准确或不完整的情况。 文章作者介绍了以下几种方法来改进 Rust 中的自动完成功能, 这样可以使你的在使用的过程中体验更好. 原文链接 https://blog.emi0x7d1.dev/improving-autocompletion-in-your-rust-macros/ IoT 和 Rust: 在 ESP 上连接 wifi 原文链接 https://dev.to/apollolabsbin/iot-with-rust-on-esp-connecting-wifi-4be6 Rust和 C++ 的两种动态分派方式 Rust Rust 和 C++ 动态分派的优缺点 Rust 优点: trait object 是类型安全的,这意味着编译器可以确保您不会调用不兼容的类型上的方法。 trait object 的性能开销很小。

    64330编辑于 2023-10-04
领券