 MoonBit月兔编程语言 现代编程思想 第二课 月兔开发与月兔中的表达式	
⽉兔的编译器会在运⾏前使⽤类型推导来确认程序是否正确使⽤类型 ⽉兔的开发⼯具可以在开发时实时提示检查到的类型错误 图中的错误源于字符串与数字不能直接相加 14 ⽉兔的基本数据类型 逻辑值(布尔值) 整数(整型、⻓整形) 浮点数(单精度浮点数、双精度浮点数) 字符与字符串 多元组 …… 15 逻辑值(布尔值) ⽉兔中逻辑值的类型为 Bool 逻辑值只有两个可能值: true false (-1.2).to_int() == -1 ⼩练习:如何通过整数与浮点数的相互转换,来⽐较 0.1 + 0.2 与 0.3 ? 18 字符与字符串 ⽉兔中字符类型为: Char ,字符串类型为: String 字符⽤英⽂单引号标识: 'a' 字符串⽤英⽂双引号标识: "Hello!" 字符有不同编码⽅式 ASCII(美国信息交换标准代码):0~127,⽀持英⽂字符及常⻅符号 例如:A~Z对应65~90 假,表达式的值该是什么呢?) 38 总结 我们本章节学习了 如何配置⽉兔开发环境 浏览器开发环境 云原⽣开发环境 本地开发环境 ⽉兔基本数据类型 逻辑值 整数和浮点数 字符和字符串 多元组 如何以表达式和值来看待⽉兔程序,以简化求值来理解⽉兔程序的运⾏ 390 码力 | 39 页 | 1.53 MB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第二课 月兔开发与月兔中的表达式	
⽉兔的编译器会在运⾏前使⽤类型推导来确认程序是否正确使⽤类型 ⽉兔的开发⼯具可以在开发时实时提示检查到的类型错误 图中的错误源于字符串与数字不能直接相加 14 ⽉兔的基本数据类型 逻辑值(布尔值) 整数(整型、⻓整形) 浮点数(单精度浮点数、双精度浮点数) 字符与字符串 多元组 …… 15 逻辑值(布尔值) ⽉兔中逻辑值的类型为 Bool 逻辑值只有两个可能值: true false (-1.2).to_int() == -1 ⼩练习:如何通过整数与浮点数的相互转换,来⽐较 0.1 + 0.2 与 0.3 ? 18 字符与字符串 ⽉兔中字符类型为: Char ,字符串类型为: String 字符⽤英⽂单引号标识: 'a' 字符串⽤英⽂双引号标识: "Hello!" 字符有不同编码⽅式 ASCII(美国信息交换标准代码):0~127,⽀持英⽂字符及常⻅符号 例如:A~Z对应65~90 假,表达式的值该是什么呢?) 38 总结 我们本章节学习了 如何配置⽉兔开发环境 浏览器开发环境 云原⽣开发环境 本地开发环境 ⽉兔基本数据类型 逻辑值 整数和浮点数 字符和字符串 多元组 如何以表达式和值来看待⽉兔程序,以简化求值来理解⽉兔程序的运⾏ 390 码力 | 39 页 | 1.53 MB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第十四课 案例:堆栈虚拟机	
List:: [Const(1)]) if (result i32) i32.const 0 else i32.const 1 end 18 编译程序 利⽤内建 Buffer 数据结构,⽐字符串拼接更⾼效 1. fn Instruction::to_wasm(self : Instruction, buffer : Buffer) -> Unit 2. fn Function::to_wasm(self Unit 3. fn Program::to_wasm(self : Program, buffer : Buffer) -> Unit 19 编译指令 利⽤内建 Buffer 数据结构,⽐拼接字符串更⾼效 1. fn Instruction::to_wasm(self : Instruction, buffer : Buffer) -> Unit { 2. match self { 3. 0x21 call $add 0x10 if else end 0x04 (vec�instructions�) 0x05 (vec�instructions�) 0x0B 21 多层编译 字符串 -> 单词流 -> (抽象语法树) -> WASM IR -> 运⾏ 1. enum Expression { 2. Number(Int) 3. Plus(Expression, Expression)0 码力 | 31 页 | 594.38 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十四课 案例:堆栈虚拟机	
List:: [Const(1)]) if (result i32) i32.const 0 else i32.const 1 end 18 编译程序 利⽤内建 Buffer 数据结构,⽐字符串拼接更⾼效 1. fn Instruction::to_wasm(self : Instruction, buffer : Buffer) -> Unit 2. fn Function::to_wasm(self Unit 3. fn Program::to_wasm(self : Program, buffer : Buffer) -> Unit 19 编译指令 利⽤内建 Buffer 数据结构,⽐拼接字符串更⾼效 1. fn Instruction::to_wasm(self : Instruction, buffer : Buffer) -> Unit { 2. match self { 3. 0x21 call $add 0x10 if else end 0x04 (vec�instructions�) 0x05 (vec�instructions�) 0x0B 21 多层编译 字符串 -> 单词流 -> (抽象语法树) -> WASM IR -> 运⾏ 1. enum Expression { 2. Number(Int) 3. Plus(Expression, Expression)0 码力 | 31 页 | 594.38 KB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final	语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) ] 通常可以通过有限状态⾃动机完成 ⼀般⽤领域特定语⾔定义后,由软件⾃动⽣成程序 算术表达式的词法定义 1. Number = %x30 / (%x31-39) *(%x30-39) 2. Plus = "+" 每⼀⾏对应⼀个匹配规则 "xxx" :匹配内容为xxx的字符串 a b :匹配规则a,成功后匹配规则b a / b :匹配规则a,匹配失败则匹配规则b *a :重复匹配规则a,可匹配0或多次 %x30 :UTF编码⼗六进制表示为30的字符( "0" ) .many() 5. 6. fn init { 7. debug(tokens.parse("-10123-+-523 103 ( 5) ) ")) 8. } 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression0 码力 | 25 页 | 400.29 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final	语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) ] 通常可以通过有限状态⾃动机完成 ⼀般⽤领域特定语⾔定义后,由软件⾃动⽣成程序 算术表达式的词法定义 1. Number = %x30 / (%x31-39) *(%x30-39) 2. Plus = "+" 每⼀⾏对应⼀个匹配规则 "xxx" :匹配内容为xxx的字符串 a b :匹配规则a,成功后匹配规则b a / b :匹配规则a,匹配失败则匹配规则b *a :重复匹配规则a,可匹配0或多次 %x30 :UTF编码⼗六进制表示为30的字符( "0" ) .many() 5. 6. fn init { 7. debug(tokens.parse("-10123-+-523 103 ( 5) ) ")) 8. } 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression0 码力 | 25 页 | 400.29 KB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数	
Empty) 10. NonEmpty(top, rest) => (Some(top), rest) 11. } 12. } 事实上,⽉兔中的列表就是⼀个堆栈 6 字符串堆栈 除了存储整数,我们也会希望存储字符串 1. enum StringStack { 2. Empty 3. NonEmpty(String, StringStack) 4. } 5. fn StringStack::empty()0 码力 | 27 页 | 2.56 MB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数	
Empty) 10. NonEmpty(top, rest) => (Some(top), rest) 11. } 12. } 事实上,⽉兔中的列表就是⼀个堆栈 6 字符串堆栈 除了存储整数,我们也会希望存储字符串 1. enum StringStack { 2. Empty 3. NonEmpty(String, StringStack) 4. } 5. fn StringStack::empty()0 码力 | 27 页 | 2.56 MB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型	option_int { 3. None => default 4. Some(value) => value 5. } 6. } 10 模式匹配 模式匹配可以匹配值(逻辑值、数字、字符、字符串)或者构造器 1. fn is_zero(i: Int) -> Bool { 2. match i { 3. 0 => true 4. 1 | 2 | 3 => false 50 码力 | 26 页 | 435.86 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型	option_int { 3. None => default 4. Some(value) => value 5. } 6. } 10 模式匹配 模式匹配可以匹配值(逻辑值、数字、字符、字符串)或者构造器 1. fn is_zero(i: Int) -> Bool { 2. match i { 3. 0 => true 4. 1 | 2 | 3 => false 50 码力 | 26 页 | 435.86 KB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第七课 命令式编程:命令,可变数据结构,循环	我们可以将 square 与 x 直接⽤对应的值替换⽽不改变结果 1. let z: Int = { 2 * 2 } // 4 引⽤透明性可以易于理解 3 命令 函数 print 允许我们输出⼀个字符串,例如 print("hello moonbit") ⽉兔中可以通过 init 代码块来定义初始化指令 可以简单理解为程序主⼊⼝ 1. fn init { 2. println("hello0 码力 | 23 页 | 780.46 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第七课 命令式编程:命令,可变数据结构,循环	我们可以将 square 与 x 直接⽤对应的值替换⽽不改变结果 1. let z: Int = { 2 * 2 } // 4 引⽤透明性可以易于理解 3 命令 函数 print 允许我们输出⼀个字符串,例如 print("hello moonbit") ⽉兔中可以通过 init 代码块来定义初始化指令 可以简单理解为程序主⼊⼝ 1. fn init { 2. println("hello0 码力 | 23 页 | 780.46 KB | 1 年前3
 05-MoonBit 编程语言(WASM 技术)服务端应用展望以及对Kubernetes生态的影响0.1 二次开发 特化SI 高级语言代码 WASI 0.2 标准化SI 关注点分离(3) 高级语言内 IDL 适配 Compone nt Model WAI 高级语言代码 FFI (原始 内存) WASM 运行时 WebIDL 其他 WASM 模块 MoonBit 语言运用封装 / OTT 思路 在 WASM 层之上力求解决 WASM 的挑战 https://landscape0 码力 | 30 页 | 3.41 MB | 9 月前3 05-MoonBit 编程语言(WASM 技术)服务端应用展望以及对Kubernetes生态的影响0.1 二次开发 特化SI 高级语言代码 WASI 0.2 标准化SI 关注点分离(3) 高级语言内 IDL 适配 Compone nt Model WAI 高级语言代码 FFI (原始 内存) WASM 运行时 WebIDL 其他 WASM 模块 MoonBit 语言运用封装 / OTT 思路 在 WASM 层之上力求解决 WASM 的挑战 https://landscape0 码力 | 30 页 | 3.41 MB | 9 月前3
 MoonBit月兔编程语言 现代编程思想 第十课 哈希表与闭包	
function 将任意⻓度的数据映射到某⼀固定⻓度的数据 在⽉兔的 Hash 接⼝中,数据被映射到整数范围内 trait Hash { hash(Self) -> Int } "这是⼀个⾮常⾮常⻓的字符串".hash() == -900478401 哈希表 利⽤哈希函数,将数据映射到数组索引中,进⾏快速的添加、查询、修改 1. // 对于 a: Array[(Key, Value)], key:0 码力 | 27 页 | 448.83 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十课 哈希表与闭包	
function 将任意⻓度的数据映射到某⼀固定⻓度的数据 在⽉兔的 Hash 接⼝中,数据被映射到整数范围内 trait Hash { hash(Self) -> Int } "这是⼀个⾮常⾮常⻓的字符串".hash() == -900478401 哈希表 利⽤哈希函数,将数据映射到数组索引中,进⾏快速的添加、查询、修改 1. // 对于 a: Array[(Key, Value)], key:0 码力 | 27 页 | 448.83 KB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归	因为 2 不是列表 Cons(1, Cons(Nil, Nil)) 因为混杂不同类型的数据 17 列表类型 列表亦是泛型类型: List[<类型>] 整型的列表类型为 List[Int] 字符串的列表类型为 List[String] 浮点数的列表类型为 List[Double] 18 模式匹配 我们可以通过模式匹配来分情况查看列表的内部结构 match <表达式> { <模式1>0 码力 | 42 页 | 587.59 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归	因为 2 不是列表 Cons(1, Cons(Nil, Nil)) 因为混杂不同类型的数据 17 列表类型 列表亦是泛型类型: List[<类型>] 整型的列表类型为 List[Int] 字符串的列表类型为 List[String] 浮点数的列表类型为 List[Double] 18 模式匹配 我们可以通过模式匹配来分情况查看列表的内部结构 match <表达式> { <模式1>0 码力 | 42 页 | 587.59 KB | 1 年前3
共 9 条
- 1













