上一篇文章使用Substrate Developer Hub提供的节点模板(substrate-node-template)启动了一条区块链,并使用前端模板(substrate-front-end-template)与区块链进行交互,初步体验了Substrate区块链的运行模式。这篇文章会关注Substrate区块链构建过程中的细节,提取其用到的技术并进行分析。 Rust编程语言 Substrate区块链框架整合使用了三大块技术: Libp2pWebAssemblyRustRust这门编程语言贯穿了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 —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
【Substrate开发教程】03 - Rust编程语言简介 & 包管理器Cargo入门
2020-10-12 松果 来源:区块链网络
LOADING...
相关阅读:
- 哪吒说事——乐观或者悲观2020-10-12
- 变盘之后空头剑指何方?2020-10-12
- Fundstrat在法规中看到了加密市场的好处2020-10-12
- 由凯特·温斯莱特(Kate Winslet)主演的关于OneCoin骗局的电影2020-10-12
- LABS DeFi:第一个DeFi房地产众筹平台2020-10-12