Next Application Specific Language
下一代描述应用的领域特定语言
NASL 是网易 CodeWave 智能开发平台用于描述 Web 应用的领域特定语言。它主要包含两部分:基础语言和Web应用特定领域(如数据定义、数据查询、页面、流程、权限等)的子语言集合。
除了语言本身,CodeWave 智能开发平台也提供了齐全的语言配套设施保证 NASL 的高效编写与运行。
语言和配套设施的整体架构图如下:
基础语言
NASL 基础语言融合了面向对象、函数式等编程范式的语言特性,有着和大多数通用计算机编程语言一样的表达能力:
- 静态类型系统,支持常用的原子类型、复合类型、泛型和数据元类型等
- 支持类型推导,用户不必手动标注类型
- 支持常量和变量的定义、支持逻辑(通用编程语言中的函数)的定义
- 支持 If、While、ForEach、匹配(match)、Switch 控制流
- 支持赋值、逻辑调用、接口调用、算数运算、比较运算、逻辑运算等常用的表达式和语句
- 支持匿名函数(Lambda表达式)、批量赋值、文本插值等高级特性
- 有命名空间、模块化和依赖机制
- 提供了常用的内置函数标准库
但和通用编程语言的最大区别是,NASL 基础语言以可视化为主要的编程方式,并利用可视化对复杂的语言特性做了屏蔽和简化,大大降低了用户的学习门槛。
相比于单纯的 Schema 结构描述,NASL 语言在表达不同场景方面更具有显著的灵活性和表达力,用户可以根据自己的需求定制业务逻辑。
子语言
NASL 子语言是在基础语言之上,吸收了 Web 应用各子领域的传统编程语言和框架的主要特征,而设计的 DSL(领域特定语言),如:
- 数据定义子语言主要吸收了 SQL 中 DDL 的主要特征,用于表达数据库、表、字段和索引等相关概念;
- 数据查询子语言主要吸收了 SQL 中 DML 的主要特征,用于表达筛选、排序、分页和聚合等数据查询的各种场景;
- 页面子语言主要吸收了 Vue 框架 HTML 部分的主要特征,用于表达页面布局、页面交互和页面样式等各种场景;
- 流程子语言主要吸收了 BPMN 2.0 协议的主要特征,用于表达手动任务、自动任务、排他网关等流程领域的相关概念;
NASL 的子语言集合不是各领域DSL的简单拼凑,而是建立在基础语言之上,具有统一的表达能力。如:
- 数据库、服务端和前端采用统一的类型系统
- 前端页面逻辑、服务端逻辑和流程逻辑采用统一的表达式、控制流及内置函数标准库
- 前端可以无缝调用后端逻辑、流程可以无缝跳转前端页面
- 特定领域友好、领域之间使用连贯的可视化编程方式
这些特点可以进一步降低开发应用的学习门槛和开发成本,是要求学习多门框架和语言并且在它们之间互转数据的传统开发模式所做不到的。
库与依赖
为了分解应用的复杂性、提升相同实现的复用性以及支持对接其他通用语言的扩展性,NASL 与通用语言一样提供了模块化机制。
详见白皮书。
配套设施
- Language Server:包含类型检测、类型推断、跳转定义、自动补全等能力,在低代码应用编辑期提供辅助手段,减少编程出错概率,提高编程效率
- Debugger:包含 breakpoint、step into、step over、resume、evaluation 等能力。NASL 语言编写完成后,借助于 debug 能力能够及时验证 NASL 语言语义的正确性
- Generator:NASL 语义编译器。低代码平台借助于 Generator,将 NASL 语言编译为 java、js 等通用语言,在借助底层通用语言的运行时设施如 jvm,将 NASL 语言运行在计算机上
- NASL 代码仓库:用于实时保存用户构建应用所产生的NASL 代码,并满足高性能、高可用、高可靠等特性
- Upgrader:用于 NASL 语言在版本迭代过程中产生的一些兼容性问题处理
详见白皮书。
编译器架构
下面是从语言编译器视角的架构图:
对接生态
平滑对接 Java + JS 互联网应用开发生态。
可开发大部分 MVC/MVVM 架构的企业级应用。
静态类型
支持即时类型检测,保证类型安全。
确保企业数据资产和业务流转的有效性和稳定性。
索引能力
支持更强的代码索引能力。
提升复杂软件代码的可理解性,也支持了代码重构。