5 刘知杭 静态类型的Python静态类型的Python Lyzh(刘知杭) 目录 CONTENTS 有关类型的概念 使用mypy对Python源 代码进行静态分析 代数数据类型 拓展知识 关于类型的一些基本概念 有类型不等于有类型系统 动态语言类型化的必要性 不久前的一个案例 正文 类型的概念 CPython定义了PyObject这个 结构体作为对象头。 CPython中的类型,是指在对 象头中指向类型元信息的指针。 中通过函数的类型签名来寻找函数。 错误检查、程序验证 程序效率:动态类型不利于编译优化 渐进式类型系统 相对于静态语言的类型系统。 为动态语言添加类型系统需要考虑到过渡与历史包袱 一种叫做渐进式类型系统的东西完美的符合了这个应用场景 这种类型系统同时允许动态类型与静态类型的存在 声明类型系统、鸭子类型与结构类型系统 类型系统的分类——声明式类型系统与结构化类型系统 声明类型系统通过名字来检查类型 尽管没有为注释指定任何 含义,但始终存在一个隐式目标,即将它们用于类型提示。 该PEP旨在为类型注释提供标准语法,开放Python代码以简化静态分析和重构,潜 在的运行时类型检查,以及(可能在某些情况下)利用类型信息生成代码。 在这些目标中,静态分析是最重要的。这包括对类型检查器(如mypy)的支持, 以及提供可由IDE实现的代码重构操作。 虽然这些注释可以在运行时通过 __annotations__0 码力 | 42 页 | 6.87 MB | 1 年前3
基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 ▪ Rust在语法设计中引入所有权机制,简化指针分析问题 Rust所有权模型 => XOR Mutability ❑ 一个对象有且只有一个所有者 ❑ 所有权可以转移给其它变量 ▪ 用完不用还 ❑ 所有权可以被其它变量借用 ▪ 用完自动归还 ▪ 只读(immutable)借用:& ▪ 可变(mutable )借用:& mut fn main(){ let mut alice = Box::new(1); 创建未初始化的变量foo Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ❑ 整体思路:基于编译过程中的生成的MIR进行静态分析 ▪0 码力 | 28 页 | 1.55 MB | 1 年前3
05 PHP基本语法 - 变量、数组、字符串 杨亮 《PHP语⾔程序设计》0 码力 | 25 页 | 587.00 KB | 1 年前3
面向亿行 C/C++ 代码的静态分析系统设计及实践-肖枭面向亿行C/C++代码的 静态分析系统设计及实践 肖枭 自我介绍 2016年香港科技大学取得博士学位 过去10年一直以极高的热情从事静态 分析技术的学术用研究 合作创办源伞科技,致力于推动静态 分析技术在企业中的应用 目录 代码质量管理是个大问题 静态分析+代码评审的实践 学习和强调,红线和惩罚,100%的测试 覆盖率,和事后复盘并不够 有经验的程序员也会犯错 对代码提要求很难监督落实 对代码提要求很难监督落实 测试更多是验证功能,很难检测编码缺陷 代码的快速变化使质量更难管 生产质量是责任 靠运维和事后复盘善后够吗? 静态分析工具:半智能的代码分析机器人 静态分析辅助代码评审 自动化工具+流程才是未来 Bug! Thx! Bug! 投入大 KPI不痛不痒 使用主体和责任主体不一致 一步登天想要终极AI 代码质量改进工具、流程落地难 大多数开发人员眼中的静态分析工具 检查逻辑问题好,但耗时长 还挺多误报,想用而不敢用 编译器里的Errors and warnings 自带静态分析的语言如Typescript, Rust IDE里的智能提示 代码混淆和美化 代码交叉索引 Eclipse等IDE中的一键重构 App市场的审核 成功静态分析应用 代码评审中的静态分析 针对该提交 代码片段自0 码力 | 39 页 | 6.88 MB | 1 年前3
3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 95 -> 0.96 Restrain JIT 2.74 -> 0.64 3.54 -> 0.59 3.14 -> 0.93 2.00 -> 0.03 2.60 -> 0.96 如果还有时间,我们用静态类型 来写一个简单的网页生成框架 一个用起来,没有学习曲线的框架。 很安全,因为没有程序员需要付出心 智负担的工作。 THANK YOU thautwarm: - github.com/thautwarm0 码力 | 43 页 | 10.71 MB | 1 年前3
Cmake 实践Practice) 本文档是边学习边编写的成果,更像是一个学习笔记和 Tutorial,因此难免有失误 或者理解不够透彻的地方,比如,我仍然不能理解为什么绝大部分使用变量的情况要通过$ {}引用,而在 IF 语句中却必须直接使用变量名。也希望能够有 cmake 的高手来指点迷津。 补:从 cmake 的 maillist,我找到了一些答案,原文是: The `IF(var)' or `IF(NOT `IF(/usr/lib/xorg)' and then CMake will check the value of the variable named `/usr/lib/xorg'.也就是说 IF 需要的是变量名而不是变量值 这个文档是开放的,开放的目的是为了让更多的人能够读到并且能够修改,任何人都 可以对它作出修改和补充,但是,为了大家都能够获得你关于 cmake 的经验和积累,如果 你现错误或者添加了新内容后,请务必 默认情况表示支持所有语言。这个指令隐式的定义了两个 cmake 变量:_BINARY_DIR 以及 _SOURCE_DIR,这里就是 HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR(所以 CMakeLists.txt 中两个 MESSAGE 指令可以直接使用了这两个变量),因为采用的是内部编译,两个变量目前指的都是工程所 在路径/backup/ 0 码力 | 47 页 | 264.27 KB | 1 年前3
Nim 2.0.2 中文手册代码是特定的计算单元,作⽤于称为 locations "地址"组件构成的内存。 变量本质上是地址的名称,每个变量和地址都有特定 的 type "类型",变量的类型被称为 static type "静态类型", 地址的类型被称为 dynamic type "动态类型"。如果静态类型与动态类 型不相同,它就是动态类型的⽗类或⼦类。 identi�er "标识符"是变量、类型、过程等的名称声明符号,⼀个声明所适⽤的程序区域被称为该声明的 analysis "语义分析"对AST进⾏转换,增加了语义信息,如表达式类型、标识符的含义,以及在某些情况下表达 式的值。在语义分析中检测到的错误被称为 static error "静态错误",当前⼿册中描述的错误在没有其他约定时,就是静态错误。 panic "恐慌"是在运⾏时执⾏检测和报告的错误。这种错误的报告,通过 引发异常 或 以致命错误 结束的⽅式。 也提供了⼀种⽅法 来禁⽤这些 runtime checks 先前声明的常量和编译期变量 先前声明的宏和模板 先前声明的过程,除了可能修改编译期变量外,没有任何副作⽤ 常量表达式可以包含代码块,代码块可以是在编译期内⽀持的所有 Nim 特性(详⻅下⾯章节)。 在其代码块中,可以声明变量,随 后读取和更新,或者声明变量并将其传递过程修改。 其代码块中的代码,仍须遵守上⾯列出的关于引⽤该代码块外的值和运算的 限制。 访问和修改编译期变量的能⼒为常量表达式增0 码力 | 127 页 | 7.05 MB | 1 年前3
Object Pascal 参考手册(Ver 0.1) Greeting;{$APPTYPE CONSOLE} 指示字告诉编译器,这是一个控制 台程序,它要从命令行运行;接下来的一行声明了一个变量 MyMessage,它存储一个字符串(Object Pascal 包含真正的字符串类型)。程序把字符串 ”Hello world!” 赋给变量 MyMessage,然后使用 Writeln 例程把 MyMessage 的内容送到标准输出设备(Writeln 在 System 和 end 括起来,其中的命令只是简单调用 Application 对象的方法(每 个工程都有一个 Application 变量,它是 TApplication、TWebApplication 或 TServiceApplication 的一个实例)。块也可以包含常量、类型、变量、过程和函数的声明,它们必须位于(块中)命令语句的 前面。 Unit structure and syntax(单元的结构和语法) syntax(单元的结构和语法) Unit structure and syntax: Overview(概述) 一个单元由类型(包括类)、常量、变量以及例程(函数和过程)构成,每个单元由它自己的单元文 件(.pas)定义。 一个单元以单元头(unit heading)开始,后面跟 interface、implementation、initialization 和 finalization 部分,后面两个0 码力 | 168 页 | 868.25 KB | 1 年前3
ThinkJS 1.2 中文文档-‐-‐-‐-‐ ⼊入⼝口⽂文件 └── resource -‐-‐-‐-‐ 静态资源⺫⽬目录 ├── css -‐-‐-‐-‐ 在 require。 // 定义 APP 的根⺫⽬目录 global.APP_PATH = __dirname + "/../App"; // 静态资源根⺫⽬目录 global.RESOURCE_PATH = __dirname; global.ROOT_PATH = __dirname; global.APP_DEBUG ⾏行为是 ThinkJS 扩展机制中⼀一项⽐比较关键的扩展,⾏行为可以独⽴立调⽤用,也可以整合到标签 (tag) ⾥里⼀一起调⽤用,⾏行为 是执⾏行过程中⼀一个动作或事件。如:路由检测是个⾏行为、静态缓存检测也是个⾏行为。 标签 (tag) 是⼀一组⾏行为的集合,是在系统执⾏行过程中切⾯面处调⽤用的。与 EventEmitter 不同,标签⾥里的⾏行为是按 顺序执⾏行的,当前的⾏行为通过 Promise0 码力 | 104 页 | 1.29 MB | 1 年前3
阮一峰 《ECMAScript 6入门》 第三版1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 目錄 前言 ECMAScript 6简介 let 和 const 命令 变量的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 Symbol Set 和 Map 数据结构 Proxy Reflect Promise 对象 ES5 代码。转换后的 代码,可以直接作为 ES5 代码插入网页运行。 与其他工具的配合 许多工具需要 Babel 进行前置转码,这里举两个例子:ESLint 和 Mocha。 ESLint 用于静态检查代码的语法和风格,安装命令如下。 $ npm install --save-dev eslint babel-eslint ECMAScript 6简介 18 然后,在项目根目录下,新建一个配置文件 命令,用来声明变量。它的用法类似于 var ,但是所声明的变 量,只在 let 命令所在的代码块内有效。 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 上面代码在代码块之中,分别用 let 和 var 声明了两个变量。然后在代码块之外 调用这两个变量,结果 let0 码力 | 679 页 | 2.66 MB | 1 年前3
共 879 条
- 1
- 2
- 3
- 4
- 5
- 6
- 88













