李欣宜 扩展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 提供语法和语义的语言 不仅仅是工具, 还是思维方式 “语言只是工具”是现代社会最为荒谬的说法之一。 即便存在海量的常见任务,他们在部分语言里很容 人们不得不成规模地重复工作,或是任由冗余在codebase里猖獗; 抛弃更深远的抽象和语义,最终代码的编写成为了让人烦恼的苦力。 Python是有极限的!我不写Python了! 摆 脱 编 程 语 言 给 你 的 限 制 ? 我们不继续谈语言和思维的问题了,也不谈一些高级的特性是多么 make sense却没有支持。 就说Python。Python是有极限的,只从语义语法上讲。 和性能、GIL相关的问题我们放在一边。0 码力 | 39 页 | 3.69 MB | 1 年前3
4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarmend *抽象指令 (没有实际指令) Julia“生成函数” Python 字节码 JuVM虚拟栈机 (具体指令集) 抽象机器 (只规定语义) JuVM栈机指令 Python JIT 函数包装 Julia AST/CodeInfo (一个)实例化/后端 代码生成 PyCall.jl 自动得到 运行时处理技巧 抽象解释 抽象机器 抽象Intrinsics 抽象解释 抽象解释 抽象解释 抽象解释 Instructions for Julia Back End Instructions for Julia Back End JuVM: An implementation of our AM Machine Runner: 从AM到VM Julia Code Generation Julia Type Level Encoding 和Python不一样, Julia在运行时不能随意地eval。0 码力 | 30 页 | 8.04 MB | 1 年前3
3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 语言决定思维模型 在 实 际 业 务 中 处 理 数 据 � Python 语言决定思维模型 语言中的语法和语义, 决定了 它真实的表达力。 大多数语言都不是“万金油” 的,这是客观事实。 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 只对源代码Loader 重写get_data方法 调用父get_data方法, 拿到源代码 moshmosh.extension. perform_extension 源码变换 扩展的语法和语义 并非naïve的,不卫生的 源码变换; 其作用是对 AST实现一层quote moshmosh/extension_register.py (只有45行) 科普: Python Import机制是怎样的?0 码力 | 43 页 | 10.71 MB | 1 年前3
理解Python中的AST 何翔宇 transform A transform B bytecode emit source code: ⽂文本形式的 Python 源码 parser tree: 保留留具体语法信息的树 AST: 对语法的⾼高度抽象,不不会保留留细节 CFG: 记录着程序流程的有向图 bytecode: 能够被 Python 解释器器使⽤用的源码 Intro CPython’s Compiler - - 解析 - 根据词法分析的结果和语法⽂文件,⽣生成解析树 - 分词器器(Tokenize) - keyword - tokenize Intro CPython’s Compiler - transform and emit Transform: - 使⽤用 Python/ast.c 中的 PyAST_FromNode() 从解析树中读取 - 根据转换规则 Parser/Python AST Library 什什么是抽象语法树? 在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树 (Syntax tree),是源代码语法结构的⼀一种抽象表示。它以树状的形式表现编程语⾔言 的语法结构,树上的每个节点都表示源代码中的⼀一种结构。之所以说语法是“抽象” 的,是因为这⾥里里的语法并不不会表示出真实语法中出现的每个细节。 How to0 码力 | 39 页 | 6.95 MB | 1 年前3
Python 标准库参考指南 3.9.20 自定义字符串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.1.3 格式字符串语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.1.4 模板字符串 . 正则表达式操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.2.1 正则表达式语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.2.2 模块内容 . . . . . . . . . . . . . . 238 8.5 collections.abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 8.5.1 容器抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 2146 页 | 10.17 MB | 9 月前3
Python 标准库参考指南 3.9.20 1.2 自定义字符串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.1.3 格式字符串语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.1.4 模板字符串 . . . 正则表达式操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.2.1 正则表达式语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.2.2 模块内容 . . . . . . . . . . . . . . . . . 224 8.5 collections.abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 8.5.1 容器抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 2015 页 | 10.12 MB | 9 月前3
Python 标准库参考指南 3.10.15 自定义字符串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.1.3 格式字符串语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.1.4 模板字符串 . 正则表达式操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.2.1 正则表达式语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.2.2 模块内容 . abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 8.5.1 容器抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 8.5.2 多项集抽象基类 -- 详细描述0 码力 | 2207 页 | 10.45 MB | 9 月前3
Python 标准库参考指南 3.8.20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 8.4 collections.abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 8.5 heapq --- 堆队列算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 9 数字和数学模块 279 9.1 numbers --- 数字的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 9.2 math --- 数学函数 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149 20.8 xml.dom.pulldom --- 支持构建部分 DOM 树 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153 20.9 xml.sax --- 支持 SAX2 解析器 . . . . .0 码力 | 2052 页 | 9.74 MB | 9 月前3
Python 标准库参考指南 3.10.15 1.2 自定义字符串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.1.3 格式字符串语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6.1.4 模板字符串 . . . 正则表达式操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.2.1 正则表达式语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.2.2 模块内容 . . . collections.abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.5.1 容器抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 8.5.2 多项集抽象基类 -- 详细描述 .0 码力 | 2072 页 | 10.39 MB | 9 月前3
Python 标准库参考指南 3.8.20 容器数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 8.4 collections.abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 8.5 heapq --- 堆队列算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 9 数字和数学模块 261 9.1 numbers --- 数字的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 9.2 math --- 数学函数 . . DOM 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . 1073 20.8 xml.dom.pulldom --- 支持构建部分 DOM 树 . . . . . . . . . . . . . . . . . . . . . . . . . 1076 20.9 xml.sax --- 支持 SAX2 解析器 . . . . . . .0 码力 | 1927 页 | 9.69 MB | 9 月前3
共 114 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12













