【Rust日报】 2019-09-01

in rust •  5 years ago 

使用 React, Gatsby 和 Wavelet 构建一个去中心化的博客

Wavelet 是 perlin-network 的一个子项目。

Wavelet is an open ledger for writing scalable mission-critical, decentralized WebAssembly application (https://wavelet.perlin.net/).

作者尝试了基于 wavelet 来构建一个去中心化的博客,也算是迈向 w3 过程中的一个尝试。

Read More: https://docs.qq.com/doc/DQkZhQ2lEVGVlTlNO

根据版本来编译分支代码?

if_rust_version 是这样一个项目,可以根据 rust 的版本,来编译运行不同分支中的代码。像下面这样:

if_rust_version! { >= 1.36 {
    let mut x = std::mem::MaybeUninit::<u32>::uninit();
    unsafe { x.as_mut_ptr().write(32); }
    let xx = unsafe { x.assume_init() };
} else {
    let mut xx : u32 = unsafe { mem::uninitialized() };
    unsafe { ptr::write(&mut xx as *mut u32, 32); }
}}

Repo: https://github.com/ogoffart/if_rust_version

SOUNDSENSE-RS - SoundSense 的 Rust 复刻版

SoundSense 是 《矮人要塞(Dwarf Fortress)》的声音引擎,作者用 Rust 重写了(Rust重写一切!)。

Repo: https://github.com/prixt/soundsense-rs

default-boxed - 让结构体定义的时候,直接分配在堆上

通常,Rust 对于编译时已知大小的结构体,都默认在栈上分配内存。在实际编码过程中,往往存在向堆中复制的过程。这会降低效率,而这个库提供了标注:#[derive(DefaultBoxed)] ,可以使得被标注的结构体直接在堆上分配内存。像下面这样:

use default_boxed::DefaultBoxed;

#[derive(DefaultBoxed)]
struct Foo {
    a: Bar,
    b: [Bar; 1024 * 1024],
    c: [u32; 1024 * 1024],
}

struct Bar(u16);
impl Default for Bar {
    fn default() -> Bar {
        Bar(29)
    }
}

#[test]
fn test_basic() {
    let foo = Foo::default_boxed();
    assert_eq!(foo.a.0, 29);
}

Repo: https://github.com/upsuper/default-boxed

又一个 brainfuck 编译器 - nerve

编译到 X86 指令集上,算是一个练手项目。

Repo: https://github.com/JoshMcguigan/nerve

envopt - 把环境变量解析到结构体中

思路类似 structopt,不过这次是解析环境变量,其实很简单,就看你想不想得到,这是一种设计模式。

use envopt::EnvOpt;

#[derive(EnvOpt)]
pub enum EnvOpts {
    #[envopt(name = "FOO")]
    Foo,
    #[envopt(name = "BAR", default = "default-bar")]
    Bar,
}

pub fn main() {
    EnvOpts::validate_or_exit();

    println!("FOO: {}", EnvOpts::Foo.value_or_exit());
    println!("BAR: {}", EnvOpts::Bar.value_or_exit());
}

Repo: https://github.com/zoranzaric/envopt


From 日报小组 Mike

日报订阅地址:

独立日报订阅地址:

社区学习交流平台订阅:

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!