Rust 实现的教学软件 franzplot
米兰理工大学的一名研究助理,担任了 “设计的曲线和表面”课程的助教,这门课主要是为设计专业的学生解释三维数学概念。 因为没有趁手的教学工具,所以这位助教自己用 Rust 实现了一个。
第一个版本是 cpp 实现的。然后新版本用 Rust 重写了,为什么呢?
- 他在cpp版本内亏欠的技术债务太多,不利于开源协同
- OpenGL 已经被苹果废弃
- 想让工具变得更加强大
所以,现在用 WebGPU + Rust 重写了这个工具,基于 wgpu。FranzPlot目前是闭源的,未来可能会开源。因为尽管重新写了软件,也还需要处理一些技术债务。另外想完全使用 WGSL 而抛弃 GLSL ,还想将界面替换为纯 Rust 实现,比如使用 egui 框架。现在是用 imgui-rs。
介绍链接,https://gfx-rs.github.io/stories/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 日报小组 洋芋
社区学习交流平台订阅:
评论区
写评论还没有评论