2019-2021 美团技术年货 前端篇码不执行直接转换 DSL,就称为静态生产 DSL 方案。 静态生产的特点是抹平了平台差异,因为 input 是 Dart source 与平台无关,直接 将 Dart source 内的完整信息通过一层转换器转换到 DSL,然后通过 Native 和 Dart 的静态映射和基础的逻辑支持环境,使得其可以在纯 Dart 的环境下渲染与 交互。 在 具 体 实 现 上, 可 以 利 用 Dart-lang 规范)的 Dart 源码。 ● 第二部分是 DSL 的转换器,产物是 JSON 格式的 DSL,用于标准化的描述 页面层级与逻辑。 ● 上层的第三部分是运行时环境,准备了所有需要的符号构建 Dart 对象与逻辑, 产物是动态化 App 或动态化的模块。 三、Flap 的原理与挑战 图 1 中的核心模块是转换器部分和运行时部分,接下来会介绍下这两个部分的原理与 部分实现。 232 > 美团 2020 技术年货 3.1 转换器原理 AST & DSL AST 意为抽象语法树(Abstract Syntax Tree)。Dart 的 AST 和其他语言的 AST 基 本 概 念 类 似。'package:front_end/src/scanner/token.dart' 中 定 义 了 所 有 的 Token,AST 也是通过词法分析、语法分析、解层级嵌套得到。ASTNode0 码力 | 738 页 | 50.29 MB | 1 年前3
阮一峰 《ECMAScript 6入门》 第三版fs 模块的 readFile 方法是一个多参数函数,两个参数分别为文 件名和回调函数。经过转换器处理,它变成了一个单参数函数,只接受回调函数作 为参数。这个单参数版本,就叫做 Thunk 函数。 任何函数,只要参数有回调函数,就能写成 Thunk 函数的形式。下面是一个简单的 Thunk 函数转换器。 Generator 函数的异步应用 445 // ES5版本 var Thunk return function (callback) { return fn.call(this, ...args, callback); } }; }; 使用上面的转换器,生成 fs.readFile 的 Thunk 函数。 var readFileThunk = Thunk(fs.readFile); readFileThunk(fileA)(callback); function f(a, cb) { cb(a); } const ft = Thunk(f); ft(1)(console.log) // 1 Thunkify 模块 生产环境的转换器,建议使用 Thunkify 模块。 Generator 函数的异步应用 446 首先是安装。 $ npm install thunkify 使用方式如下。 var thunkify =0 码力 | 679 页 | 2.66 MB | 1 年前3
共 2 条
- 1













