编程语言的设计原理


课程信息

上课时间: 每周 周三 10-12节
上课地点: 二教 509
任课教师: 胡振江 教授
赵海燕 副教授
熊英飞 研究员
课程助教: 吴迪(邮件:11501214502@pku.edu.cn)、杨至轩(邮件:yangzx95@pku.edu.cn)

课程通知

暂无

作业提交:

纸制版作业,每次课的作业在下次课上课前交给助教。
电子版作业,每次课的作业在下次课上课前发送到助教的邮箱,11501214502@pku.edu.cn,邮件标题请以“X月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. (教材)

课程讲义和作业

课程日期 课程章节 讲师 讲义和作业
2016/2/24 Introduction & Untyped Systems 胡振江 讲义:135
作业:阅读教材1,2章; 安装使用OCaml
2016/3/2 第六、八、九章 胡振江 讲义:689
作业:Read Chapter6,8,9; Do Exercise 6.2.5, 8.3.7, 9.3.9
2016/3/9 第十一章 胡振江 讲义:11
作业:Read Chapter11; Do Exercise 11.11.2
2016/3/16 OCaml 赵海燕 讲义:OCaml
作业:详见课件最后一页
2016/3/23 第十三章 赵海燕 讲义:13
作业: Read Chapter13; Do Exercise 13.3.1 13.5.8
2016/30 习题课 熊英飞 讲义:practice ,, fullsimple.match.problem
作业: 见ppt最后一页,fullsimple.match.problem中是今天作业的框架代码
2016/4/6 第十四、十五章 赵海燕 讲义:1415
作业:Read Chapter14、15; Do Exercise 14.3.2
2016/4/14 第十六章 赵海燕 讲义:16
作业: 详见胶片最后一页
2016/4/21 第十八、十九章 熊英飞 讲义:1819project
作业:Read Chapter18、19; Do Exercise 18.11.1
2016/5/12 第二十章 熊英飞 讲义:20
作业:Read Chapter20;
2016/5/18 习题课 赵海燕 讲义:Practice
作业:Practice; Do Exercise 17.3.1, 18.7.1, 19.4.3
2016/5/25 第二十一章 熊英飞 讲义:21
作业:Read Chapter21; Do Exercise 详见课件
2016/6/1 第二十二章 熊英飞 讲义:22, 23, 24, 26
作业:Read Chapter22,23,24,26; Do Exercise 详见课件

[通知] 目前组队情况: 1队:冀元祎 刘艾 2队:徐梦炜 姜佳君 3队:胡光洲 4队:王然、王迪 5队:成羽丰 6队:扬子岳 未组队:董宇宸、周钊平、许瑞琦、程锦远 如果有错漏,或者未组队的同学想要组队,请和熊英飞老师联系。


Last Modified: 5/25/2016