Fair下发产物-布局DSL生成原理

一、概述

大家都知道,Flutter在release环境是以AOT模式运行的,这就决定了我们要做动态化的话无法简单的通过动态下发dart代码执行的。根据Fair团队的前期调研,我们对布局动态化和逻辑动态化的实现采用了两套不同的实现方案,对于布局部分,我们在解析dart源文件之后生成DSL产物下发,然后在端上解析DSL构建布局的方式,逻辑动态化的部分,我们采用的是dart源码转js下发的方式。

整个动态化流程大致如下:

image.png

二、整体流程概述

详述具体流程之前,我们先来看看整体的流程,然后再去讲解各个流程的原理细节。

image.png

整个流程大致分为两部分:

  • 通过fair_ast_gen将源码解析并生成AstMap;
  • 通过fair_dsl_gen将AstMap转换成我们需要的Fair DSL。

这里涉及到两个概念,大家需要先了解一下

  • AST 全称是Abstract Syntax Tree,中文名为抽象语法树。
  • DSL 全称是Domain Specific Language,中文名为领域特定语言。

三、AST解析

3.1 源码解析

猜你喜欢

转载自blog.csdn.net/xiangzhihong8/article/details/133134771
DSL
今日推荐