【Rust日报】 2019-09-01 - default-boxed:让结构体定义的时候,直接分配在堆上

本文介绍了使用 React, Gatsby 和 Wavelet 构建去中心化博客的尝试,探讨了如何根据 Rust 版本来编译代码,并分享了几个有趣的 Rust 库,包括 default-boxed(实现结构体堆上分配)、SOUNDSENSE-RS(Rust 重写的声音引擎)、nerve(brainfuck 编译器)以及 envopt(结构体环境变量解析)。" 117562305,8639345,使用Python绘制相关系数热力图,"['数据可视化', 'Python', '统计分析']
摘要由CSDN通过智能技术生成

使用 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

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel

  • 阿里云语雀订阅

  • Steemit

  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss

  • Rust Force: 支持rss

  • 微信公众号:Rust语言学习交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值