3

云研发 IDE Uncode:演示版发布(欢迎加入开发)

 3 years ago
source link: https://www.phodal.com/blog/uncode-preview/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Posted by: Phodal Huang May 5, 2021, 4:48 p.m.

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

还记得 Uncode 吗?用于落地我构思的整个云研发体系的 IDE,如果不记得的话,请访问『流程即代码:低代码 & 云研发 IDE —— Uncode』。它来了,现在来了。

Uncode 架构

我,也许擅长 IDE 的插件开发,还有阅读了大量 Intellij IDEA Community 的源码,但也说不上擅长 IDE 的设计 —— 有太多的坑值得去探。特别是在五一之前,我尝试用 Druid 去构建一个编辑器,便发现这并不是容易的事情。所以,我走回了 WebView + Monaco 的路线,然后用 Rust 作为系统的核心:

Uncode Architecture

上图是当前 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/uncode/releases

如果你擅长又或者是对以下的内容感兴趣:

  • React
  • Monaco Editor
  • Tauri
  • 对 UI 有美感

人生苦短,欢迎加入 Uncode 的开发:https://github.com/inherd/uncode


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK