MirrorQL概览¶
MirrorQL是一个基于datalog、面向数据库的查询语言。MirrorQL描述了数据库上的查询逻辑和输出方式。
MirrorQL使用声明式的程序而非命令式的程序,MirrorQL的查询逻辑由谓词构成。换句话说,MirrorQL注重于查询结果需要满足的逻辑性质,而不需要使用者给出查询的具体过程。
MirrorQL有三个主要的设计目标:
- 表达力强:使用声明式语法,便于编写逻辑关系。对
datalog的语法进行扩展,以便表达复杂的逻辑关系。 - 开发效率高:引入包、模块等机制,便于程序的复用和扩展,提高开发效率。
- 高性能:
MirrorQL尽可能提供datalog的零成本抽象。即同一功能的程序,无论使用MirrorQL开发还是使用datalog开发,运行性能应该相当。
MirrorQL与其他编程语言的区别¶
- 通用编程语言的基本功能单位是函数,函数中定义了程序的执行流程,函数接收零或多个参数,返回一个值。
MirrorQL的基本功能单位是谓词,谓词中包含一个逻辑公式(formula),逻辑公式约束谓词变量,谓词可以包含一个特殊的变量(谓词返回值),但与函数的显著差别是,谓词返回值可能有0或多个。 - 通用编程语言的变量对应一个值实例,例如
int x定义一个整形变量x,而在某一时刻x只可能绑定到一个值上。MirrorQL的变量对应一个值集合,例如let x:OneTwoThree定义一个类型为OneTwoThree的变量x,x可以同时代表1,2,3,或者说x是值集合{1,2,3}。 - 通用编程语言中,
class的实例化表示分配一块内存,保存当前class的状态(数据成员等)。在MirrorQL中,class没有实例化的概念。MirrorQL的class是逻辑概念,代表满足特定逻辑式的值的集合。例如let pet:Dog定义一个变量pet,pet的值集合是Dog集合的子集。 - 通用编程语言的操作是基于值的,变量只能绑定到一个值上。值之间可以互相引用,多个值可以聚合为一个值。
MirrorQL的操作是基于集合的,每个变量都有一个值集合,MirrorQL允许集合的常见操作。