用户云卷云舒 发表于 2025-4-13 15:17:46

生物信息Rust-01

前言-为什么想学Rust?

不停想多学一门编译语言,重要有几个原因吧(1. 看到一位老师实验室要求需要把握一门编译语言;2. 本身享想试着开发一些实用的生信工具,感觉本身现在相比于数据分析,探索生物学层面的意义相比更想做一些实用性的东西出来),之前在C、C++、Rust之间摇摆,不停没有举措起来学,确实也怪本身拖延。
直到前段时间,想去的那个实验室发了一篇很有创新性的文章,又勾起了我想前去深造的想法。(叠个甲,不是只想着为了发文章才去,而是以为在那里会有更多的大概性。)再浏览实验室信息的时候,偶然发现一位博士师兄之前竟然是我在B-G-I实习时候的室友,只管只当了三四天的室友,但对他的一些基本情况照旧比较了解的。知道他去了那个学校,但没想到竟然去了那位老师门下。
有在网上搜索这位师兄的相干信息,确实很精良,把握许多技能,渐渐地内心将他变成了我研究生阶段的榜样。看到他的github大概是推文中都在推荐Rust,我那摇摆的天平最终方向Rust这边,下决心要开始举措了。
再不做真的就wan(晚/完)了。
说干就干,赶紧学!!!
PS:现在脑中有个小工具的雏形,夺取能在本年实现!!
Rust资源


[*]Rust圣经
关于本书 - Rust语言圣经(Rust Course)

[*]菜鸟教程
Rust 教程 | 菜鸟教程

[*]Rust官方文档中文教程
Rust 文档网 - Rust 官方文档中文教程

[*]rustlings
https://github.com/rust-lang/rustlings/

[*]在线运行网站
Rust Playground

[*]Rust By Example
Introduction - Rust By Example
Rust特点

简单了解一下Rust特点,之前不停听说一大特点是内存安全,之前在大一时候学过C++,但是到后面学指针的时候就开小差了,其实也不能很好理解这部门内容。这里引用一下菜鸟教程里的内容吧:


[*]内存安全:Rust 的所有权体系在编译时防止空悬指针、数据竞争等内存错误,无需垃圾网络器。
[*]并发编程:Rust 提供了现代的语言特性来支持并发编程,如线程和消息传递,使得编写并发程序更加安全和容易。
[*]性能:Rust 编译为机器码,没有运行时或垃圾网络器,能够提供靠近 C 和 C++ 的性能。
[*]范例体系:Rust 的范例体系和模式匹配提供了强盛的抽象能力,有助于编写更安全、更可预测的代码。
[*]错误处理:Rust 的错误处理模型鼓励显式处理所有大概的错误情况。
[*]宏体系:Rust 提供了一个强盛的宏体系,答应开发者在编译时编写和重用代码。
[*]包管理:Rust 的包管理器 Cargo 简化了依赖管理和构建过程。
[*]跨平台:Rust 支持多种操纵体系和平台,包括 Windows、macOS、Linux、BSDs 等。
[*]社区支持:Rust 有一个活泼的社区,提供了大量的库和工具。
[*]工具链:Rust 拥有丰富的工具链,包括编译器、包管理器、文档天生器等。
[*]无段错误:Rust 的所有权和生命周期规则保证了引用的有效性,从而制止了段错误。
[*]迭代器和闭包:Rust 提供了强盛的迭代器和闭包支持,简化了聚集的处理。
对于生信可以借助Rust举行工具开发,这也是我不停想学着做的一件事
Cargo

我们在平常管理生信环境是经常会用到conda/pip,那么在Rust里面可以使用Cargo来对包举行管理。
创建项目

在这里使用cargo创建一个world_hello项目
(base) PS D:\000zyf\Learning\rust_learn> cargo new world_hello
    Creating binary (application) `world_hello` package
note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
(base) PS D:\000zyf\Learning\rust_learn> cd .\world_hello\
(base) PS D:\000zyf\Learning\rust_learn\world_hello> ls

    Directory: D:\000zyf\Learning\rust_learn\world_hello

Mode               LastWriteTime         Length Name
----               -------------         ------ ----
d----         2025/4/12    21:33                src
-a---         2025/4/12    21:33             82 Cargo.toml

(base) PS D:\000zyf\Learning\rust_learn\world_hello> 这里假如使用下令cargo new --vcs git xxx来创建项目标话还会给出相应的git文件。
吐槽:windows终端上操纵真难受!!
运行项目

有两种方式运行:

[*]cargo run
[*]手动编译和运行项目
cargo run

在刚刚创建的项目路径下运行cargo run便可看到:
(base) PS D:\000zyf\Learning\rust_learn\world_hello> cargo run      
   Compiling world_hello v0.1.0 (D:\000zyf\Learning\rust_learn\world_hello)
    Finished `dev` profile target(s) in 5.83s
   Running `target\debug\world_hello.exe`
Hello, world! 上述代码,cargo run 起首对项目举行编译,然后再运行,因此它现实上等同于运行了两个指令
手动编译运行

(base) PS D:\000zyf\Learning\rust_learn\world_hello> cargo build
    Finished `dev` profile target(s) in 0.03s
(base) PS D:\000zyf\Learning\rust_learn\world_hello> ls

    Directory: D:\000zyf\Learning\rust_learn\world_hello

Mode               LastWriteTime         Length Name
----               -------------         ------ ----
d----         2025/4/12    21:39                src      
d----         2025/4/12    21:50                target   
-a---         2025/4/12    21:39            8 .gitignore
-a---         2025/4/12    21:50            155 Cargo.lock
-a---         2025/4/12    21:39             82 Cargo.toml

(base) PS D:\000zyf\Learning\rust_learn\world_hello> .\target\debug\world_hello.exe
Hello, world!
(base) PS D:\000zyf\Learning\rust_learn\world_hello> 行云流水,但谈不上趁热打铁。 细心的读者大概已经发现,在调用的时候,路径 ./target/debug/world_hello 中有一个明晃晃的 debug 字段,没错我们运行的是 debug 模式,在这种模式下,代码的编译速率会非常快,但是福兮祸所伏,运行速率就慢了. 原因是,在 debug 模式下,Rust 编译器不会做任何的优化,只为了尽快的编译完成,让你的开发流程更加顺畅。
好比你想要高性能的代码怎么办? 简单,添加 --release 来编译:
cargo run --release
cargo build --release
试着运行一下我们高性能的 release 程序:
(base) PS D:\000zyf\Learning\rust_learn\world_hello> cd .\target\         
(base) PS D:\000zyf\Learning\rust_learn\world_hello\target> ls

    Directory: D:\000zyf\Learning\rust_learn\world_hello\target

Mode               LastWriteTime         Length Name
----               -------------         ------ ----
d----         2025/4/12    21:51                debug
d----         2025/4/12    22:00                release
-a---         2025/4/12    21:51         1120 .rustc_info.json
-a---         2025/4/12    21:50            177 CACHEDIR.TAG

(base) PS D:\000zyf\Learning\rust_learn\world_hello\target> .\release\world_hello.exe
Hello, world! cargo check

当项目大了后,cargo run 和 cargo build 不可制止的会变慢,那么有没有更快的方式来验证代码的精确性呢?大杀器来了,接着!
cargo check 是我们在代码开发过程中最常用的下令,它的作用很简单:快速的查抄一下代码能否编译通过。因此该下令速率会非常快,能节省大量的编译时间。
Cargo.toml和Cargo.lock

Cargo.toml 和 Cargo.lock 是 cargo 的核心文件,它的所有运动均基于此二者。
Cargo.toml 是 cargo 特有的项目数据描述文件。它存储了项目标所有元配置信息,假如 Rust 开发者希望 Rust 项目能够按照期望的方式举行构建、测试和运行,那么,必须按照合理的方式构建 Cargo.toml。
Cargo.lock 文件是 cargo 工具根据同一项目标 toml 文件天生的项目依赖具体清单,因此我们一般不用修改它。
什么情况下该把 Cargo.lock 上传到 git 仓库里?很简单,当你的项目是一个可运行的程序时,就上传 Cargo.lock,假如是一个依赖库项目,那么请把它添加到 .gitignore 中。
现在用 VSCode 打开上面创建的"天下,你好"项目,然后进入根目录的 Cargo.toml 文件,可以看到该文件包含不少信息:

name = "world_hello"
version = "0.1.0"
edition = "2024"

name 字段界说了项目名称,version 字段界说当前版本,新项目默认是 0.1.0,edition 字段界说了我们使用的 Rust 大版本。
界说项目依赖

使用 cargo 工具的最大上风就在于,能够对该项目标各种依赖项举行方便、统一和灵活的管理。
在 Cargo.toml 中,重要通过各种依赖段落来描述该项目标各种依赖项:

[*]基于 Rust 官方仓库 crates.io,通过版本说明来描述
[*]基于项目源代码的 git 仓库地址,通过 URL 来描述
[*]基于当地项目标绝对路径大概相对路径,通过类 Unix 模式的路径来描述


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 生物信息Rust-01