LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 【Substrate开发教程】03 - Rust编程语言简介 & 包管理器Cargo入门

【Substrate开发教程】03 - Rust编程语言简介 & 包管理器Cargo入门

2020-10-12 松果 来源:区块链网络


上一篇文章使用Substrate Developer Hub提供的节点模板(substrate-node-template)启动了一条区块链,并使用前端模板(substrate-front-end-template)与区块链进行交互,初步体验了Substrate区块链的运行模式。这篇文章会关注Substrate区块链构建过程中的细节,提取其用到的技术并进行分析。

Rust编程语言

Substrate区块链框架整合使用了三大块技术:

Libp2pWebAssemblyRust

Rust这门编程语言贯穿了Substrate框架的底层和业务逻辑,要熟练使用Substrate,就要先学会Rust编程语言。


Rust语言有如下特点:

Rust是静态类型编译型语言;Rust使用实现(implementation)、特征(trait)和结构化类型(structured type),而不是类(class);Rust使用所有权/借用机制、生命周期、类型系统来实现内存安全,而不是自动垃圾收集器(GC);Rust基本理念是“零开销抽象”,在一次直接的对象或函数调用中不会产生多次地址分派,理论上Rust的运行速度与C/C++同级;Rust是一门混合范式编程语言,可以使用函数式编程,也可以使用面向对象编程;Rust是一门内存和线程安全的编程语言,不会出现传统意义上的空指针、悬挂指针、数组越界、共享全局变量、小概率多线程竞争等问题;Rust的运行时很小,启动速度很快,不占用大量无用内存,使得Rust编写的程序可以在嵌入式等硬件受限的设备上运行;

Rust是相当全能的一门编程语言,其内存和线程安全、高并发的特性天然契合区块链的需求,可以说是目前最适合作为区块链底层和应用开发的编程语言。

Cargo

Cargo是Rust的包管理器,相当于nodejs的npm或yarn,但cargo具有更多功能,还充当rust的代码组织管理工具,cargo提供了从项目的建立、构建到测试、运行直至部署的一系列工具,为rust项目的管理提供尽可能完整的手段。

上一篇文章中的substrate-node-template就是一个rust项目,使用 cargo build --release 命令构建,substrate-node-template构建前的项目结构如下:


构建后的项目结构如下:


可以看到,多了一个target目录,这个目录存放编译好的二进制应用程序,然后直接启动程序运行

./target/release/node-template --dev

Rust在Ubuntu系统的安装目录是~/.cargo,应用程序在 ~/.cargo/bin目录


最主要的应用程序是rustc和cargo,下面从最基本的Hello World介绍rustc和cargo的运行机制。

rustc版本的Hello World

rustc即rust编译器,用于把.rs源文件编译为机器可执行的目标文件。

新建hello.rs文件,编写如下代码

fn main() { println!("Hello World!"); }

运行命令编译成可执行文件hello,并执行

rustc hello.rs ./hello

控制台输出如下


cargo版本的Hello World

rustc可以胜任简单的rust编译工作,但当项目逐渐巨大时,就需要cargo来进行管理。

使用cargo创建rust项目的命令如下:

cargo new hello

使用cargo new命令创建了一个hello项目,项目结构如下:


由两个文件组成:

src/main.rs存放源代码,和上面的hello.rs内容相同;Cargo.toml存放项目信息[package]和依赖库[dependencies]等,相当于cargo构建项目的指南;

运行命令

cd hello cargo run

控制台输出如下


cargo run命令执行编译和运行两个步骤,如果只编译可以执行

cargo build

仅作语法检查可以执行

cargo check

编译后的hello项目会多出一个文件夹target,和一个文件Cargo.lock。

target目录存放编译好的应用程序;Cargo.lock包含依赖项的确切信息,由Cargo自动生成,无需手动编辑,而Cargo.toml需要手动配置依赖;

cargo build/run命令默认会运行debug版本,带上--release参数后

cargo build --release cargo run --release

会运行release版本。

两种版本生成的应用程序存放的路径不同:

默认debug版本:target/debug/hellorelease版本:target/release/hello

使用Cargo添加依赖库

Rust的外部依赖库都托管在crates.io上,每个依赖库又称为一个“crate”。

下面为hello项目添加一个外部依赖rand,它是一个随机数生成库。

添加rand只需要在Cargo.toml文件的[dependencies]下加入一行代码

[dependencies] rand = "0.7.3"

再次运行cargo build,会下载rand及其依赖的其他库如libc、getrandom等


使用如下命令可以更新所有依赖库

cargo update

添加-p选项可以更新指定依赖库

cargo update -p rand

—-

编译者/作者:松果

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...