- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程语言的类型系统计算机科学导论第三讲.ppt
* * * * * * * * * 依 赖 类 型 依赖类型 依赖类型是指依赖于项的类型 若有类型构造符vector,应用于n,vector(n)表示长度为n的所有向量构成的类型 先前三个函数的类型 ? zero_vector: ?n:nat. vector(n) ? cons: ?n:nat. data ? vector(n) ? vector(n+1) ? append: ?m:nat. ?n:nat. vector(m) ? vector(n) ? vector(m+n) 用C可以编程这样功能的函数,但编译器不保证所编函数及其调用的类型正确性 依 赖 类 型 无依赖类型给C编程带来的麻烦 难以完成sprintf函数的严格检查 概念上sprintf的类型一种简化版本如下: sprintf: ?f: Format.Data(f) ? String 其中Format表示所有合法格式串构成的类型, Data(f)对应到格式串f的数据的类型 难以发现共用体类型的一些使用错误 union U {int u1; int ?u2;} u; int ?p; u.u1 = 10; p = u.u2; ?p = 0; 依 赖 类 型 编程语言中增加依赖类型的困难 选择支持何种编程便利的依赖类型 静态完成类型检查的可能性 一些函数式语言支持依赖类型 理论上还在深入研究 理想情况 ? 程序 P:类型T(类型检查保证P属于T) ? T就是程序正确性的一种形式描述 ? 类型检查就是程序正确性验证 小 结 本讲座小结 以类型系统为例,介绍怎样为编程语言设计一些机制(facility),使得程序合法性的检查是可由计算机自动完成的 类型论是非常高深的理论,采用类型观点的编程语言类型系统的研究,在软件工程、语言设计、高性能编译器和网络安全等方面都有重要应用 小 结 工具 The Coq Proof Assistant, http://coq.inria.fr/ Coq实现了一个依赖类型的函数式编程语言 参考文献 Pierce B C. Types and Programming Languages. The MIT Press, 2002. Pierce B C. Advanced Topics in Types and Programming Languages. The MIT Press, 2005. Harper R. Practical Foundations for Programming Languages. A working draft is available at /~rwh/plbook/book.pdf, 2014 * * * * * * * * * * * * * * * * * * * * * * * * * * * 中国科大 编程语言的类型系统计算机科学导论第三讲 计算机科学技术学院 陈意云 0551yiyun@ 课 程 内 容 课程内容 围绕学科理论体系中的模型理论, 程序理论和计算理论 1. 模型理论关心的问题 给定模型M,哪些问题可以由模型M解决;如何比较模型的表达能力 2. 程序理论关心的问题 给定模型M,如何用模型M解决问题 包括程序设计范型、程序设计语言、程序设计、形式语义、类型论、程序验证、程序分析等 3. 计算理论关心的问题 给定模型M和一类问题, 解决该类问题需多少资源 讲 座 提 纲 了解类型系统的重要性 围绕数组类型的若干实例来解释这个重要性 基本知识 类型表达式、定型断言、定型规则、类型系统 多态类型 多态函数、类型变量、多态函数的类型推断和类型检查 依赖类型 依赖类型的实例、编程语言中使用依赖类型的状况 了解类型系统的重要性 一点个人评论(对发行量最大那本C程序设计教材) 对类型和类型系统介绍不足 ? 未强调变量、表达式和函数等都具有类型 ? 未强调各种运算对操作的对象和结果的类型都有规定 例1:完全没有把数组看成类型 int a[3]:a未被看成元素类型为int、大小为3的数组类型的一个元素 int a[4][3]:a未被看成以上述数组类型为元素类型、大小为4的数组类型的一个元素 例2:类型声明typedef被忽视( 简略介绍在最后 ) 了解类型系统的重要性 一点个人评论(对发行量最大那本C程序设计教材) 例3: 读者难以理解编译器就下面代码报告的错误 long a[10][10]; main(
您可能关注的文档
- 第三节 降水和降水的分布.ppt
- 第二章 一元线性回归模型.ppt
- 第二章 对国家出路的早期探索.ppt
- 第五章 数组.ppt
- 第五章十八世纪文学.ppt
- 第五章就业心理指导与调适.ppt
- 第六章 相关分析.ppt
- 第四章 加强道德修养 锤炼道德品质.ppt
- 第四章 消费者行为理论.ppt
- 第四章 统计指标分析.ppt
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
文档评论(0)