Dumas, May Day is working overtime, so I have to find something to do.
Remember Uncode? The IDE used to implement the entire cloud R&D system that I conceived. If you don’t remember, please visit " Process as Code: Low Code & Cloud R&D IDE-Uncode ". It's coming, it's coming now.
Uncode architecture
I may be good at IDE plug-in development, and read a lot of Intellij IDEA Community source code, but I can't say that I am good at IDE design-there are too many pits worth exploring. Especially before May 1st, I tried to build an editor with Druid, and found that this was not an easy task. So, I went back to the route of WebView + Monaco, and then used Rust as the core of the system:
The figure above is the current architecture diagram of Uncode:
- Based on Tauri, it is built using native WebView. The reason for choosing Tauri is that it is more friendly to Rust support.
- UI. TypeScript + React, one of the reasons for choosing React instead of Angular is: 1. I haven't used React for a long time. 2. In addition, domestic Angular users have become smaller.
- App. Tauri is basically a Proxy running + access to the system interface, sinking the core functions to uncode.
- Uncode Core. Main tasks: 1. Provide analysis and processing of many DSLs. 2. Encapsulate many tools to provide analysis functions to support reaction feedback. 3. RPC support-Tauri is too much trouble.
Perhaps you have also noticed Golang.
Uncode uses Rust to implement all kinds of DSL analysis and all kinds of code generation. However, Rust still lacks an important tool, Antlr (at least not yet stable). Still the old problem, Antlr officially provides a lot of existing programming language grammars. This important feature supports us to do static analysis. Therefore, we will use Golang to temporarily implement such a function.
Uncode's first small goal
Considering that Uncode is not an easy task:
- Design a series of DSLs to code design and process
- Design a language (ie Datum, the original Charj) to convert different languages
- Design a series of interfaces to integrate other series of tools
- ……
Therefore, the first goal of Uncode is quite simple: you can use Uncode to write Uncode editors.
The complexity of the IDE. Transforming into an IDE is a very complicated matter. Before that, you need to prepare a stable and reliable UI interface + good interactivity. Of course, there are also integrations for many tools.
Uncode demo version
So, in five days (plus No. 4.30), I developed a demo version of Uncode, which seems to be able to do everything except not being able to write code.
Demand is code
Requirement coding is to abstract software development requirements into a specific domain language, and use the same method as code management to manage requirements and track changes in requirements. At the same time, in order to interface with the version management system through the new API, to visualize the demand, it evolves into Kanban coding.
" requirement is the code " as the first part of Uncode, in the demo version, I implemented it relatively simple, read the story in the code library, parse cucmber
, and then display it in Uncode. The corresponding DSL is still in its early days (because the parser of Cucumber's corresponding grammar has to be changed).
# status: backlog
Feature: 架构守护 DSL 设计
作为一个架构师,我希望在设计通过类似于 ArchUnit 这样的 DSL 来设定调用规则等。
Scenario: 开发人员违反规则时,无法提交代码
# Enter steps here
Since the Kanban library used is not perfect, no corresponding editing functions have been created. The corresponding function screenshots are as follows:
Design as code
The design as the code is slightly more complicated, divided into four parts:
- Architecture description language. There is a DSL here, but I am still designing it.
- Modeling. It is modeling, but it can't be said that the two-way binding of the model. That is, the code is scanned, UML is generated, and then displayed; if UML is modified, the corresponding code will be modified. (The first half is supported, and the second half is temporarily not supported).
- Architecture fitness function. The first function is architecture guardianship, which is a DSL abstraction based on Arch Unit. I'm too lazy to write other things temporarily.
- UI Design. That is, I designed it last year: https://github.com/phodal/design , which can realize simple conversion of DSL to design drawings and conversion of DSL to UI components.
The UI is still ugly.
Coding of code
I admit that this is an editor with a catalog function. Oh, no, it supports saving files for the time being, but it's basically available.
other
Todoing。
In just five days, what bike do you want?
summary
GitHub download preview version: https://github.com/inherd/uncode/releases
If you are good at or are interested in the following:
- React
- Monaco Editor
- Rust
- Tauri
- Beautiful to the UI
Life is short, welcome to join the development of : 160bda0dbcc266 https://github.com/inherd/uncode
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。