< 返回版块

洋芋 发表于 2021-07-17 17:44

Tags:rust, 日报

Rust 实现的教学软件 franzplot

米兰理工大学的一名研究助理,担任了 “设计的曲线和表面”课程的助教,这门课主要是为设计专业的学生解释三维数学概念。 因为没有趁手的教学工具,所以这位助教自己用 Rust 实现了一个。

第一个版本是 cpp 实现的。然后新版本用 Rust 重写了,为什么呢?

  1. 他在cpp版本内亏欠的技术债务太多,不利于开源协同
  2. OpenGL 已经被苹果废弃
  3. 想让工具变得更加强大

所以,现在用 WebGPU + Rust 重写了这个工具,基于 wgpu。FranzPlot目前是闭源的,未来可能会开源。因为尽管重新写了软件,也还需要处理一些技术债务。另外想完全使用 WGSL 而抛弃 GLSL ,还想将界面替换为纯 Rust 实现,比如使用 egui 框架。现在是用 imgui-rs。

介绍链接,https://gfx-rs.github.io/stories/franzplot

Gif of FranzPlot

在 Windows 上使用 Rust 进行开发

在 Windows 上使用 Rust 进行开发,包括开发环境的设置、Windows 的 Rust 和代码示例。

链接,https://docs.microsoft.com/en-us/windows/dev-environment/rust/

Minus 发布 v4.0.0

Minus,是 Rust 实现的一个快速,异步终端分页库。它提供了高级功能,可以方便地为任何终端应用程序编写分页器。minus 同时支持 tokio 和 async-std 运行时。更重要的是,如果只想使用 minus 提供静态输出,也可以选择不使用这些动态特性。

项目Github链接,https://github.com/arijit79/minus

Minus v4.0.0 Changelog,https://github.com/arijit79/minus/blob/main/CHANGELOG.md

Lexopt

Lexopt 是一个 Rust 实现的参数解析器。它试图用最简单的设计保持正确性。它是如此简单,以至于使用起来有点乏味。

使用示例如下:

struct Args {
    thing: String,
    number: u32,
    shout: bool,
}

fn parse_args() -> Result<Args, lexopt::Error> {
    use lexopt::prelude::*;

    let mut thing = None;
    let mut number = 1;
    let mut shout = false;
    let mut parser = lexopt::Parser::from_env();
    while let Some(arg) = parser.next()? {
        match arg {
            Short('n') | Long("number") => {
                number = parser.value()?.parse()?;
            }
            Long("shout") => {
                shout = true;
            }
            Value(val) if thing.is_none() => {
                thing = Some(val.into_string()?);
            }
            Long("help") => {
                println!("Usage: hello [-n|--number=NUM] [--shout] THING");
                std::process::exit(0);
            }
            _ => return Err(arg.unexpected()),
        }
    }

    Ok(Args {
        thing: thing.ok_or("missing argument THING")?,
        number,
        shout,
    })
}

fn main() -> Result<(), lexopt::Error> {
    let args = parse_args()?;
    let mut message = format!("Hello {}", args.thing);
    if args.shout {
        message = message.to_uppercase();
    }
    for _ in 0..args.number {
        println!("{}", message);
    }
    Ok(())
}

项目Github链接,https://github.com/blyxxyz/lexopt

Highnoon

Highnoon,一个 Rust 实现基于 Hyper 的最小化网络框架。

使用示例如下:

struct MyState;

impl highnoon::State for MyState {
    type Context = ();

    fn new_context(&self) -> Context {
        ()
    }
}

#[tokio::main]
async fn main() -> highnoon::Result<()> {
    let mut app = highnoon::App::new(MyState);

    app.with(highnoon::filter::Log);

    app.at("/hello").get(|_request| async {
        "Hello world!\n\n"
    });

    app.listen("0.0.0.0:8888").await?;
    Ok(())
}

项目GitHub链接,https://github.com/sphenlee/highnoon


From 日报小组 洋芋

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页