Intuitive
一个用于声明性地编写TUI的包
我在Rust中写过一些TUI,UI组件所需的代码量总是让人感觉过多。一段时间以来,我一直在考虑能够用类似SwiftUI的DSL编写组件,并像React那样用钩子管理状态。Intuitive
是这种挫折感和愿望的结果。
use intuitive::{
component,
components::{stack::Flex::*, HStack, Section, Text, VStack},
error::Result,
on_key, render,
state::use_state,
terminal::Terminal,
};
#[component(Root)]
fn render() {
let text = use_state(|| String::new());
let on_key = on_key! { [text]
KeyEvent { code: Char(c), .. } => text.mutate(|text| text.push(c)),
KeyEvent { code: Backspace, .. } => text.mutate(|text| text.pop()),
KeyEvent { code: Esc, .. } => event::quit(),
};
render! {
VStack(flex: [Block(3), Grow(1)], on_key) {
Section(title: "Input") {
Text(text: text.get())
}
HStack(flex: [1, 2, 3]) {
Section(title: "Column 1")
Section(title: "Column 2")
Section(title: "Column 3")
}
}
}
}
fn main() -> Result<()> {
Terminal::new(Root::new())?.run()
}
Github: https://github.com/enricozb/intuitive
在《我的世界》中实现的红石CPU/GPU上运行《我的世界》
在一个定制的《我的世界》服务器上运行(用Rust编写),能够以比vanilla服务器快10000倍的速度进行红石计算。
这个服务器甚至用jit编译红石电路,以加快其执行速度。这真是令人难以置信 你好,我是MCHPRS的作者。 虽然MCHPRS确实有一个完整的jit,以使用cranelift的redpiler后端形式存在,但不幸的是,它并没有被维护,除非你设置了feature的flag,否则不会被编译。cranelift后端的问题是,在红石时间方面使事情准确的唯一方法是使用这种非常天真的方法,考虑到当时cranelift的代码输出状态,最终甚至没有那么快,或者是一种非常复杂的可逆转的jit方法,但从未出现。 目前,默认情况下,它所做的是将整个红石构建编译成一个有向加权图,可以通过几个优化通道运行。最终的图具有较小的节点尺寸,希望能适合你的CPU缓存并尽可能快地执行。这就是所谓的 "直接 "后端。 这里有一个有趣的图形,是我在游戏中建立的一个8位CPU,通过redpiler运行:
。这张图太大了,我不得不用Gephi来渲染它。我试着让dot运行一整夜,但它从未完成。
Github: https://github.com/MCHPR/MCHPRS
油管: https://www.youtube.com/watch?v=-BP7DhHTU-I
This Week in Rust 460
新一期的 Rust 周报速递发布,快来看看有哪些内容你曾经关注过 :)
This Week in Rust 460: https://this-week-in-rust.org/blog/2022/09/14/this-week-in-rust-460/
From 日报小组 Cupnfish