0
点赞
收藏
分享

微信扫一扫

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


使用 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语言学习交流
举报

相关推荐

0 条评论