5 刘知杭 静态类型的Python## 静态类型的Python PYTHON 30th Lyzh(刘知杭) ## 目录 CONTENTS ➤ 有关类型的概念 使用mypy对Python源代码进行静态分析 代数数据类型 拓展知识 ## 关于类型的一些基本概念 有类型不等于有类型系统 PYTHON 30th 动态语言类型化的必要性 ## 不久前的一个案例 ☀️ ☀️ ☁️ rl = filter(lambda x: 甚至Haskell程序员们能够在HGoogle中通过函数的类型签名来寻找函数。 程序效率:动态类型不利于编译优化 ## 渐进式类型系统 相对于静态语言的类型系统。 为动态语言添加类型系统需要考虑到过渡与历史包袱 一种叫做渐进式类型系统的东西完美的符合了这个应用场景 这种类型系统同时允许动态类型与静态类型的存在 声明类型系统、鸭子类型与结构类型系统 类型系统的分类——声明式类型系统与结构化类型系统 声明类型系统通过名字来检查类型 支持。尽管没有为注释指定任何含义,但始终存在一个隐式目标,即将它们用于类型提示。 该PEP旨在为类型注释提供标准语法,开放Python代码以简化静态分析和重构,潜在的运行时类型检查,以及(可能在某些情况下)利用类型信息生成代码。 在这些目标中,静态分析是最重要的。这包括对类型检查器(如mypy)的支持,以及提供可由IDE实现的代码重构操作。 虽然这些注释可以在运行时通过 __annotations__0 码力 | 42 页 | 6.87 MB | 2 年前3
通过SSA的解释执行窥探Golang编译之一角抽象语法树(带语义信息) 静态单赋值 目标代码 ## Golang 编译流程简介 源代码 语法解析,生成抽象语法树(Abstract Syntax Tree,AST),涉及的包: 抽象语法树 go/token 词法单元定义 go/scanner 词法扫描 抽象语法树(带语义信息) go/ast 抽象语法树定义 go/parser 语法解析 静态单赋值 目标代码 ## Golang Golang 编译流程简介 源代码 抽象语法树 抽象语法树(带语义信息) 静态单赋值 目标代码 $ 1 + 2 * 3 $ *ast.BinaryExpr (+) $ ^{*} $ ast.BasicLit 1 : INT *ast.BinaryExpr (*) $ ^{*} $ ast.BasicLit 2: INT * ast.BasicLit 3 : INT ## Golang ^{*} $ ast.BasicLit 40 : INT $ ^{*} $ ast.BasicLit 2: INT *ast.CallExpr $ ^{*} $ ast.CallExpr 静态单赋值 $ ^{*} $ ast.BasicLit "Hello, GoCN" $ ^{*} $ ast.Ident "answer" 目标代码 func main()0 码力 | 30 页 | 1.50 MB | 2 年前3
基于静态分析的Rust内存安全缺陷检测研究## 基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 复旦大学 报告日期:2022.11.25 ## 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 ## 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 ## Rust语言 ## 系统级安全编程语言 研究挑战:指针分析是NP-hard问题 准确性:应采用路径敏感的指针分析算法,避免过多误报 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ☐ 整体思路:基于编译过程中的生成的MIR进行静态分析 ■ 路径提取:控制流图=>生成树 别名分析:分析指针之间的关联关系 ■ 模式识别:根据预定义的缺陷模式检测指针漏洞 路径提取   2016年香港科技大学取得博士学位 过去10年一直以极高的热情从事静态分析技术的学术用研究 合作创办源伞科技,致力于推动静态分析技术在企业中的应用 ## 目录 代码质量管理是个大问题 静态分析+代码评审的实践 ## 生产质量是责任 ☐ 学习和强调,红线和惩罚,100%的测试 覆盖率,和事后复盘并不够 ☐ 有经验的程序员也会犯错 [Image](/uploads/documents/d/f/4/2/df4204d40f8d9990146651d100a36efb/p6_1.jpg) ## 自动化工具+流程才是未来 ☐ 静态分析工具:半智能的代码分析机器人 ☐ 静态分析辅助代码评审 ## Bug! Thx! Bug! ## 代码质量改进工具、流程落地难 □ 投入大 ☐ KPI不痛不痒 使用主体和责任主体不一致 ☐ 一步登天想要终极AI0 码力 | 39 页 | 6.88 MB | 2 年前3
3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查## 解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS >> 语法和语义扩展 >> JIT >> 静态类型  ## 语法和语义扩展 演示一小部分: 为何不最直接翻译成寄存器语义? 不懂的同学大概这样理解: 栈机就是Push Pop: “放到栈上两个值,做了一个二元运算,两个值被消耗,得到一个值放回栈上,栈上元素减1”。 寄存器机就是赋值赋值赋值赋值,我赋给你,你赋给他,push pop不占主导地位。可以模拟栈机。 栈机的Jump指令,导致翻译到寄存器语义不简单呐。 ## 为何不最直接翻译成寄存器语义? A: Jump B if true |Restrain JIT|2.74 -> 0.64|3.54 -> 0.59|3.14 -> 0.93|2.00 -> 0.03|2.60 -> 0.96| 如果还有时间,我们用静态类型来写一个简单的网页生成框架 一个用起来,没有学习曲线的框架。 很安全,因为没有程序员需要付出心智负担的工作。 ## THANK YOU ; instance.compile({retainLines: true, log: true}); instance.run(); ## www/static 存放一些静态资源文件。 ## 代码规范 ## 文件路径必须小写 很多时候是在 Windows 或者 Mac OS X 系统下开发项目,但一般都部署 Linux 系统下。 在 Windows 和 Mac 系统下,文件路径是不区分大小写的,而 里的逻辑复杂度,ThinkJS 提供了一层 Logic 专门用来处理数据校验和权限校验等相关操作。 详细信息请见扩展功能->数据校验。 ## 变量赋值和模版渲染 控制器里可以通过 assign 和 display 方法进行变量赋值和模版渲染,具体信息请见 这里。 ## 模型实例化 在控制器中可以通过 this.model 方法快速获得一个模型的实例。 export default0 码力 | 238 页 | 1.87 MB | 2 年前3
ThinkJS 2.2 中文文档进行编译,就可以稳定运行在 Node.js 的环境中了。 ## 支持 TypeScript TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,向这个语言添加了可选的静态类型,在大型项目里非常有用。 ThinkJS 2.1 开始支持了创建 TypeScript 类型的项目,并且开发时会自动编译、自动更新,无需手工编译等复杂的操作。具体请见这里。 ## 断点调试 in use, port:8360. http://www.thinkjs.org/doc/error.html#EADDRINUSE ## 丰富的路由机制 ThinkJS 支持正则路由、规则路由、静态路由等多种路由机制,并且可以基于模块来设置。可以让 URL 更加简洁的同时又不丢失性能。 ## 支持国际化和多主题 ThinkJS 使用很简单的方法就可以支持国际化和多主题等功能。 ## 与其他框架的对比 }); instance.compile({ retainLines: true, log: true }); instance.run(); ## www/static 存放一些静态资源文件。 ## 代码规范 ## 文件路径必须小写 很多时候是在 Windows 或者 Mac OS X 系统下开发项目,但一般都部署 Linux 系统下。 在 Windows 和 Mac 系统下,文件路径是不区分大小写的,而0 码力 | 277 页 | 3.61 MB | 2 年前3
Java 应用与开发 - 面向对象编程进阶/p1_2.jpg) ## 学习目标 1. 理解多态和虚方法调用的概念,掌握其用法 2. 掌握方法重载的方法 3. 掌握 static 属性、方法和初始化块的用法 4. 了解设计模式,掌握单例设计模式 5. 掌握 final 关键字的概念和使用方法 |大纲|多态性|方法重载|关键字 static|关键字 final| |---|---|---|---|---| |大纲||||| |多态性||||| “类成员” 或 “静态成员”,如 “类属性”、“类变量”、“类方法” 和 “静态方法” 等。 ## 关键字 static 在 Java 类中声明属性、方法和内部类时,可使用关键字 static 作为修饰符。 ▶ static 标记的属性或方法由整个类(所有实例)共享,如访问控制权限允许,可不必创建该类对象而直接用类名加“.”调用。 ▶ static 成员也称 “类成员” 或 “静态成员”,如 “类属性”、“类变量”、“类方法” “类属性”、“类变量”、“类方法” 和 “静态方法” 等。 ## static 属性和方法 ## static 属性 ▶ static 属性由其所在类(包括该类所有的实例)共享。 非 static 属性则必须依赖具体/特定的对象(实例)而存在。 ## ☑ static 方法 要在 static 方法中调用其所在类的非 static 成员,应首先创建一个该类的对象,通过该对象来访问其非 static0 码力 | 49 页 | 659.74 KB | 2 年前3
Yii 2.0 权威指南标签 $ 3
ThinkJS 3.0 中文文档
| | |--- index.js
| --- view //模板目录
| | --- index_index.html
| --- www
| | --- static //存放静态资源目录
| | |--- css
| | |--- img
| | |--- js
## 升级指南
本文档为 2.x 升级到 3.x 的文档,由于本次升级接口改动较大,所以无法平滑升级。本文档更多的是介绍接口变化指南。 think.app.listen 来启动服务。
服务启动完成时,触发 appReady 事件,其他地方可以通过 think.app.on("appReady") 监听。
☐ 创建的服务赋值给 think.app.server 对象。
服务启动后,会打印下面的日志:
[2017-07-02 13:36:40.646] [INFO] - Server running at http://127 来处理用户的请求:
meta 来处理一些通用的信息,如:设置请求的超时时间、是否发送 ThinkJS 版本号、是否发送处理的时间等。
resource 处理静态资源请求,静态资源都放在 www/static/ 下,如果命中当前请求是个静态资源,那么这个 middleware 处理完后提前结束,不再执行后面的 middleware。
trace 处理一些错误信息,开发环境下打印详细的错误信息,生产环境只是报一个通用的错误。
0 码力 |
129 页 |
2.12 MB
| 2 年前
3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













