前言的前言

最近私下做了好一阵子的项目 UltraFunction,以至于好久没更新过博客了(白天工作太忙了),特此过来总结一番。

估摸着算了一下,这个项目从 2024/8/29 开始构建项目,到如今也快 2 个月了,中间发生了不少难题,都一一解决,为了自己的热爱(屹立不倒)

在此感谢参与项目的所有人🙏🏻

网址: https://ultrafunction.domcer.com/
Wiki: https://ultrafunction.domcer.com/wiki
Discord: https://discord.gg/2YZuDJwpMX
Email: admin@domcer.com
QQ: 217934413
SpigotMC: https://www.spigotmc.org/resources/%E2%AD%90ultrafunction-low-code-development-platforms-1-8-1-21.120276/

前言

感觉国内貌似对低代码平台不感兴趣,在当前公司,也曾有过低代码平台(对于前端),当时闹得风风火火,领导都很看中。节后开发组的人就不见了踪影。(3名前端主力,听说都被优化了,我是当时支持的后端,瑟瑟发抖)

在国外经常刷到一些视频,说一群孩子使用 iPad 做一些好玩的东西(应该很多年了),感觉国外一直都很力推技术教育,常常在孩子最具有创造力和想象力的年龄,去深挖他们的潜力。而国内貌似就没有这些内容了,甚至很难推进。24年有幸被网易邀请到上海喝茶聊天,我就提过少儿教育这类的事情,他们的回复的大概意思是,国内政府很难说通,很难办,如果在大学应该还好。可是我想说,如果到大学,他还真的会对这些感兴趣吗?

这是一个什么项目

Wiki: [这个项目致力于简化 Minecraft 插件的创建过程,通过低代码平台,让用户轻松生成自定义逻辑数据包插件。无需任何编程基础,只需选择预定好的模块,并配置相关行为,即可实现独特的游戏功能。无论是添加新的游戏机制,还是打造个性化的互动体验,我们的工具都能满足大部分的需求。直观的界面和强大的自定义选项,让每一位 Minecraft 爱好者都能轻松实现创意,提升游戏乐趣,快来打造属于您的专属世界吧!]

说白了就是一个可以通过拖拽积木块的方式,来达到自己的逻辑行为。帮助那些不会写代码,但是想要做游戏内逻辑行为的玩家,提供一个社区、平台,帮助他们完成想要做的事情。

官网示例图

名字和LOGO的来源

对于定义这个项目,其实也想了一些时间,最终定下了 UltraFunction,这个不仅仅只有直译的 极致功能/极致方法,也有英文可拆解的 Ultra Fun(有趣)ction,让大家在使用这个平台的时候,更多感受到的是一种乐趣。

关于技术选型和架构

关于前端

前端共有 2 个部分:官网页面、画布编辑
官网页面采用的是 Vue
画布编辑使用的是 Google Blockly:[Blockly 是 Google 推出的一款可视化编程编辑器,使用拖放块。它是为全球最受欢迎的编程教育计划提供支持的引擎。]

因为我并不是做前端的,所以一些细节我也没办法讲述太多。。。

关于后端

后端共有 3 个部分:平台业务层、核心执行层、插件处理层

  1. 平台业务层:采用 SpringBoot + MySQL 的设计,对平台的业务进行处理,包括但不限于(用户账号功能、工作台管理功能、文件触发器编辑功能等)
  2. 核心执行层:采用 antlr 定义自己的领域语言(DSL),对接前端的 Blockly,通过积木块生成 DSL 内容
  3. 插件处理层:使用 Bukkit 包进行开发,对文件、事件等进行统一分发和处理

为什么选择 antlr

性能实测

  1. 每次都经过compile: 一组包含20条语句的代码块,有20个入参数与2个出参。每次执行都经过输入、编译、执行、输出四个步骤。循环执行1000000万次,时间是122212ms,平均每条执行时间0.12ms
  2. 每次不经过compile: 一组包含20条语句的代码块,有20个入参数与2个出参。每次执行都经过输入、执行、输出三个步骤。循环执行1000000万次,时间是6151ms,平均每条执行时间0.006ms

所以,可以将即将执行的代码块进行预编译,存储到缓存内,每次取其中的 ParserTree 直接运行

高性能原理分析

模块原理
antlr4词法匹配DFA
antlr4语法匹配Adative LL()

词法分析(Lexical Analysis)

  1. 词法分析器(Lexer)将输入的字符流分割成令牌(Tokens)。这一步类似于正则表达式的匹配,但ANTLR4使用的是其自己的模式匹配算法。
  2. 词法分析器规则(Lexer rules)可以用类似正则表达式的语法来定义,但它们不是直接使用正则表达式库来实现的,而是ANTLR4自身的匹配机制。



语法分析(Parsing)

  1. 语法分析器(Parser)根据定义的文法规则(Grammar rules)将令牌流解析成语法树(Parse Tree)。
  2. 语法分析使用的是一种叫做LL()的解析算法,这是一种自顶向下的解析算法,能够处理许多上下文无关文法。由于不进行回溯,LL 解析器通常比较高效,特别是在处理适合 LL(1) 或 LL() 的文法时

流程图

流程图

  1. 在平台上,用户需要对自己的文件进行编辑,最终前端的 schema 与 后端的 expression (DSL)均会保存在云端
  2. 通过构建文件,会生成一个 xxx.ultrafunction 文件
  3. 放入服务端内,UltraFunction 会加载这个数据文件,并且预编译里面的内容,存入到缓存内
  4. 等待事件监听器的分发,当触发某个事件后,即开始运行缓存内的语法

后话

目前市场上已有太多各种功能的插件了,当时没做项目之前的想法微乎其微,认为做任何功能的插件都有很多竞争对手,并且赛道上已经有太多人了,目前没有什么新颖的点。倒不如开发一个低代码平台,让用户发挥自己的想象,随便配置。

我仍记得好几年之前,有个网站也做了个类似的低代码平台,但是我当时还小,用不懂,而且没有一个稳定的社区平台。所以在我们开创这个项目的时候,主打的就是社交媒体,完善帮助文档,让用户可以在任何地方都能联系到我们。给予用户帮助显然成本是很高的,但是这可以帮助项目持久的运营下去。

最后修改:2024 年 12 月 20 日
如果觉得我的文章对你有用,请随意赞赏