MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)), Value(7)), Value(2)) 计算最终结果:21 语法分析 对输⼊⽂本进⾏分析并确定其语法结构 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression = Value / "(" expression ")" 2. expression =/ expression "+" expression / expression // 返回函数代表的解析器 14. Parser(expression) 15. } 21 语法树之外:Tagless Final 计算表达式,除了⽣成为抽象语法树再解析,我们还可以有其他的选择 我们通过�⾏为�来进⾏抽象 1. trait Expr { 2. number(Int) -> Self 3. op_add(Self, Self) -> Self 4. op_sub(Self0 码力 | 25 页 | 400.29 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数
现代编程思想 泛型与⾼阶函数 Hongbo Zhang 1 设计良好的抽象 软件⼯程中,我们要设计良好的抽象 当代码多次重复出现 当抽出的逻辑具有合适的语义 编程语⾔为我们提供了各种抽象的⼿段 函数、泛型、⾼阶函数、接⼝…… 2 泛型函数与泛型数据 3 堆栈 栈是⼀个由⼀系列对象组成的⼀个集合,这些对象的插⼊和删除遵循后进先出原则 (Last In First Out) 我们希望存储很多很多类型在堆栈中 每个类型都要定义⼀个对应的堆栈吗? IntStack 和 StringStack 似乎结构⼀模⼀样? 7 泛型数据结构与泛型函数 泛型数据结构与泛型函数以类型为参数,构建更抽象的结构 1. enum Stack[T] { 2. Empty 3. NonEmpty(T, Stack[T]) 4. } 5. fn Stack::empty[T]() -> Stack[T]0 码力 | 27 页 | 2.56 MB | 1 年前3
WAF - 是时候跟正则表达式说再见基于语义检测的WAF 输入是否有效代码 执行了什么动作 动作是否有危害 抽象攻击语义 基于语义检测的WAF—实现 用户输入 词法分析 语法分析 攻击语义检测 攻击语义抽象 基于语义检测的WAF—优缺点 运营成本低 高准确率 优点|缺点 应急 响应慢 语义抽象 依赖人 低漏报 开发成本很高 算法优化 基于统计的机器学习WAF—异常模型0 码力 | 24 页 | 1.66 MB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十二课 案例:自动微分 Mul(f1, f2) => f1 * f2.differentiate(val) + f1.differentiate(val) * f2 7. } 8. } 16 符号微分 利⽤符号微分,先构建抽象语法树,再转换为对应的微分,最后进⾏计算 1. fn example() -> Symbol { 2. Symbol::constant(5.0) * Symbol::var(0) * Symbol::var(0) 4. fn init { 5. let input : Array[Double] = [10., 100.] 6. let func : Symbol = example() // 函数的抽象语法树 7. let diff_0_func : Symbol = func.differentiate(0) // 对x_0的偏微分 8. let _ = diff_0_func.compute(input)0 码力 | 30 页 | 3.24 MB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十四课 案例:堆栈虚拟机
0x10 if else end 0x04 (vec�instructions�) 0x05 (vec�instructions�) 0x0B 21 多层编译 字符串 -> 单词流 -> (抽象语法树) -> WASM IR -> 运⾏ 1. enum Expression { 2. Number(Int) 3. Plus(Expression, Expression) 4. Multiply(Expression, Expression) 6. Divide(Expression, Expression) 7. } 22 多层编译 字符串 -> 单词流 -> (抽象语法树) -> WASM IR -> 编译/运⾏ 1. fn compile_expression(expression : Expression) -> List[Instruction] { 20 码力 | 31 页 | 594.38 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第一课 课程介绍与程序设计
浏览器开发环境、云原⽣开发环境或本地集成开发环境 4 课程概览 课程 主题 课程 主题 课程介绍与程序设计 接⼜:集合与表 ⾯向值编程 结构体 命令 函数 列表与递归 可变状态 与可变数据结构 列表 元组 嵌套模式 抽象堆栈结构机器 数据类型与树 可变队列 树与⼆分查找 迭代与尾递归 ⼆叉搜索树的插⼊与删除 闭包与对象 泛型与⾼阶函数 案例:句法分析器与程序解释器 ⾼阶函数: 与 案例:⾃动积分与⼩游戏0 码力 | 15 页 | 2.01 MB | 1 年前3
05-MoonBit 编程语言(WASM 技术)服务端应用展望以及对Kubernetes生态的影响Kubernetes 用于 WASM 生态的价值 • 复用当前生态 • 大多数概念可以复用 • 个别概念对 WASM 镜像更加有用(例如节点亲和性) 对 Kubernetes 的挑战 • 层数过度设计 • 抽象粒度与 WASM 惯例的差异 • 容器间交互模型与 WASM 惯例的差异 • WASM 的细粒度观测和管理不是 Kubernetes 层的专长 Kubernetes + WASM 后端应用 架构和概念有共识,但很多问题仍待解答0 码力 | 30 页 | 3.41 MB | 9 月前3
MoonBit月兔编程语言 现代编程思想 第十三课 案例:神经网络
我们选择交叉熵 梯度下降 梯度决定参数的调整⽅向 学习率 学习率决定参数的调整幅度 我们选择指数下降,逐渐逼近 11 神经⽹络训练 多分类问题交叉熵: :事件; : 发⽣的概率 损失函数:基于抽象的定义 1. trait Log { 2. log(Self) -> Self // ⽤于计算交叉熵 3. } 4. fn cross_entropy[T : Base + Log](inputs:0 码力 | 17 页 | 521.66 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型 enum Repeat2 { A; B } 3. let x: Repeat1 = Repeat1::A 19 枚举类型的意义 对⽐⼀下两个函数,枚举类型可以与现有类型区分开,更好地实现抽象 1. fn tomorrow(today: Int) -> Int 2. fn tomorrow(today: DaysOfWeek) -> DaysOfWeek 3. let tuesday =0 码力 | 26 页 | 435.86 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归 现代编程思想 函数, 列表与递归 Hongbo Zhang 1 基本数据类型:函数 2 函数 在数学上,描述对应关系的⼀种特殊集合 对于特定的输⼊,总是有特定的输出 在计算机中,对相同运算的抽象,避免⼤量重复定义 计算半径为1的圆的⾯积: 3.1415 * 1 * 1 计算半径为2的圆的⾯积: 3.1415 * 2 * 2 计算半径为3的圆的⾯积: 3.1415 * 3 * 3 ……0 码力 | 42 页 | 587.59 KB | 1 年前3
共 10 条
- 1













