< 返回版块

Mike Tang 发表于 2022-09-16 11:15

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运行:https://imgur.com/a/cojzjyX。这张图太大了,我不得不用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

社区学习交流平台订阅:

评论区

写评论
yinheli 2022-09-16 13:17

这看着像机器翻译

1 共 1 条评论, 1 页