Blog
Blog
PHODAL

上个月,我与诸多同行们又讨论起了云 IDE 的事情。期间,我一直在想为什么云 IDE 不受开发者的欢迎?我回想了一下,为什么我不使用云 IDE?

Guarding 是一个可以用于 Java、JavaScript、Rust、Golang 等语言的架构守护工具。受 ArchUnit 的启发,借助于易于理解的 DSL,来编写守护规则。支持 Windows、macOS、GNU/Linux 系统。

进入 30 岁我,本不该写一篇关于这个话题的文章,我从来没有这样的焦虑。

架构守护代码化,即使用易于阅读和维护的领域特定语言,来描述软件架构守护的规则,对诸如于分层架构、包访问规则、包数量、继承命名等进行限制。

在过去的几年里,我一直从事于各种领域定义语言的设计,包含 unflow、guarding、datum、forming 等。在我刚入门这个领域的时候,我从《领域特定语言》、《编程语言实现模式》 等,一直研究到龙书等。我渐渐掌握了领域特定语言设计的一些技巧,也能快速(相对于过去)设计出一个领域特定语言。

UI 设计代码化,即将软件的 UI 设计与 UI 交互转换为特定的领域语言,并使用代码的方式来进行管理。它可以直接将需求转换为 UI 原型,让设计人员基于此进行设计;还负责将其转换对应的 UI 代码,方便开发人员进行编写。

最近,我们 Inherd 开源小组推出了『云研发 IDE:Uncode』的预览版,然后便与不同企业的人进行了一波的交流。在这些观点的驱动之下,我觉得我们有必要再写一些文章:好好介绍一下一些相关的理念。这些理念用于帮助这些企业,好好思考一下研发平台的下一站。

调研是一门学问,但是我并不觉得我非常擅长。过去,我没有立志于成为一个研究性的程序员,实践对于我来说更有感觉。只是呢,随着编程年轮的一圈一圈地增长,研究性的开发也变成一个不可缺少的日常活动。虽也说不上是每日必备的活动,但是呢,每隔几天、向周也得做一些相关性的研究。

花仲马,五一在加班,我便只得找点事情做。

自打我有了一个写 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 库,文档还有待完善。

Feeds

RSS / Atom

最近文章

存档

2026 (1 月)
2025 (12 个月)
2024 (12 个月)
2023 (12 个月)
2022 (12 个月)
2021 (12 个月)
2020 (12 个月)
2019 (12 个月)
2018 (12 个月)
2017 (12 个月)
2016 (12 个月)
2015 (12 个月)
2014 (12 个月)
2013 (9 个月)
2012 (3 个月)
2011 (1 月)
2010 (1 月)
1991 (1 月)

分类

标签

作者