 李欣宜 扩展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 表达式和语句区分,表达式内部不能包含语句 4. 没有语法宏,代码操作不够自动 5. 没有variant类型(只能靠一大堆抽象类和继承去workaround) 6. 对数据类型的方法不能扩展, 或者进行扩展是初级的,没有基于 类型的多态 那么告辞? 搭嘎!阔托瓦鲁! 摆 脱 编 程 语 言 给 你 的 限 制 Python有一堆好东西: 1. Python有良好的启动速度(看向Julia) 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 启扩展 3. -extension名 (extension参数)关 闭扩展 4. 可以自定义扩展并 注册 5. 在这套系统下,有 很多简单的自定义 扩展可供练手 任何在不使用该系统时拥有的功能(PYC二进制文 件发布,C扩展等等),在使用该系统后得以保持,拥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 表达式和语句区分,表达式内部不能包含语句 4. 没有语法宏,代码操作不够自动 5. 没有variant类型(只能靠一大堆抽象类和继承去workaround) 6. 对数据类型的方法不能扩展, 或者进行扩展是初级的,没有基于 类型的多态 那么告辞? 搭嘎!阔托瓦鲁! 摆 脱 编 程 语 言 给 你 的 限 制 Python有一堆好东西: 1. Python有良好的启动速度(看向Julia) 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 启扩展 3. -extension名 (extension参数)关 闭扩展 4. 可以自定义扩展并 注册 5. 在这套系统下,有 很多简单的自定义 扩展可供练手 任何在不使用该系统时拥有的功能(PYC二进制文 件发布,C扩展等等),在使用该系统后得以保持,拥0 码力 | 39 页 | 3.69 MB | 1 年前3
 4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarmthreading 避开解释器开销: for-loop 避免嵌套函数开销: native function pointer, inline “All Add 2” Python version: See restrain_jit/test/test_functional.py “All Add 2” JIT version: 局部函数无开销 “All Add 2” JIT using SIMD: advanced tricks in the Julia back end *抽象指令 (没有实际指令) Julia“生成函数” Python 字节码 JuVM虚拟栈机 (具体指令集) 抽象机器 (只规定语义) JuVM栈机指令 Python JIT 函数包装 Julia AST/CodeInfo (一个)实例化/后端 代码生成 PyCall.jl 自动得到 运行时处理技巧 Julia是一门multi-stage语言, 能够优化动态类型情形(e.g., 对一个符号做多次不同类型的赋值)。 JIT需要代码生成, 但运行时检查代码生成与否, 有一定的开销。 而Julia的“生成函数”能够在生成之后, 重新触发编译, 消除所有检查自身是否生成的代码。 4 参与开发 1. Instrinsics 后端实现: py_add, py_not, etc… 2. 对虚拟指令集的优化passes0 码力 | 30 页 | 8.04 MB | 1 年前3 4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarmthreading 避开解释器开销: for-loop 避免嵌套函数开销: native function pointer, inline “All Add 2” Python version: See restrain_jit/test/test_functional.py “All Add 2” JIT version: 局部函数无开销 “All Add 2” JIT using SIMD: advanced tricks in the Julia back end *抽象指令 (没有实际指令) Julia“生成函数” Python 字节码 JuVM虚拟栈机 (具体指令集) 抽象机器 (只规定语义) JuVM栈机指令 Python JIT 函数包装 Julia AST/CodeInfo (一个)实例化/后端 代码生成 PyCall.jl 自动得到 运行时处理技巧 Julia是一门multi-stage语言, 能够优化动态类型情形(e.g., 对一个符号做多次不同类型的赋值)。 JIT需要代码生成, 但运行时检查代码生成与否, 有一定的开销。 而Julia的“生成函数”能够在生成之后, 重新触发编译, 消除所有检查自身是否生成的代码。 4 参与开发 1. Instrinsics 后端实现: py_add, py_not, etc… 2. 对虚拟指令集的优化passes0 码力 | 30 页 | 8.04 MB | 1 年前3
 4_杨柳_基于Python构建高稳定可扩展的自动化测试集群0 码力 | 62 页 | 25.29 MB | 1 年前3 4_杨柳_基于Python构建高稳定可扩展的自动化测试集群0 码力 | 62 页 | 25.29 MB | 1 年前3
 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 启扩展 3. -extension名 (extension参数)关 闭扩展 4. 可以自定义扩展并 注册 5. 在这套系统下,有 很多简单的自定义 扩展可供练手 任何在不使用该系统时拥有的功能(PYC二进制文件 任何在不使用该系统时拥有的功能(PYC二进制文件 发布,C扩展等等),在使用该系统后得以保持,拥有 工业级的可靠性和稳定性 6 如何工作? Python Import 忽略Cache Loader, 只对源代码Loader 重写get_data方法 调用父get_data方法, 拿到源代码 moshmosh.extension. perform_extension 源码变换 扩展的语法和语义 并非naïve的,不卫生的0 码力 | 43 页 | 10.71 MB | 1 年前3 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 启扩展 3. -extension名 (extension参数)关 闭扩展 4. 可以自定义扩展并 注册 5. 在这套系统下,有 很多简单的自定义 扩展可供练手 任何在不使用该系统时拥有的功能(PYC二进制文件 任何在不使用该系统时拥有的功能(PYC二进制文件 发布,C扩展等等),在使用该系统后得以保持,拥有 工业级的可靠性和稳定性 6 如何工作? Python Import 忽略Cache Loader, 只对源代码Loader 重写get_data方法 调用父get_data方法, 拿到源代码 moshmosh.extension. perform_extension 源码变换 扩展的语法和语义 并非naïve的,不卫生的0 码力 | 43 页 | 10.71 MB | 1 年前3
 Flask入门教程Flask(__name__) 接下来,我们要注册一个处理函数,这个函数是处理某个请求的处理函数,Flask 官方把它叫做视图函数(view funciton),你可以理解为“请求处理函数”。 所谓的“注册”,就是给这个函数戴上一个装饰器帽子。我们使用 app.route() 装 饰器来为这个函数绑定对应的 URL,当用户在浏览器访问这个 URL 的时候,就会 触发这个函数,获取返回值,并把返回值显示到浏览器窗口: 当用户在浏览器地址栏访问这个地址,在这里即 http://localhost:5000/ 2. 服务器解析请求,发现请求 URL 匹配的 URL 规则是 / ,因此调用对应的处 理函数 hello() 3. 获取 hello() 函数的返回值,处理后返回给客户端(浏览器) 4. 浏览器接受响应,将其显示在窗口上 第 2 章:Hello, Flask! 16 提示 在 Web 程序的语境下,虽 的值设为 development ,以便开启调试模式: FLASK_ENV=development 实验时间 在这个小节,我们可以通过做一些实验,来扩展和加深对本节内容的理解。 修改视图函数返回值 首先,你可以自由修改视图函数的返回值,比如: @app.route('/') def hello(): return u'欢迎来到我的 Watchlist!' 返回值作为响应的主体,默认会被浏览器作为0 码力 | 127 页 | 7.62 MB | 1 年前3 Flask入门教程Flask(__name__) 接下来,我们要注册一个处理函数,这个函数是处理某个请求的处理函数,Flask 官方把它叫做视图函数(view funciton),你可以理解为“请求处理函数”。 所谓的“注册”,就是给这个函数戴上一个装饰器帽子。我们使用 app.route() 装 饰器来为这个函数绑定对应的 URL,当用户在浏览器访问这个 URL 的时候,就会 触发这个函数,获取返回值,并把返回值显示到浏览器窗口: 当用户在浏览器地址栏访问这个地址,在这里即 http://localhost:5000/ 2. 服务器解析请求,发现请求 URL 匹配的 URL 规则是 / ,因此调用对应的处 理函数 hello() 3. 获取 hello() 函数的返回值,处理后返回给客户端(浏览器) 4. 浏览器接受响应,将其显示在窗口上 第 2 章:Hello, Flask! 16 提示 在 Web 程序的语境下,虽 的值设为 development ,以便开启调试模式: FLASK_ENV=development 实验时间 在这个小节,我们可以通过做一些实验,来扩展和加深对本节内容的理解。 修改视图函数返回值 首先,你可以自由修改视图函数的返回值,比如: @app.route('/') def hello(): return u'欢迎来到我的 Watchlist!' 返回值作为响应的主体,默认会被浏览器作为0 码力 | 127 页 | 7.62 MB | 1 年前3
 Python 标准库参考指南 3.10.15 可用性注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 内置函数 5 3 内置常量 27 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 类与类实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.13.3 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.13 模板字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.1.5 辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.2 re ---0 码力 | 2072 页 | 10.39 MB | 9 月前3 Python 标准库参考指南 3.10.15 可用性注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 内置函数 5 3 内置常量 27 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 类与类实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.13.3 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.13 模板字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.1.5 辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.2 re ---0 码力 | 2072 页 | 10.39 MB | 9 月前3
 Python 标准库参考指南 3.8.20 可用性注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 内置函数 5 3 内置常量 25 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.8 rlcompleter --- GNU readline 的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7 二进制数据服务 139 i 7.1 struct --- 将字节串解读为打包的二进制数据 基本日期和时间类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.2 calendar --- 日历相关函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.3 collections --- 容器数据类型0 码力 | 1927 页 | 9.69 MB | 9 月前3 Python 标准库参考指南 3.8.20 可用性注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 内置函数 5 3 内置常量 25 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.8 rlcompleter --- GNU readline 的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7 二进制数据服务 139 i 7.1 struct --- 将字节串解读为打包的二进制数据 基本日期和时间类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.2 calendar --- 日历相关函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.3 collections --- 容器数据类型0 码力 | 1927 页 | 9.69 MB | 9 月前3
 Python 标准库参考指南 3.8.20 可用性注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 内置函数 5 3 内置常量 25 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.8 rlcompleter --- GNU readline 的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7 二进制数据服务 139 i 7.1 struct --- 将字节串解读为打包的二进制数据 基本日期和时间类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.2 calendar --- 日历相关函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.3 collections --- 容器数据类型0 码力 | 1927 页 | 9.69 MB | 9 月前3 Python 标准库参考指南 3.8.20 可用性注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 内置函数 5 3 内置常量 25 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.8 rlcompleter --- GNU readline 的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7 二进制数据服务 139 i 7.1 struct --- 将字节串解读为打包的二进制数据 基本日期和时间类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.2 calendar --- 日历相关函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.3 collections --- 容器数据类型0 码力 | 1927 页 | 9.69 MB | 9 月前3
 Python 标准库参考指南 3.10.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 内置函数 5 3 内置常量 29 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 类与类实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.13.3 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6.1.5 辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.2 re0 码力 | 2207 页 | 10.45 MB | 9 月前3 Python 标准库参考指南 3.10.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 内置函数 5 3 内置常量 29 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 类与类实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.13.3 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6.1.5 辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.2 re0 码力 | 2207 页 | 10.45 MB | 9 月前3
 Python 标准库参考指南 3.13 1.2 移动平台 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 内置函数 7 3 内置常量 33 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 类与类实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.14.3 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.14 模板字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.1.5 辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6.2 re ---0 码力 | 2246 页 | 11.74 MB | 9 月前3 Python 标准库参考指南 3.13 1.2 移动平台 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 内置函数 7 3 内置常量 33 3.1 由 site 模块添加的常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 类与类实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.14.3 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.14 模板字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.1.5 辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6.2 re ---0 码力 | 2246 页 | 11.74 MB | 9 月前3
共 174 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18














 
 