Rust 学习笔记 - 在浏览器上输出 Hello world!(一)

不告诉你_ · · 1607 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

欢迎回来!

“Hello world”几乎是学习任何语言的第一个程序了,学习Rust页不例外。在开始之前,请你先确保在自己电脑上安装了Rust。如果你还没有安装的话,我们一起安装一遍,不过,我使用的是Linux操作系统,其他系统可能略有不同,这个你需要注意。Rust 使用 Rustup 安装,你也可以查看更详细的文档:Rustup

首先,打开一个终端,输入:

$ curl https://sh.rustup.rs -sSf | sh

这行代码会帮助我们下载一个小脚本并运行它,由于网络的原因,你需要耐心等待,多尝试几次, 直到出现类似的字样:

……
Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>

到这里,离成功就不远了。接着,跟据提示,输入“1”并按下回车,就会开始下载一些组件了,你会看到如下字样:

info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2018-08-02, rust version 1.28.0 (9634041f0 2018-07-30)
info: downloading component 'rustc'
 20.1 MiB /  68.6 MiB ( 29 %) 493.4 KiB/s ETA: 101 s

由于网络原因,你还需要等待一阵子,或者可以考虑其他办法。直到你看到如下输出:

Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH 
environment variable. Next time you log in this will be done automatically.
https://doc.rust-lang.org/cargo/index.html
To configure your current shell run source $HOME/.cargo/env

恭喜你,Rust 已经安装完成了,包括自带的 Cargo 包管理器。我们还需要将$HOME/.cargo/bin添加到环境变量“PATH”中,编辑 $HOME/.profile 文件,在最后面追加export PATH="$HOME/.cargo/bin:$PATH" 就可以了,不过,如果是Ubuntu等系统,Rustup会自动给你添加环境变量。

添加完环境变量后,你需要重启一下系统,或者注销后重新登录。我们打开一个终端并输入:

$ rustc -V
rustc 1.28.0 (9634041f0 2018-07-30)

那说明没有什么问题。

我们进行第一个程序。用你喜欢的编辑器创建一个文件:

$ vim hello_world.rs

然后在文件中输入:

fn main() {
    println!("hello world!");
}

编译并运行:

$ rustc hello_world.rs
$ ./hello_world
hello world!

也可以使用Cargo:

$ cargo new hello_world --bin
Created binary (application) `hello_world` project
$ cd hello_world

注意后面的 --bin参数,这将告诉Cargo创建一个可执行程序,而不是库。

我们可以看到,cargo 自动创建了 src 目录和Cargo.toml 文件(类似于nodejs的package.js文件),实际上,cargo还初始化了Git仓库并创建了.gitignore文件。因此在这之前,你应该先安装并配置好Git。

我们打开Cargo.toml 文件:

[package]
name = "hello_world"
version = "0.1.0"
authors = ["xxx <xxx@xxx.com>"]

[dependencies]

[package] 片段中,包含了项目的名称、版本和从Git配置中读取的作者和作者邮箱。[dependencies]片段中包含了项目的依赖。今后,我们还需要修改Cargo.toml文件。你还可以去查看 Cargo 的文档。

我们进入src目录中的main.rs文件:

cd src
vim main.rs

Cargo 已经帮我们写好了“hello world!”, 我们可以直接运行:

$ cargo run // 编译并运行
Compiling hello_world v0.1.0 (file:///home/xxx/hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.29s
     Running `/home/xxx/hello_world/target/debug/hello_world`
Hello, world!

或者也可以先编译,后运行:

$ cargo build // 编译
Compiling hello_world v0.1.0 (file:///home/xxx/hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.20s
$ ./target/debug/hello_world 运行
Hello, world!

我们会发现,项目目录下又多出了一个Cargo.lock文件和target目录,Cargo.lock文件由Cargo维护,不需要手动修改,target目录用于存放可执行文件和一些临时文件,也不需要我们手动去维护。部分临时文件是可以复用的,以提高下次编译时的编译速度。

我们执行cargo runcargo build时,默认生成的可执行文件存放在target/debug 目录下,虽然编译速度更快,但运行较缓慢,还包含了一些调试信息,导致生成的可执行文件体积也稍大。我们可以添加--release参数来开启编译器优化,会在target/release目录下生成可执行文件,这时候编译速度较慢,但是程序的运行速度会更快。

还有一个常用命令是 cargo check,只检查代码是否可以编译而不生成可执行文件,因而速度比cargo build还要快。这里要说明的是,Rust的编译器非常强大,大部分情况下,只要能够编译通过的程序,运行是没有什么问题的。

再来解释以下这段代码:

fn main() {
    println!("hello world!");
}

第一行,fn 是Rust中的一个关键字,用于定义一个函数,main 是Rust的入口函数。要注意,函数体必须包裹在{}中,不可省略。对换行和缩进也没有要求;
第二行,println!调用了一个“宏”而不是函数,注意“!”,调用函数不需要“!”,当看到“!”的时候就意味着调用的是一个“宏”而不是普通的函数,在后面会介绍“宏”。"hello world!"是一个字符串,作为参数传递给println!println!负责将“hello world!”打印到屏幕上。

我们的目的达到了没有?然而并没有,我们需要在浏览器上输出“hello world!”,不仅仅是在终端上。不管你在此之前是否听说或了解过HTTP协议和TCP协议,目前主流浏览器通常是先跟HTTP Server建立TCP连接,再通过TCP向HTTP Server发送HTTP请求。HTTPS又在TCP和HTTP中间加了一层SSL协议,在发送HTTP请求之前,还需要进行SSL协议“握手”,我们暂且不谈HTTPS。

Rust标准库中没有HTTP Server的实现,(Golang的同学请不要笑,Golang的标准库杂而不精,等后面你就知道Rust是多么好用了),没关系,接下来我们实现一个玩具级别的。

请看下一节!

参考链接
https://doc.rust-lang.org/book/second-edition/
https://doc.rust-lang.org/std/
https://kaisery.github.io/trpl-zh-cn/
https://doc.rust-lang.org/cargo/
https://github.com/rust-lang-nursery/rustup.rs/blob/master/README.md


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:不告诉你_

查看原文:Rust 学习笔记 - 在浏览器上输出 Hello world!(一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1607 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传