5 刘知杭 静态类型的Python## 静态类型的Python PYTHON 30th Lyzh(刘知杭) ## 目录 CONTENTS ➤ 有关类型的概念 使用mypy对Python源代码进行静态分析 代数数据类型 拓展知识 ## 关于类型的一些基本概念 有类型不等于有类型系统 PYTHON 30th 动态语言类型化的必要性 ## 不久前的一个案例 ☀️ ☀️ ☁️ rl = filter(lambda x: 类型系统是什么? 类型系统(type system)是一种编译期(Compile-time)的类型推导检查规则。 类型系统(type system)的基本目标是防止程序在运行时发生类型错误。当且仅当语言运行时不存在任何形式的类型错误,那么它就是sound的。soundness是类型系统研究的重要目标。 在计算机科学中,形式化方法(Formal method)是一种数学方法。旨在能像其它工程学科一 甚至Haskell程序员们能够在HGoogle中通过函数的类型签名来寻找函数。 程序效率:动态类型不利于编译优化 ## 渐进式类型系统 相对于静态语言的类型系统。 为动态语言添加类型系统需要考虑到过渡与历史包袱 一种叫做渐进式类型系统的东西完美的符合了这个应用场景 这种类型系统同时允许动态类型与静态类型的存在 声明类型系统、鸭子类型与结构类型系统 类型系统的分类——声明式类型系统与结构化类型系统 声明类型系统通过名字来检查类型0 码力 | 42 页 | 6.87 MB | 2 年前3
基于静态分析的Rust内存安全缺陷检测研究## 基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 复旦大学 报告日期:2022.11.25 ## 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 ## 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 ## Rust语言 ## 系统级安全编程语言 ■ 方法二:允许使用裸指针 ## Unsafe Rust □ Unsafe Rust功能: 解引用裸指针 ■ 调用unsafe函数 ■ 调用FFI(其它语言接口) ☐ 使用条件:必须标注unsafe let mut num = 5; let r1 = &num as *const i32; unsafe { println("r1 研究挑战:指针分析是NP-hard问题 准确性:应采用路径敏感的指针分析算法,避免过多误报 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ☐ 整体思路:基于编译过程中的生成的MIR进行静态分析 ■ 路径提取:控制流图=>生成树 别名分析:分析指针之间的关联关系 ■ 模式识别:根据预定义的缺陷模式检测指针漏洞 路径提取 ? 渴望成为质量、效率和简单的冠军。 • 有自己的观点。 • 重视反省和自我检讨。 ## Go语言应该是这样的 · 易于阅读代码 - 对遗存软件友好 • 心智模型 • 生产率与性能 • 正确性与性能 • 规则 • 方便代码评审 - 完整性 - 可读性 - 简单性 - 性能 • 实用主义的语言风格 - 面向编译器的静态类型语言 • 数据类型必须在编译阶段确定 • 语言能充分发挥编译优化技术 - 复古且简便的语言 • 集合了多种语言实用的语法表示 • 函数是一等公民(First-Class Functions) • 抛弃了面向对象 - 开放(几乎所有资源都在github上) ## • 语法基本特点 - C 语言的身体(语法基本类似 C 语言) – Python0 码力 | 21 页 | 851.30 KB | 2 年前3
Idris 语言文档 Version 1.3.1# 飞 Idris 语言文档 Version 1.3.1 ## Contents 1 Idris 教程 2 常见问题解答 (FAQ) 3 用 Idris 实现带有状态的系统:ST 教程 4 The Effects Tutorial 5 Theorem Proving 6 Language Reference 7 Tutorials on the Idris Language mmons.org/publicdomain/zero/1.0/deed.zh Idris 教程 本文档为 Idris 的教程,它简单介绍了如何用 Idris 语言编程。文档中覆盖了该语言的核心特性,并假定你至少熟悉一门函数式编程语言,如 Haskell 或 OCaml。 注解:Idris 文档已按照 创作共用 CC0 许可协议 发布。因此根据法律规定,Idris 社区 已放弃对 Idris 文档的所有版权以及相关或邻接的权利。 文档的所有版权以及相关或邻接的权利。 关于 CC0 的更多信息参见:https://creativecommons.org/publicdomain/zero/1.0/deed.zh ### 1.1 引言 在传统编程语言中,类型与值之间有明确的区分。例如在 Haskell 中,下面这些类型分别表示整数、字符、字符列表以及任意值的列表: • Int, Char, [Char], [a] 与此对应,下面这些值分别为上述类型的成员:0 码力 | 224 页 | 2.06 MB | 2 年前3
PlantUML 1.2021.3 语言参考指引绘制的 UML  PlantUML 语言参考指引 (Version 1.2021.2) PlantUML 是一个开源项目,支持快速绘制: · 时序图 • 用例图 类图 • 对象图 · 活动图 · 组件图 · 部署图 • 架构图 规范和描述语言 (SDL) - 规范和描述语言 (SDL) • Ditaa diagram 甘特图 • MindMap diagram • Work Breakdown Structure diagram • 以 AsciiMath 或 JLaTeXMath 符号的数学公式 • Entity Relationship diagram 通过简单直观的语言来定义这些示意图。 ## [Image](/uploads/documents/3/4/5/c/345c7798228083c9f970b76c03e7a0e1/p58_1.jpg) ### 3.6 抽象与静态 通过修饰符 {static} 或者 {abstract},可以定义静态或者抽象的方法或者属性。 这些修饰符可以写在行的开始或者结束。也可以使用 {classifier} 这个修饰符来代替 {static}. @startuml class0 码力 | 398 页 | 4.22 MB | 2 年前3
PlantUML 1.2021.1 语言参考指引PlantUML 语言参考指引 (Version 1.2021.1) PlantUML 是一个开源项目,支持快速绘制: · 时序图 • 用例图 类图 • 对象图 · 活动图 · 组件图 · 部署图 • 状态图 • 定时图 同时还支持以下非 UML 图: • JSON Data • Network diagram (nwd) · 线框图形界面 • 架构图 规范和描述语言 (SDL) (SDL) - 规范和描述语言 (SDL) • Ditaa diagram 甘特图 • MindMap diagram • Work Breakdown Structure diagram • 以 AsciiMath 或 JLaTeXMath 符号的数学公式 • Entity Relationship diagram 通过简单直观的语言来定义这些示意图。 ## 1 时序图 ### 1.1 [Image](/uploads/documents/5/d/9/3/5d939329963125474656175552027d1e/p56_1.jpg) ### 3.6 抽象与静态 通过修饰符 {static} 或者 {abstract},可以定义静态或者抽象的方法或者属性。 这些修饰符可以写在行的开始或者结束。也可以使用 {classifier} 这个修饰符来代替 {static}. @startuml class0 码力 | 376 页 | 4.00 MB | 2 年前3
PlantUML 1.2020.22 语言参考指引jpg) PlantUML 语言参考指引 (Version 1.2020.22) PlantUML 是一个开源项目,支持快速绘制: · 时序图 • 用例图 · 类图 · 活动图 · 组件图 · 状态图 · 对象图 · 部署图 · 定时图 同时还支持以下非 UML 图: • JSON Data · 线框图形界面 • 架构图 • 规范和描述语言 (SDL) • Ditaa • MindMap diagram • Work Breakdown Structure diagram • 以 AsciiMath 或 JLaTeX Math 符号的数学公式 通过简单直观的语言来定义这些示意图。 ## 1 时序图 ### 1.1 简单示例 你可以用 -> 来绘制参与者之间传递的消息,而不必显式地声明参与者。 你也可以使用 --> 绘制一个虚线箭头。 另外,你还能用 [Image](/uploads/documents/6/9/1/a/691a8040bbe897941668dcd70c6d4871/p43_1.jpg) ### 3.6 抽象与静态 通过修饰符 {static} 或者 {abstract},可以定义静态或者抽象的方法或者属性。 这些修饰符可以写在行的开始或者结束。也可以使用 {classifier} 这个修饰符来代替 {static}. @startuml class0 码力 | 295 页 | 3.08 MB | 2 年前3
PlantUML 1.2019.3 语言参考指引p1_1.jpg) PlantUML 语言参考指引 (Version 1.2019.3) PlantUML 是一个开源项目,支持快速绘制: · 时序图 • 用例图 · 类图 · 活动图 · 组件图 ·状态图 · 对象图 · 部署图 · 定时图 同时还支持以下非 UML 图: · 线框图形界面 · 架构图 • 规范和描述语言 (SDL) • Ditaa diagram diagram · 甘特图 • 以 AsciiMath 或 JLaTeXMath 符号的数学公式通过简单直观的语言来定义这些示意图。 ## 1 时序图 ### 1.1 简单示例 你可以用 -> 来绘制参与者之间传递的消息,而不必显式地声明参与者。 你也可以使用 --> 绘制一个虚线箭头。 另外,你还能用 <- 和 <--,这不影响绘图,但可以提高可读性。注意:仅适用于时序图,对于其它示意图,规则是不同的。 [Image](/uploads/documents/8/6/0/8/860878bc8f88b6993946457623c43708/p37_2.jpg) ### 3.5 抽象与静态 通过修饰符 {static} 或者 {abstract},可以定义静态或者抽象的方法或者属性。 这些修饰符可以写在行的开始或者结束。也可以使用 {classifier} 这个修饰符来代替 {static}. @startuml class0 码力 | 157 页 | 1.78 MB | 2 年前3
PlantUML 1.2019.2 语言参考指引p1_1.jpg) PlantUML 语言参考指引 (Version 1.2019.2) PlantUML 是一个开源项目,支持快速绘制: · 时序图 • 用例图 · 类图 · 活动图 · 组件图 ·状态图 · 对象图 · 部署图 · 定时图 同时还支持以下非 UML 图: · 线框图形界面 · 架构图 • 规范和描述语言 (SDL) • Ditaa diagram diagram · 甘特图 • 以 AsciiMath 或 JLaTeXMath 符号的数学公式通过简单直观的语言来定义这些示意图。 ## 1 时序图 ### 1.1 简单示例 你可以用 -> 来绘制参与者之间传递的消息,而不必显式地声明参与者。 你也可以使用 --> 绘制一个虚线箭头。 另外,你还能用 <- 和 <--,这不影响绘图,但可以提高可读性。注意:仅适用于时序图,对于其它示意图,规则是不同的。 [Image](/uploads/documents/c/a/6/0/ca608e6feda30bfd911bbd53d4aff0d4/p37_2.jpg) ### 3.5 抽象与静态 通过修饰符 {static} 或者 {abstract},可以定义静态或者抽象的方法或者属性。 这些修饰符可以写在行的开始或者结束。也可以使用 {classifier} 这个修饰符来代替 {static}. @startuml class0 码力 | 157 页 | 1.78 MB | 2 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













