 李欣宜 扩展Python的语法和语义Python的语法扩展系统 Moshmosh Thautwarm&李欣宜 The awareness of low-level implementation details brings the appreciation of an abstraction and the intuitive explanation for it. — Oleg Kiselyov Kiselyov 目录 CONTENTS 提供语法和语义的语言不仅仅是工具, 还是思维方式 表达能力的极限,由内破除, 还是从外破除? Moshmosh: 我的Python不可能这么甜美清新 下班时在干什么?有没有空?可以来contribute吗? 1 提供语法和语义的语言 不仅仅是工具, 还是思维方式 “语言只是工具”是现代社会最为荒谬的说法之一。 即便存在海量的常见任务,他们在部分语言里很容 就说Python。Python是有极限的,只从语义语法上讲。 和性能、GIL相关的问题我们放在一边。 1. 没有多行lambda 2. 作用域管理规则/name shadow(let-binding) 3. 表达式和语句区分,表达式内部不能包含语句 4. 没有语法宏,代码操作不够自动 5. 没有variant类型(只能靠一大堆抽象类和继承去workaround) 6. 对数据类型的方法不能扩展, 或者进行扩展是初级的,没有基于0 码力 | 39 页 | 3.69 MB | 1 年前3 李欣宜 扩展Python的语法和语义Python的语法扩展系统 Moshmosh Thautwarm&李欣宜 The awareness of low-level implementation details brings the appreciation of an abstraction and the intuitive explanation for it. — Oleg Kiselyov Kiselyov 目录 CONTENTS 提供语法和语义的语言不仅仅是工具, 还是思维方式 表达能力的极限,由内破除, 还是从外破除? Moshmosh: 我的Python不可能这么甜美清新 下班时在干什么?有没有空?可以来contribute吗? 1 提供语法和语义的语言 不仅仅是工具, 还是思维方式 “语言只是工具”是现代社会最为荒谬的说法之一。 即便存在海量的常见任务,他们在部分语言里很容 就说Python。Python是有极限的,只从语义语法上讲。 和性能、GIL相关的问题我们放在一边。 1. 没有多行lambda 2. 作用域管理规则/name shadow(let-binding) 3. 表达式和语句区分,表达式内部不能包含语句 4. 没有语法宏,代码操作不够自动 5. 没有variant类型(只能靠一大堆抽象类和继承去workaround) 6. 对数据类型的方法不能扩展, 或者进行扩展是初级的,没有基于0 码力 | 39 页 | 3.69 MB | 1 年前3
 4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarm0 码力 | 30 页 | 8.04 MB | 1 年前3 4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarm0 码力 | 30 页 | 8.04 MB | 1 年前3
 Go基础语法宝典会产生一个错误:声明了 i 但未使 用。 常量 所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。在Go程序中,常量 可定义为数值、布尔值或字符串等类型。 它的语法如下: 下面是一些常量声明的例子: Go 常量和一般程序语言不同的是,可以指定相当多的小数位数(例如200位),若指定给 float32 自动缩 短为 32bit ,指定给 float64 自动缩短为 bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:d,e,f,g,h bSlice = aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g Array_a := [10]byte{'a' com/0voice/Introduction-to-Golang 流程控制 Go中流程控制分三大类:条件判断,循环控制和无条件跳转。 if if 也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件 事。 Go里面 if 条件判断语句中不需要括号,如下代码所示 Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条0 码力 | 47 页 | 1020.34 KB | 1 年前3 Go基础语法宝典会产生一个错误:声明了 i 但未使 用。 常量 所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。在Go程序中,常量 可定义为数值、布尔值或字符串等类型。 它的语法如下: 下面是一些常量声明的例子: Go 常量和一般程序语言不同的是,可以指定相当多的小数位数(例如200位),若指定给 float32 自动缩 短为 32bit ,指定给 float64 自动缩短为 bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:d,e,f,g,h bSlice = aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g Array_a := [10]byte{'a' com/0voice/Introduction-to-Golang 流程控制 Go中流程控制分三大类:条件判断,循环控制和无条件跳转。 if if 也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件 事。 Go里面 if 条件判断语句中不需要括号,如下代码所示 Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条0 码力 | 47 页 | 1020.34 KB | 1 年前3
 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 Python 语言决定思维模型 语言中的语法和语义, 决定了 它真实的表达力。 大多数语言都不是“万金油” 的,这是客观事实。 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 启扩展 3. -extension名 (extension参数)关 (extension参数)关 闭扩展 4. 可以自定义扩展并 注册 5. 在这套系统下,有 很多简单的自定义 扩展可供练手 任何在不使用该系统时拥有的功能(PYC二进制文件 发布,C扩展等等),在使用该系统后得以保持,拥有 工业级的可靠性和稳定性 6 如何工作? Python Import 忽略Cache Loader, 只对源代码Loader 重写get_data方法 调用父get_data方法,0 码力 | 43 页 | 10.71 MB | 1 年前3 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 Python 语言决定思维模型 语言中的语法和语义, 决定了 它真实的表达力。 大多数语言都不是“万金油” 的,这是客观事实。 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 启扩展 3. -extension名 (extension参数)关 (extension参数)关 闭扩展 4. 可以自定义扩展并 注册 5. 在这套系统下,有 很多简单的自定义 扩展可供练手 任何在不使用该系统时拥有的功能(PYC二进制文件 发布,C扩展等等),在使用该系统后得以保持,拥有 工业级的可靠性和稳定性 6 如何工作? Python Import 忽略Cache Loader, 只对源代码Loader 重写get_data方法 调用父get_data方法,0 码力 | 43 页 | 10.71 MB | 1 年前3
 06 PHP基本语法 — 条件、循环、函数  杨亮 《PHP语⾔程序设计》PHP基本语法 —条件、循环、函数 杨亮 程序的基本结构 输⼊入 输出 程序 运算(+ - x / & | ! …) 逻辑(条件、循环、递归) 辅助(变量、数组、函数) ⼩小测验 ⽤用你熟悉的程序找出 1~1000中的所有质数 我们直接看代码好了 10 码力 | 25 页 | 1.30 MB | 1 年前3 06 PHP基本语法 — 条件、循环、函数  杨亮 《PHP语⾔程序设计》PHP基本语法 —条件、循环、函数 杨亮 程序的基本结构 输⼊入 输出 程序 运算(+ - x / & | ! …) 逻辑(条件、循环、递归) 辅助(变量、数组、函数) ⼩小测验 ⽤用你熟悉的程序找出 1~1000中的所有质数 我们直接看代码好了 10 码力 | 25 页 | 1.30 MB | 1 年前3 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台基于 Golang 构建⾼可扩展的云原⽣ PaaS 平台 刘浩杨 端点 技术专家 个⼈简介 - 18年加⼊端点,现任微服务和监控团队负责⼈ - 端点开源 PaaS Erda 的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 release_id: ${release:id} pipeline.yml 定义 - 屏蔽掉流⽔线定义的复杂度 - 丰富的通⽤Action,开箱即⽤ - Action 扩展规范,任意扩展 Workload 管理 - Create - Update - Delete - Describe - Scale - Restart services: trade-server: 接⼝设计、以及拦截器 • 提供快速构建模块的代码⽣成⼯具 Erda Infra 如何设计 Erda Infra 有什么不同 - 不是重复造轮⼦ - 不仅是web框架 - 不仅是微服务框架 - 为扩展⽽⽣ - 以模块化的开发为核⼼ VS 模块化开发原则 - ⾯向接⼝进⾏开发,⽽不是⾯向实现 - 模块拆分的粒度尽可能⼩ - 模块内聚,模块间松耦合 - 模块间的引⽤使⽤DI⽽不是直接依赖实现包0 码力 | 40 页 | 8.60 MB | 1 年前3 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台基于 Golang 构建⾼可扩展的云原⽣ PaaS 平台 刘浩杨 端点 技术专家 个⼈简介 - 18年加⼊端点,现任微服务和监控团队负责⼈ - 端点开源 PaaS Erda 的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 release_id: ${release:id} pipeline.yml 定义 - 屏蔽掉流⽔线定义的复杂度 - 丰富的通⽤Action,开箱即⽤ - Action 扩展规范,任意扩展 Workload 管理 - Create - Update - Delete - Describe - Scale - Restart services: trade-server: 接⼝设计、以及拦截器 • 提供快速构建模块的代码⽣成⼯具 Erda Infra 如何设计 Erda Infra 有什么不同 - 不是重复造轮⼦ - 不仅是web框架 - 不仅是微服务框架 - 为扩展⽽⽣ - 以模块化的开发为核⼼ VS 模块化开发原则 - ⾯向接⼝进⾏开发,⽽不是⾯向实现 - 模块拆分的粒度尽可能⼩ - 模块内聚,模块间松耦合 - 模块间的引⽤使⽤DI⽽不是直接依赖实现包0 码力 | 40 页 | 8.60 MB | 1 年前3 05 PHP基本语法 - 变量、数组、字符串 杨亮 《PHP语⾔程序设计》0 码力 | 25 页 | 587.00 KB | 1 年前3 05 PHP基本语法 - 变量、数组、字符串 杨亮 《PHP语⾔程序设计》0 码力 | 25 页 | 587.00 KB | 1 年前3 4_杨柳_基于Python构建高稳定可扩展的自动化测试集群0 码力 | 62 页 | 25.29 MB | 1 年前3 4_杨柳_基于Python构建高稳定可扩展的自动化测试集群0 码力 | 62 页 | 25.29 MB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final现代编程思想 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)) Value(5)), Value(7)), Value(2)) 计算最终结果:21 语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) ( 5) ) ")) 8. } 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression = Value / "(" expression ")" 2. expression =/ expression "+"0 码力 | 25 页 | 400.29 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final现代编程思想 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)) Value(5)), Value(7)), Value(2)) 计算最终结果:21 语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) ( 5) ) ")) 8. } 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression = Value / "(" expression ")" 2. expression =/ expression "+"0 码力 | 25 页 | 400.29 KB | 1 年前3 Python 3.12 正则表达式 HOWTO 标记为字母的所有字符。通过在编译正则表达式时提供 re.ASCII 标志,可以在 str 表达式中使用较为狭 窄的 \w 定义。 以下为特殊序列的不完全列表。有关 Unicode 字符串正则表达式的序列和扩展类定义的完整列表,参见 标准库参考中 正则表达式语法的最后一部分。通常,Unicode 版本的字符类会匹配 Unicode 数据库的相应 类别中的任何字符。 \d 匹配任何十进制数字,等价于字符类 [0-9] 。 \D 参数,用于启用各种特殊功能和语法变体。我们稍后将介绍可用 的设置,但现在只需一个例子 >>> p = re.compile('ab*', re.IGNORECASE) 正则作为字符串传递给 re.compile() 。正则被处理为字符串,因为正则表达式不是核心 Python 语言的 一部分,并且没有创建用于表达它们的特殊语法。(有些应用程序根本不需要正则,因此不需要通过包含 它们来扩展语言规范。)相反,re 它们来扩展语言规范。)相反,re 模块只是 Python 附带的 C 扩展模块,就类似于 socket 或 zlib 模块。 将正则放在字符串中可以使 Python 语言更简单,但有一个缺点是下一节的主题。 3.2 反斜杠灾难 如前所述,正则表达式使用反斜杠字符 ('\') 来表示特殊形式或允许使用特殊字符而不调用它们的特殊 含义。这与 Python 在字符串文字中用于相同目的的相同字符的使用相冲突。 假设你想要编写一个与字符串0 码力 | 17 页 | 404.43 KB | 11 月前3 Python 3.12 正则表达式 HOWTO 标记为字母的所有字符。通过在编译正则表达式时提供 re.ASCII 标志,可以在 str 表达式中使用较为狭 窄的 \w 定义。 以下为特殊序列的不完全列表。有关 Unicode 字符串正则表达式的序列和扩展类定义的完整列表,参见 标准库参考中 正则表达式语法的最后一部分。通常,Unicode 版本的字符类会匹配 Unicode 数据库的相应 类别中的任何字符。 \d 匹配任何十进制数字,等价于字符类 [0-9] 。 \D 参数,用于启用各种特殊功能和语法变体。我们稍后将介绍可用 的设置,但现在只需一个例子 >>> p = re.compile('ab*', re.IGNORECASE) 正则作为字符串传递给 re.compile() 。正则被处理为字符串,因为正则表达式不是核心 Python 语言的 一部分,并且没有创建用于表达它们的特殊语法。(有些应用程序根本不需要正则,因此不需要通过包含 它们来扩展语言规范。)相反,re 它们来扩展语言规范。)相反,re 模块只是 Python 附带的 C 扩展模块,就类似于 socket 或 zlib 模块。 将正则放在字符串中可以使 Python 语言更简单,但有一个缺点是下一节的主题。 3.2 反斜杠灾难 如前所述,正则表达式使用反斜杠字符 ('\') 来表示特殊形式或允许使用特殊字符而不调用它们的特殊 含义。这与 Python 在字符串文字中用于相同目的的相同字符的使用相冲突。 假设你想要编写一个与字符串0 码力 | 17 页 | 404.43 KB | 11 月前3
共 426 条
- 1
- 2
- 3
- 4
- 5
- 6
- 43














 
  
 