编程语言的设计原理
课程信息
上课时间: | 每周 周三 10-12节 | |
上课地点: | 二教 501 | |
任课教师: | 胡振江 教授 | |
赵海燕 副教授 | ||
熊英飞 研究员 | ||
课程助教: | 李军 | lijun09@sei.pku.edu.cn |
米亚晴 | 283468256@qq.com |
课程通知
作业提交:关于纸制版作业提交,每次课的作业在下次课上课前交给助教;关于电子版作业提交,同样在下次课上课前发送到助教的邮箱, 邮件标题请以“第X次作业-姓名-学号”格式书写。
课程简介
本课程主要面向大三和大四本科生与研究生,推荐先修《程序设计技术与方法》、《编译原理》, 但不做强制要求。未来三年每年在春学期开课。
新兴的程序设计语言层出不穷,这些语言是如何设计出来的? 主流语言中不断扩展出新的高级语言特征,这些特征是如何定义的? 为什么说Java语言的设计是有缺陷的?面向对象、函数语言、泛型编程等新型编程模型是否有共通的理论基础? 本课程将揭示这些问题的答案。
近十多年来,编程语言的发展呈现两个趋势:1)从固定少量语言到大量领域特定语言的变化; 2)从简单语言到复杂高级语言。比如,在2013年9月的TIOBE的编程语言排行榜上, C和Java两个占统治地位的语言只能各自占到16%左右的份额, 大量的份额被近年来涌现的新型编程语言比如Javascript, Scala, Erlang, R占据。 同时,更多的新语言还在不断被设计出来。另一方面,大量经典语言也不断扩展, 引入各种高级语言成分。比如Java一起初的设计目标为一个简化版的语言, 但最新的Java 8设计中已经包含了泛型、函数式编程、动态性等多种高级特性。在这样的情况下, 掌握设计新的编程语言的能力,已经不仅限前沿科研人员所掌握的高级技能,而是一线软件开发工程师的基本要求 。同时,对语言设计原理的了解和掌握,也有助于更好的理解高级语言中的各种新特性,以更好的使用主流编程语言。
为指导编程语言的设计,研究人员们已经提出了一系列的原理和方法,其中最核心的就是类型理论。 类型声明是现代语言中避免编程错误的一个基本手段,而类型理论解释了一个良好的类型系统应该具有的特征和复杂类型的定义方法。 本课程将围绕类型理论这个核心进行组织,讲授程序设计语言的现代理论。
本课程具有两个特点:1. 严谨性:课程中的概念元素都将有严格的数学定义,可以进行形式演绎和归纳, 而非空泛的概念介绍。2. 操作性:课程中的所有重要概念都将通过课程作业的方式编程实现, 使得同学们在动手过程中真正掌握知识。希望通过本课程的学习,使得同学们在编程语言领域拥有扎实的理论功底和实践能力, 在产业方面能胜任设计新语言的任务,在学术方面为开展程序语言相关研究打下基础。
参考书目
Types and Programming Languages , Benjamin C. Pierce, The MIT Press, 2002. (教材) |
课程讲义
课程日期 | 课程章节 | 讲师 | 讲义和作业 | |
---|---|---|---|---|
2月 | 19 | 课程介绍,第1,3,5章 | 胡振江 | 讲义:1,
3,
5 作业:3.5.16 |
2月 | 26 | 第5,6,8章 | 胡振江 | 讲义:6,
8 作业:5.3.6,6.2.5 |
3月 | 5 | 第8,9,11章 | 胡振江 | 讲义:9,
11 作业:8.3.7,9.3.9,11.11.2 |
3月 | 12 | OCaml初步和Project要求 | 赵海燕 | 讲义:OCaml初步,
Project要求 作业:7.3.1 |
3月 | 19 | 第13章 | 赵海燕 | 讲义:13 作业:13.5.2;阅读课程通知 |
3月 | 26 | 第14,15章 | 赵海燕 | 讲义:14,
15 作业:14.3.1,15.5.2 |
4月 | 2 | 第16章 | 赵海燕 | 讲义:16 作业:16.2.6,16.3.2,17.3.1(基于17章的代码) |
4月 | 9 | 第18,19章 | 赵海燕 | 讲义:18,
19 作业:18.6.1,19.4.6 |
4月 | 23 | 第20章 | 熊英飞 | 讲义:20 作业:见讲义最后一页 |
4月 | 30 | 第21章 | 熊英飞 | 讲义:21 作业:见讲义最后一页 |
5月 | 7 | 第22章 | 熊英飞 | 讲义:22 作业:见讲义最后一页 |
5月 | 14 | 第23,24章 | 熊英飞 | 讲义:23
24 作业:见24章讲义最后一页 |