Blog
Blog
PHODAL

查看作者 Phodal Huang

自打我有了一个写 Uncode IDE 的小目标之后,我开始寻找一些适用于 Rust 语言的 GUI 框架。对于未来而言,基于 Rust 语言写 GUI 提供了大量的优点。 - 浏览器环境。在进程分离的架构下,意味着我们可以用 Rust 写 GUI 后端,用于提供语言服务等;Rust 写前端则可以编译为 WebAssembly,以更好的性能在浏览器上运行。 - 本地运行。没啥说的,怎么地也不如再有的 GUI 框架做得好。 - 移动设备上运行。就是想想,说不定还能实现。 于是,在我这一个月的努力之下,我尝试了三个不同风格的 Rust GUI 框架:终于总算是勉强能跑起来了。顺便一提,这三个框架都不是稳定版本,功能都不够完善。 唯一值得称道的一点是,我写这篇文章用的工具用的是其中的 Druid 框架写的 Print 编辑器吧。它可以稳定的运行着,虽然功能还不够完善,但是勉强可以用起来。而且,从输入的效果来看,输入的响应速度还是相当不错的 —— 毕竟在没有各种智能 + 智障提醒的情况下,它不会有多慢。 ## 混合框架 Tauri 为了方便于开发,我开始我假设 Uncode 是运行在浏览器环境的,所以呢,我就找了 Electron 的替代器 Tauri。 Tauri 走的是古老的混合应用框架 Cordova 的思路,通过调用系统默认的 WebView 来作为环境。想想,还是很美好的,所以我尝试了使用 Tauri 运行了第一个 hello, world。然后试着,加了几个功能,也是勉强能接受的,直到我需要一个多窗口的功能,发现没有。 于是,我去 GitHub 上了解了一下情况,看了一眼 Todo: - Frameless Mode (coming soon) - Transparent Mode (coming soon) - Multiwindow Mode (coming soon) 看了一眼时间,没错今年是 2021 了,这些个 Todo 这么多,我还怎么继续啊。 小结,其实呢,如果你用过 Cordova 的话,那你就知道 Cordova 在跨平台上的诸多问题。不过,写写小工具还是相关不错的,hello,world 只需要 600 KB,体积少了 100M 还是很香的。 ## 跨 Web 与原生框架 Iced 接着,我开始寻找了第二个 GUI 框架,我看到了一个更美好的框架 Iced:用 Iced 写的应用,除了可以在桌面上运行,还可以编译为 Web 应用在浏览器上跑。有没有很香?? 拿起 Iced 就开发干了: - Flexd 布局 + 1 分, - 独立的 Style 编写 + 1 分 - …… 如下是使用 Iced 编写的 Style,支持一定程度的自定义: ```rust mod style { ... impl container::StyleSheet for ProjectToolWindow { fn style(&self) -> container::Style { container::Style { background: Some(Background::Color([1.0, 1.0, 1.0].into())), text_color: Some(Color::BLACK), ..container::Style::default() } } } } ``` 那,我们来写个编辑器吧。咦,没有多行 text input。我思考了一下一个编辑器的工作量,我决定放弃这个框架。 总结: API 非常友好,至少我是觉得不错滴,但是 widget 不全。 ## 桌面级Druid 我要醒醒醒醒,原生 GUI 开发和 Web UI 开发不一样,大部分组件库没那么全的。嗯,看来这样一来,我的目标就很清晰了:多窗口 + 多行文本。一波努力之下,我找到了 Druid。然后看了看作者的头像,似乎有点眼熟,点进去一眼,原来就是那个写 Xi Editor 的作者了。 - 编辑器支持功能 GET。同时还有 xi-win 作为参考版本,widget 里还提供了多行文本的支持,也就是我现在在写本文的这个工具,用的就是多行文本。虽然,后期得自定义,但是至少得是 it works。 - 内置多语言支持。 - 官方提供了主题的 Demo。 - 官方有一个参考应用:字体编辑器。 排版方式上,同样是可以用 Flex,如下: ```rust fn make_ui() -> impl Widget { Flex::column() .with_child(navigation_bar()) .with_flex_child(center(), 1.0) .with_child(bottom_tool_window()) .with_child(status_bar()) .background(crate::theme::BACKGROUND_COLOR) } ``` 比较有意思的是,这个框架内置了大量的 GUI 范式,你得按它的模式来编写。 总结:基本可用的 Rust GUI 库,文档还有待完善。

最近的一两个月里,我一直在研究各类的模式:设计模式、架构模式、容器模式,以及其它一些特定领域的模式(如并行计算模式)等等。

经历了一番买书、读论文、读代码,我发现了以前对于模式的理解不够深刻。也因此呢,这篇文章就是用来记录一些缺乏的东西,诸如于模式语言、模式的模式等。

回想起,几年前,我参加的几次公司的 Hackathon。对于公司和客户来说,它带来的是一些产品上的创意。对于个人来说,它带来了~~几天的休息时间~~激情碰撞的岁月。你大可以忘掉工作上那些烦人的 bug,忘记了该死的 BAU(日常维护工作),然后开展几天的编程之旅。

从整个行业而言,人们的关注点一直是如何提升技术生产力? 现在技术到了一个新的阶段了,而需求的转换大大限制了人们的开发速度。于是无论我们的 DevOps 和云开发实施得再好,也会陷入需求与技术隔离的瓶颈。这就是为什么我们需要云研发 理论体系 :),通过代码化的方式,一站式解决需求到设计,再到代码的问题。

开发者体验,与用户体验类似,只是对象是软件开发人员。将之与国际进行对应,便是开发人员对于针对使用或期望使用的产品、系统或者服务的认知印象和回应。有所不同的是,用户关注的内容变为库,SDK,文档,框架,开源解决方案,通用工具,API 等的开发人员的体验。

最近,在为 Coco 优化分层架构之时,我陷入了各种决策困难之中。所以我通过不断地延迟决策,以摸清更适合现有系统的现状。换个简单来说,在危险边缘徘徊,以期待能获取最大的收益。

在结合了《大规模 C++ 程序设计》中引入的物理设计的概念,以及《系统重构与迁移指南》一书中引入的『四级重构』,重新论证了我先前的一个想法:并不需要成为 xx 语言的熟练开发者,我也能分析这个语言的系统设计得是否合理?

内源即将开源方法(最佳实践、协作方式、架构模式等)融入到组织的软件构建和发布方式之中,以在组织内构建类似开源的文化。

过去的十几天里,在 Inherd 开源小分队的努力之下,我们实现了 Coco 的第一个完整的功能 —— 实现对于一个项目的基本架构可视化。(PS:Coco 是一个研发效能分析工具,如团队发展现状(根据架构复杂度及行数变更)、团队演进、历史分析等。)

整体来看,从大的趋势上没有太大的变化。这里并不考虑某些特定的技术,而是从总体上(战略)层面来看待问题。所以,就有了这么几个点:

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

存档

分类

标签

作者