花仲马,五一在加班,我便只得找点事件做。
还记得 Uncode 吗?用于落地我构思的整个云研发体系的 IDE,如果不记得的话,请拜访『流程即代码:低代码 & 云研发 IDE —— Uncode』。它来了,当初来了。
Uncode 架构
我,兴许善于 IDE 的插件开发,还有浏览了大量 Intellij IDEA Community 的源码,但也说不上善于 IDE 的设计 —— 有太多的坑值得去探。特地是在五一之前,我尝试用 Druid 去构建一个编辑器,便发现这并不是容易的事件。所以,我走回了 WebView + Monaco 的路线,而后用 Rust 作为零碎的外围:
上图是以后 Uncode 的架构图:
- 基于 Tauri,所以应用的是原生的 WebView 构建。抉择 Tauri 的起因是:对 Rust 反对更敌对。
- UI。TypeScript + React,选 React 而不是 Angular 的一个起因在于:1. 好久没用 React 了。2. 外加国内的 Angular 用户变小了。
- App。Tauri 基本上作为是一个 Proxy 在运行 + 零碎接口的拜访,将外围性能下沉至 uncode。
- Uncode Core。次要工作:1. 提供泛滥 DSL 的解析和解决。2. 封装泛滥工具,以提供剖析性能,用于撑持反馈反馈。3. RPC 反对 —— Tauri 太麻烦了。
或者,你还留神到了 Golang。
Uncode 应用 Rust 来实现各类的 DSL 的解析,以及各类的代码生成。然而,Rust 还短少一个重要的工具,Antlr(至多还不稳固)。仍旧是那个老问题,Antlr 官网提供了大量的现有编程语言的语法,这个重要的个性因为反对咱们做动态剖析。所以,咱们将应用 Golang 来临时实现这样的性能。
Uncode 的第一个小指标
思考到 Uncode 不是一件容易的事件:
- 设计一系列 DSL 来将设计和流程等代码化
- 设计一个语言(即 Datum,原来的 Charj)来转换不同的语言
- 设计一系列接口来集成其它一系列工具
- ……
所以,Uncode 的第一个指标,相当的简略:能够用 Uncode 来编写 Uncode 的编辑器。
IDE 的复杂性。变身为一个 IDE 是一件非常复杂的事件。在那之前,须要筹备好稳固牢靠的 UI 接口 + 良好的交互性。当然了,还有对于诸多工具的集成。
Uncode 演示版
所以,在五天里(加上 4.30 号),我开发了演示版本的 Uncode,除了不能写代码,它仿佛什么也能做。
需要即代码
需要代码化,行将软件开发需要形象为特定的畛域语言,并应用治理代码一样的形式来治理需要,追踪需要的变动。同时,为通过新的 API 来对接版本管理系统,以可视化需要,演变为看板代码化。
『需要即代码』作为 Uncode 的第一个局部,在演示版里,我实现得比较简单,读取代码库里的 story,解析其中 cucmber
的语法,而后展现到 Uncode 里。对应的 DSL 也还在晚期(因为还得改 Cucumber 对应语法的解析器)。
# status: backlog
Feature: 架构守护 DSL 设计
作为一个架构师,我心愿在设计通过相似于 ArchUnit 这样的 DSL 来设定调用规定等。Scenario: 开发人员违反规定时,无奈提交代码
# Enter steps here
因为,应用的 Kanban 库不是很欠缺,所以并没有创立对应的编辑性能。对应的性能截图如下:
设计即代码
设计即代码就略微简单一些,分为这么四局部:
- 架构描述语言。此处是有一个 DSL,只是我还在设计中。
- Modeling。说是建模,然而也说不上,模型的双向绑定。即扫描代码,生成 UML,而后展现;批改 UML 的话,会批改对应的代码。(前半部分反对,后半局部暂不反对)。
- 架构适应度函数。第一个性能是架构守护,即基于 Arch Unit 的 DSL 形象。其它的临时懒得写了。
- UI Design。即我在去年设计的:https://github.com/phodal/design,能够实现简略的 DSL 转换为设计图,以及 DSL 转换为 UI 组件。
UI 仍旧很丑。
代码的代码化
我抵赖,这就是一个带目录性能的编辑器。哦,不,临时还反对保留文件,然而根本可用。
其它
Todoing。
就这么五天,你还想要什么自行车。
小结
GitHub 下载预览版:https://github.com/inherd/unc…
如果你善于又或者是对以下的内容感兴趣:
- React
- Monaco Editor
- Rust
- Tauri
- 对 UI 有美感
人生苦短,欢送退出 Uncode 的开发:https://github.com/inherd/uncode