Async UI:一个Rust UI库,一切皆有可能

这篇博文是为在async Rust方面有一些经验的读者准备的。它假定你知道什么是Future!

什么是Async UI?

Async UI是一个概念验证的Rust UI库,它的后端是Web(HTML/JS)和GTK 4。

很有意思的一个概念,可惜作者是在校学生,现在忙于学习,没有时间继续更新,但是这个概念真的很有意思,之前的macroquad (一个Rust实现的游戏引擎),获取下一帧也是用到了异步,说到底,Rust的异步本身的核心思想就是状态机,而UI也是一个个状态机组合在一起的,两者的碰撞就很有意思。

macroquad的简单事例:

use macroquad::prelude::*;#[macroquad::main("BasicShapes")]
async fn main() {loop {clear_background(RED);draw_line(40.0, 40.0, 100.0, 200.0, 15.0, BLUE);draw_rectangle(screen_width() / 2.0 - 60.0, 100.0, 120.0, 60.0, GREEN);draw_circle(screen_width() - 30.0, screen_height() - 30.0, 15.0, YELLOW);draw_text("IT WORKS!", 20.0, 20.0, 30.0, DARKGRAY);next_frame().await}
}

async_ui的简单事例:

async fn hello_world() {text(&"Hello World!").await;
}async fn hello_world_2() {// create a Fragmentfragment((// use the component we previously made!hello_world(),// have a button beside itbutton(ButtonProps {children: fragment((text(&"Say hello back"),)),on_press: Some(&mut |_ev: PressEvent| {todo!();}),..Default::default()}))).await;
}async fn login_flow() {loop {let (username, password) = login_form().await;if check_login(username, password).await {// Login successful!break;}else {race(// Render the popup component.invalid_login_popup(),// Race with a future that will complete in 5 seconds.// In 5 seconds, this future will "win" the race and cause// the popup future to be dropped, unmounting the popup.wait_5_seconds()).await;// Loop back to the login form!}}
}async fn counter() {let mut count = 0;// Like a RefCell that you can subscribe to!let count_string = ReactiveCell::new(count.to_string());fragment((// When count_string changes, the text will change.text(&count_string.as_observable()),button(ButtonProps {children: fragment((text(&"+"),)),on_press: Some(&mut |_ev| {// Upon press, increment count and update the string accordingly.count += 1;*count_string.borrow_mut() = count.to_string();}),..Default::default()}))).await;
}

具体请看原文:

原文: https://wishawa.github.io/posts/async-ui-intro/

一个小公司的CTO在reddit上发帖询问是否应该在公司内推广Rust

我是一家小公司的首席技术官,我负责大部分的编程工作,根据工作量的大小,我们会有2到4个开发人员在我手下工作。

我们90%的工作代码和物流有关,大部分时间是在建立应用程序,通过API接收信息、处理数据,提供API接口来预订货物,等等。

我们需要开始升级我们的代码库;目前在GO和Rust之间争论。我喜欢这两种语言,但更倾向于Rust。因为我做了大部分的工作,我觉得我应该选择我更喜欢用的那个。但我担心初级开发人员永远不会明白这一点。

我想知道你们的看法。我应该使用Rust,因为我想用它,还是应该使用GO,因为更多的人知道它,而且它可能更容易找到开发人员?

以下是一些高赞回答:

我也是CTO。我们雇用了大学毕业的应届生,让他们学习Rust。他们没有遇到任何问题就学会了,并且正在编写干净的、性能良好的代码,单元测试覆盖率达到100%。然而,Rust的库生态系统并不像Node或Go那样完善。但是,它也正在努力发展。


另一位CTO:我一直在教同事(一个拥有多年Go后端经验,另外两个有前端/TypeScript经验)写Rust代码时,即使写的时间相对有限,也有相当高的效率。学习曲线可能会很陡峭,但如果有人可以教授和指导,我认为这不会是一个大问题。我们写TypeScript的程序员非常喜欢Rust,并希望能用它做更多的事情。


我管理一个项目,其中有大量的restapi调用,它是从Python移植到Rust的。光是Serde就为我们节省了数百甚至数千小时的工作。我对Go不是很熟悉,但Rust的工具(库和基础设施)很不错。


如果你想和一群初级开发人员一起快速入门,就使用Go。如果你想更容易地产生可维护和可靠的东西,并且愿意帮助后辈和新人度过Rust陡峭的学习阶段,那么就使用Rust。

Go(在我看来)是一种有缺陷的语言,它有很多令人不舒服的地方和奇怪的错误处理。另一方面,一些伟大的软件是用它写的,它相对较小,也相对简单。它的编译速度很快,可以让一个新的开发人员能在几周内完成工作并至少有一定的生产力。

Rust有更多的安全机制,更好的内存处理,更好的错误处理,更少的语法噪音,更友好的社区,更低的资源使用,所有这些都是好东西。然而,如果你是个新手,而且你还不是一个可靠的开发者,你将需要所有你能得到的(优秀的)文档和帮助,这仍然需要花费一些时间。

选择你的取舍。

This Week in Rust 464

Rust周报645期

This Week in Rust 464: https://this-week-in-rust.org/blog/2022/10/12/this-week-in-rust-464/

From 日报小组 Cupnfish

社区学习交流平台订阅:

  • Rust.cc 论坛: 支持 rss

  • 微信公众号:Rust 语言中文社区

【Rust 日报】2022-10-13 一个小公司的CTO在reddit上发帖询问是否应该在公司内推广Rust...相关推荐

  1. 2022.10.13 周四(正则表达式)

    2022.10.13 周四 正则表达式 1.正则表达式 正则表达式是一种可以让复杂的字符串问题变得简单的工具 # 问题:判断手机号是否合法 tel = '15881388789' if len(tel ...

  2. 【Rust日报】2019-10-01 - Shawl: 一个能够将一切应用程序运行为Windows服务

    Shawl: 将一切应用程序运行为Windows服务 Shawl是一个用Rust编写的能够将任何程序作为Windows服务运行的包装程序.它可以处理Windows服务的API,因此您原本的程序只需要响 ...

  3. 【Rust 日报】2022-01-09 又一个Rust中文教程《Rust语言圣经》

    12个Rust的Tips 使用 Cow<str> 作为返回类型 使用 Crossbeam channels 取代标准库 使用 Scopeguard 实现类似 Golang 的延迟运算 使用 ...

  4. 【Rust 日报】2021-09-16 Pipette: 一个模仿 Elixir 的管道操作的包,没有使用宏

    Pipette: 一个模仿 Elixir 的管道操作的包,没有使用宏 Elixir 是一门函数式编程语言,其中有个管道操作符十分好用,可以将上一步操作的结果传入给下一个方法,做链式调用,在某些情况下比 ...

  5. 【Rust 日报】2022-04-28 Spacedrive 一个开源的跨平台文件资源管理器

    jaq是JSON数据处理工具jq的一个克隆版本. jaq专注于三个目标: 正确性:jaq的目标是为jq提供一个更正确和可预测的实现,同时在大多数情况下保持与jq的兼容性. 性能.我创建jaq的初衷是为 ...

  6. 半导体器件物理 2022.10.13

    漂移电流由两部分组成 扩散电流 扩散电流+漂移电流就是总的电流,在实际问题中漂移电流远远大于扩散电流 空间电荷限制电流,对于本征半导体和一些绝缘体里面的电流,我们的作业 我们首先忽略我们的扩散电流,只 ...

  7. 2022.10.13 英语背诵

    rupture 破裂 The pipe will ~ at its weakest point          creep~ 蠕变断裂 mint 薄荷,造币厂 subsequent 接着的,然后的 ...

  8. 【Rust日报】 2019-04-04

    成功故事:Rust在企业领域的应用 #zalando 本文描述了zalando公司从Scala转向Rust的成功故事. 缘起: 2016年该文作者作为Scala开发者加入了Zalando公司.半年后, ...

  9. 【Rust日报】2021-01-14 rustdoc的性能有了很大的提升!

    在过去四个月,rustdoc的性能有了很大的提升! 据jynelson回复,在接下来的几天,他将要发表一篇博客,给大家介绍这些性能提升是来自哪些地方. Read More: https://www.r ...

最新文章

  1. LRU算法确定最后使用时间的顺序-栈
  2. 小数据,大前景 !美国智库最新报告:长期被忽略的小数据人工智能潜力不可估量...
  3. 项目前的知识点准备(1)
  4. 经过七年演进,Serverless流行起来了吗?
  5. sql中查询类型为int的字段,返回null的异常
  6. .h5是什么文件_PPT转H5丨再也不用担心忘带U盘怎么办了
  7. 互联网大牛们的电脑桌面,佩服!
  8. 深度学习笔记(二)——VGG
  9. unity打开摄像头
  10. 巧记肖特基二极管BAT54C、BAT54S、BAT54A
  11. matlab插值函数的作用,matlab 插值函数
  12. 中国电信无限流量卡服务器,拒绝套路!中国电信再出新版“无限量”卡,流量不限速!...
  13. php正则表达式在线测试工具,在线测试正则表达式工具:适合asp.net vb.net cs.net等Web或者Windows程序,便于你快速编写正确正则表达式,提供正则表达式模板供参考。...
  14. java手机调查问卷_JAVA学习调查问卷——20145101
  15. mysql executing_MySQL数据库出现慢查询的危害
  16. Java SDK的作用
  17. html字两边的横线_css实现中间文字两边横线效果
  18. 拼多多电子面单云打印接口对接 (跨境erp应用,电子面单应用)[拼多多获取电子面单,拼多多面单打印]
  19. 七类综合布线标准实施和应用
  20. [u(x)v(x)]的n阶导数,莱布尼兹公式,利用python简化

热门文章

  1. 【新梦想干货分享】接口自动化测试
  2. 常用模块fileinput学习
  3. Go语言ORM框架:访问mysql数据库
  4. 灵动的金色火焰(Flame Of Gold)
  5. 混凝土及水泥制品市场预测
  6. 一度智信:店铺客服如何正确处理中差评情况
  7. 6.1图的定义、无向图、有向图、连通图、强连通图、带权图
  8. Java与Python混合开发
  9. 模拟经营动物园java,动物园游戏下载|动物园下载 (经典模拟经营游戏)_单机游戏下载...
  10. softmax单元_三分钟带你对 Softmax 划重点