1.rust文件是什么意思?
2.RUST 学习日记 第3课 ——IDE
3.Rust实战系列-Rust介绍
4.RUST 学习日记 第2课 ——Cargo
5.Rust Cargo使用指南 | 第八篇 | 依赖覆盖
6.在树莓派RP2040上用Rust驱动ST7735
rust文件是什么意思?
Rust文件是一种源代码文件,其扩展名为.rs。这种文件通常包含Rust程序的源代码,可以被编译器用来生成可执行文件。Rust是一种新型的编程语言,其特点是快排源码安全、并发和高效。因此,其代码文件也有着类似的特点。
Rust文件通常包含了多个模块和函数,这些模块和函数结构严密,代码风格简洁明了,非常适合大型项目的开发。通过良好的代码组织和命名规则,Rust文件可以让开发者在日后的维护和修改中更加便捷。
Rust文件也可以通过Cargo管理工具来进行创建、编译、测试和发布。这种工具能够自动化项目管理,简化开发者的工作流程,提高开发的效率。通过Rust文件和Cargo,开发者可以更加专注于代码的实现,而不必关注过多的底层细节。
RUST 学习日记 第3课 ——IDE
上一节内容中,我们了解了如何使用Cargo来构建Rust项目。在实际生产环境中,Cargo是构建复杂程序的首选工具。在接下来的学习中,所有代码的构建将通过Cargo进行。
Visual Studio Code是一款强大的跨平台编辑器,拥有丰富的淘宝客户端 源码插件资源。我们可以通过下载并打开Visual Studio Code,搜索并安装rust插件来开始Rust编程。安装完成后,新建或打开一个文件夹,例如"D:/StudyRust/"。在终端执行创建项目的命令,Cargo将在此目录下生成Rust项目。执行和调试Rust程序可以通过Visual Studio Code自带的功能完成,需要额外安装Native Debug插件。
IDEA社区版提供了免费的开发环境,适用于Rust编程。CLion是基于IDEA的C++开发工具,但收费。CLion或IDEA的操作流程相似,安装Rust插件后,创建项目并选择合适的toolchain,如MSVC或MinGW。选择IDE根据个人喜好和需求即可,无需过多考虑。
在选择IDE时,考虑其功能和便捷性。对于初学者,Visual Studio Code已足够;若想深入学习,专业IDE如CLion可能更适合。调试程序时,可以在代码中设置断点,使用调试工具如LLDB进行单步执行和查看变量值。通过调试,可以更好地理解程序运行逻辑。
本文将通过CLion进行后续代码演示,但Visual Studio Code同样支持Rust编程。u3d 源码选择IDE基于个人习惯和需求,不必过于关注他人的意见。本节代码示例和调试流程可参考项目源码。下节预告将介绍Rust的常用规范,以帮助大家更好地掌握语言特性。
Rust实战系列-Rust介绍
Rust实战系列深入解析
Rust,一款被设计为安全系统编程语言,安装过程简单,通过"Cargo"工具构建和管理项目。"hello world"的输出验证了项目的成功运行。Cargo创建的标准项目模板包括"Cargo.toml"(描述项目信息)和"src"(存放源代码)。
运行"cargon run"不仅编译项目,还在debug模式下执行,生成的可执行文件位于"target/debug"。初次构建后,目录结构会增加"Cargo.lock"(锁定依赖版本)和"target",由Cargo自动管理。
通过修改第一个Rust项目,学习迭代和Unicode支持,将输出调整为不同语言的问候。Rust的文本处理能力允许高效处理,通过参数调整输出内容。
Rust的目标包括安全性和生产力。它在编译时检查整数溢出,确保代码的健壮性。资源控制是其另一个特性,通过严格的内存管理提升性能。
Rust的性能优势在于无需GC,追求最小内存消耗和并发编程的高效。内存效率高,但处理复杂图结构和大型编译单元可能面临挑战。flash播放器源码尽管如此,Rust在创建命令行应用、服务器软件和移动应用开发中展现出了显著优势。
尽管有不足,如内存安全漏洞和编译速度,Rust的严谨性仍使其成为物联网设备安全的理想选择。Rust的应用场景广泛,从浏览器引擎到嵌入式数据库,甚至游戏开发,都可见其身影。
RUST 学习日记 第2课 ——Cargo
Rust学习日记第二课——cargo探索
上节我们已经成功编译了Hello World,现在我们进入Rust的世界,认识并使用cargo这个强大的项目管理和构建工具。cargo是Rust的内置工具,对项目开发和维护大有裨益。
cargo常用命令包括:新建项目(cargo new 项目名称),创建hello_rust项目后,你会发现项目结构中多了一个Cargo.toml文件,这个文件是Rust项目的配置文件,用于管理依赖和项目信息。
编译构建项目时,通过cargo build进入项目目录执行,它会自动生成target/debug目录下的可执行文件。首次执行可能需要编译时间,但之后的cargo run会跳过编译,直接运行。删除target文件夹再次执行cargo run,你会发现编译过程会明显变慢。
cargo doc用于生成项目文档,方便代码维护。添加注释后,易语言多线程源码文档会实时更新。test命令则用于测试项目,运行结果为ok,确保代码质量。
Cargo.toml文件则是Rust项目的灵魂,它记录了依赖库和项目配置。虽然这里不深入介绍,但后续章节会提及如何选择合适的集成开发环境(IDE)。
学习Rust的旅程还在继续,让我们期待下节课,深入探讨IDE的选择和使用。在码云-开源中国上,你可以找到本节的源代码供参考。
Rust Cargo使用指南 | 第八篇 | 依赖覆盖
Rust Cargo中的依赖覆盖是本地开发中常见的需求,尤其在需要在包发布到crates.io之前使用它。本文将深入探讨如何解决相关问题。
当遇到bug需要紧急修复时,比如项目使用uuid包遇到bug,但官方尚未修复,可以先克隆源码并创建本地补丁。在Cargo.toml中,通过patch引入本地版本,指定路径如 "../uuid"。然而,版本不兼容可能导致编译错误,需要确保本地版本与crates.io版本兼容,如将"version = "1.0.0-alpha.1""更改为"version = "0.8.3""。
修复bug后,可以提交PR到包的仓库,当新版本发布后,即可移除补丁。同样,如果想在新特性发布前使用,可以提前在Cargo.toml中指定未来版本,如"version = "1.0.1""。
对于间接依赖,如项目A依赖B,B依赖uuid,可以同时为A和B设置patch。非crates.io仓库的依赖,如git仓库,需要调整[path]。而对于大版本更新,Rust会采用滚动升级策略,确保平稳过渡。
在需要同时引入多个patch时,可以使用package key重命名依赖。而路径覆盖则适用于临时处理项目,但推荐优先使用[patch]而非[replace],后者已标记为过时。
总之,理解和掌握Rust Cargo的依赖覆盖技巧,有助于更好地管理本地开发环境和版本兼容性。
在树莓派RP上用Rust驱动ST
本文详述在树莓派RP上使用Rust驱动ST的实践过程,旨在记录使用最新库版本的成功经验,简化开发流程。
参考源码地址:st-lcd-examples/rp-examples at master · sajattack/st-lcd-examples
完整的代码位于:github.com/planet/r...
使用步骤如下:
1、安装工具:确保安装最新版的Rust以及相应的开发环境。
2、硬件连接:根据RP开发板的引脚图,正确连接ST显示屏。
3、Cargo.toml:配置此文件,引入st库和相关依赖。
4、main.rs:在此文件中编写主要逻辑,初始化屏幕并显示内容。
5、build.rs:用于自定义构建步骤,可能包括生成额外的可执行文件。
6、memory.x:用于配置RAM布局,确保屏幕驱动代码能够正确运行。
7、.cargo/config.toml:配置个人和项目特定的设置,如Rust工具链路径。
8、运行:通过USB将RP接入电脑,终端执行“cargo run”命令即可启动程序。
为什么rust的包管理器cargo这么好用?
Rust 的包管理器 Cargo 被认为是优秀的原因在于它能够自动处理库依赖,这与 C/C++ 编译器及构建工具默认的动态链接机制形成鲜明对比。
在 C/C++ 中,依赖库默认以动态链接形式存在,甚至有时强制使用动态链接。尽管教科书通常推崇动态链接,因为它能节省磁盘和内存空间,多个程序共享同一个动态库。然而,这种做法在实际应用中,其缺点更突出。
动态链接的问题在于其存在连锁依赖,即一个库依赖于另一个库,但编译器在链接时并不了解这些依赖关系。如果仅链接主程序而不包含依赖库,可能会遇到找不到特定符号的错误。为了解决这个问题,需要手动添加依赖库,操作繁琐。
而 Cargo 则以高效的方式解决了这个问题。它从源码构建所有依赖库,避免了二进制兼容性问题,将这些库静态链接到程序中,从而一次性解决了连锁依赖、符号找不到等一系列问题。尽管程序本体变大,但相较于动态链接后的整体体积,静态链接的体积要小得多。
综上所述,Cargo 的自动化处理库依赖、静态链接机制、以及对连锁依赖问题的完美解决,使其成为 Rust 中令人称赞的包管理器。
glium指南--开始
创建项目
在你刚创建的目录下,Cargo.toml 文件包含了项目的元数据,src/main.rs 文件包含了 Rust 的源代码。如果目录下的文件不是 src/main.rs 而是 src/lib.rs ,说明你忘了输入 --bin 选项。只要将 src/lib.rs 重命名为 src/main.rs 就可以了。
在Cargo.toml 文件中添加如下依赖,以在项目中导入 glium 库:
在使用依赖库之前,在src/main.rs 中添加如下代码以导入库:
是时候开始填满 main 函数了!
创建窗口
创建图形应用的第一步就是创建一个窗口。如果你熟悉 OpenGL 那一套,你应该了解其中的复杂程度。无论是创建窗口还是创建上下文(Context),在不同平台下的你要写的代码是不一样的,唯一不变的是:它非常无聊。幸运的是,这正是 glutin 库所擅长的东西。
使用 glutin 初始化 OpenGL 窗口需要经过如下几步:但是有一个问题:在窗口创建完成时,我们的 main 函数就退出了,导致 display 的析构函数关闭了窗口。为了避免这个问题,我们需要创建一个无限循环,直到收到 CloseRequested 事件为止:
虽然,这段代码将导致 CPU 占用率达到 %,但是已经解决了上面所说的问题。在实际的应用程序中,你应当使用垂直同步或者在每次循环结束时 sleep 几毫秒,不过这是之后要考虑的事了。
你现在可以运行 cargo run。在 Cargo 下载完 glium 及其依赖并编译好之后,你就能看见一个还过得去的小窗口了。
清除颜色
然而,窗口里的内容并不怎么吸引人。它也许是一片空白,或者是一张随机的,也可能是一些雪花,这取决于你使用什么系统。我们需要在窗口内绘制图形,因此系统并不需要将窗口内的颜色初始化为某个特定的值。
Glium 和 OpenGL 的 API 像是 Windows 下的画笔工具。首先我们有一幅空白的画布,我们可以在上面画一个又一个图形。到你觉得满意为止。和绘图软件不一样的是,你不想你的用户看见绘画的过程。他们能看见的应该只有最终的结果。
Glium 使用 Frame 对象来实现这一机制。如果你打算在窗口中绘制图形,首先应该调用 display.draw() 方法来创建一个 Frame:
之后,我们就能将 target 作为画布(drawing surface)。OpenGL 和 glium 提供的一个操作就是使用给定的颜色填充画布。这正是我们要做的。
注意:我们需要先导入 Surface trait,然后才能使用这个函数:
我们传递给 clear_color 的四个值表示颜色的四个组成部分:红,绿,蓝和透明度。取值范围为 [0.0,1.0]。这里我们选择的是不透明的蓝色。
正如我之前解释的,现在用户没法在屏幕上看见蓝色。如果我们是在写一个真正的应用的话,我们也许会画上角色,武器,地面,天空等等。但是在这个指南中,我们做到这一步就足够了:
finish() 函数意味着我们结束了绘制。它将销毁 Frame 对象,并将画布复制到窗口上。现在,我们的窗口被一片蓝色填满了。
以下是所有的代码: