15次发布

0.7.0 2024年1月12日
0.6.3 2020年12月21日
0.6.2 2020年2月11日
0.6.1 2019年6月23日
0.3.0 2017年6月5日

#215 in #systems

Download history 1471/week @ 2024-03-14 1995/week @ 2024-03-21 1945/week @ 2024-03-28 1504/week @ 2024-04-04 1854/week @ 2024-04-11 1854/week @ 2024-04-18 1862/week @ 2024-04-25 2287/week @ 2024-05-02 1654/week @ 2024-05-09 1732/week @ 2024-05-16 1862/week @ 2024-05-23 1938/week @ 2024-05-30 1510/week @ 2024-06-06 1571/week @ 2024-06-13 1791/week @ 2024-06-20 1266/week @ 2024-06-27

6,369 monthly downloads
97 个crate中使用 (7 直接使用)

MIT/Apache

7KB
114

shred - 共享资源 分发器

Build Status Crates.io MIT/Apache Docs.rs LoC

这个库允许并行调度系统,这些系统可能具有相互依赖性,共享和独占资源访问。

用法

extern crate shred;

use shred::{DispatcherBuilder, Read, Resource, ResourceId, System, SystemData, World, Write};

#[derive(Debug, Default)]
struct ResA;

#[derive(Debug, Default)]
struct ResB;

#[derive(SystemData)] // Provided with `shred-derive` feature
struct Data<'a> {
    a: Read<'a, ResA>,
    b: Write<'a, ResB>,
}

struct EmptySystem;

impl<'a> System<'a> for EmptySystem {
    type SystemData = Data<'a>;

    fn run(&mut self, bundle: Data<'a>) {
        println!("{:?}", &*bundle.a);
        println!("{:?}", &*bundle.b);
    }
}

fn main() {
    let mut world = World::empty();
    let mut dispatcher = DispatcherBuilder::new()
        .with(EmptySystem, "empty", &[])
        .build();
    world.insert(ResA);
    world.insert(ResB);

    dispatcher.dispatch(&mut world);
}

请参阅 基准测试 以获取更大(且有用)的示例。

所需的Rust版本

1.56.1稳定版

特性

  • 无锁
  • 不使用通道或其他类似功能(=> 更少的开销)
  • 允许自动并行化和精细控制

贡献

欢迎贡献!如果您想要其他功能,只需创建一个问题。如果您想帮忙,也可以;只需选择一个“帮助所需”的问题。如果您需要任何帮助,请随时提问!

所有贡献均假设为MIT/Apache-2双重许可。

许可

shred 在MIT许可和Apache许可(版本2.0)的条款下分发。

请参阅 LICENSE-APACHELICENSE-MIT

依赖关系

~1.5MB
~35K SLoC