前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2020-05-18 Castor, WASM, Rust嵌套循环

【Rust日报】2020-05-18 Castor, WASM, Rust嵌套循环

作者头像
MikeLoveRust
发布2020-05-26 15:45:05
8300
发布2020-05-26 15:45:05
举报
文章被收录于专栏:Rust语言学习交流

Castor: 微型互联网浏览器 (Gemini, Gopher, Finger)

Castor: A Browser for the small internet (Gemini, Gopher, Finger) https://sr.ht/~julienxx/Castor/

Caster

这是一个用Rust调用GTK库编写的纯文本互联网协议集的图形客户端,目前支持的简单互联网协议包括:Gemini, Gopher和Finger.

安装(Installation)

Castor需要最新的>=1.39以上的Rust语言版本,如果你的系统没有最新版本的Rust,请用Rustup安装。

依赖库:

  • openssl
  • gtk+3
  • gdk-pixbuf
  • pango
  • atk
  • cairo

编译和安装:

  • 运行make就可以编译Castor
  • 安装:sudo make install
  • 运行Castorr然后输入gemini://gemini.circumlunar.space就可以开始在网上冲浪了!~

在Linux环境编译:

  • apt install build-essential rustc cargo libgtk-3-dev libgdk-pixbuf2.0-dev libssl-dev
  • make & make install

MacOS环境下编译:详见(步骤)

Windows环境下编译:详见(步骤)

修改设置:

编辑~/.config/castor/settings.toml设置文件,支持用12进制,纯颜色甚至emojis!

代码语言:javascript
复制
[general]
start_url = "gemini://gemini.circumlunar.space/capcom"

[colors]
h1 = "red"
h2 = "#FF6347"
h3 = "green"
list = "#C71585"
text = "#FF1493"
background = "#FFC0CB"

[characters]
h1 = ">"
h2 = "))"
h3 = "}}}"
list = "?"

[monospace]
gemini=false
gopher=true
finger=true

抽象化了的WebAssembly即是平台

WebAssembly as a Platform for Abstraction https://users.rust-lang.org/t/wasm-as-a-platform-for-abstraction/35736 http://adventures.michaelfbryan.com/posts/wasm-as-a-platform-for-abstraction/?utm_source=users-forum&utm_medium=social&utm_campaign=wasm-platform-for-abstraction

最近玩嵌入式WASM,应用系统需要在runtime加载任意语言写成的可执行/二进制代码,在提供沙盒式的运行时环境的同时, 可以让用户提供定制的跟编程环境分离的runtime. 这就是著名的WebAssembly as a Platform for Abstraction.

Rust的循环; 从嵌套循环中中断退出

Loops in Rust; Breaking From Nested Loops https://qvault.io/2020/05/14/loops-in-rust-breaking-from-nested-loops/

Rust语言的循环和标准的C语言方式是不一样的。语法不一样,而且有一些强有力的循环选项 是的Rust语言的循环用起来非常简单。首先我们学习一些最基本的循环,然后我们再学习一下 如果在嵌套循环里中断退出和继续执行。

标准的For循环:

代码语言:javascript
复制
fn main() {
    for x in 0..10 {
        println!("{}", x);
    }
}

这个循环打印:

代码语言:javascript
复制
0
1
2
3
4
5
6
7
8
9

0..10的iterator在循环语法中包含了下限但是不包含上限。更通用的语法:

代码语言:javascript
复制
for var in iterator {
    // do stuff
}

我个人认为,所有的编程语言都应该采用iterators单一语法来实现循环。这样的简单明了的方式使得Rust语言通俗易懂,这样就可以通过定制iterator 来让循环变得更加强大,甚至可以达到Go语言的复杂格式的循环:

代码语言:javascript
复制
for i := 0; i < 10; i++ {
  fmt.Println(i)
}

Rust语言的循环没有说明iteration(i++)的每一个指针步增时候的情况, 也没有说明如何在(i<10)前如果步进到下一步,仅仅是让iterator走完。

循环继续和中断:

代码语言:javascript
复制
for x in 0..10 {
    if x > 5 && x < 7 {
        continue
    }
    println!("{}", x);
}

关键词continue都是跟所有语言一样,在这个例子中当x>5并且x<7的时候在循环中continue到下一个iteration中而不打印,这样结果是:

代码语言:javascript
复制
0
1
2
3
4
5
7
8
9

中断循环也是类似:

代码语言:javascript
复制
for x in 0..10 {
    if x > 5{
        break
    }
    println!("{}", x);
}
打印结果:

0
1
2
3
4
5

嵌套循环:

在很多编程语言,嵌套循环都非常诡异,比如,我们如何在一个嵌套循环中让外循环继续的条件建立在内循环里呢?让我们看看下面的例子:

代码语言:javascript
复制
'outer: for x in 0..5 {
    for y in 0..5 {
        if y > 2{
            break 'outer
        }
        println!("x: {}, y: {}", x, y);
    }
}
打印:

x: 0, y: 0
x: 0, y: 1
x: 0, y: 2

利用``outer`标签使得直接控制从哪个循环中断出来非常清晰。缺省的中断就是直接从内循环中断出来,利用标签的方式,也可以用来实现循环继续。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Castor: 微型互联网浏览器 (Gemini, Gopher, Finger)
  • 抽象化了的WebAssembly即是平台
  • Rust的循环; 从嵌套循环中中断退出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档