本课程为伊人直播-伊人直播app 研本合上课程。
时间:周二3-4节(双),周四5-6节。
地点:三教404。
答疑:单周二10:00-11:00,智华楼353。
课程内容:本课程主要讲授程序设计语言的基本概念和原理,包括程序设计语言的语法和语义描述,词法和语法分析,各种常见语言结构的设计问题和不同语言在语言结构上的设计选择,以及程序设计语言中常见的面向对象、并发、异常处理等机制,并对函数式程序设计语言和逻辑程序设计语言进行讨论。
教材及参考书目:
[1] Robert W. Sebesta. Concepts of Programming Languages. 12th edition, Pearson Education, 2019 (影印版,机械工业出版社,2021).
[2] Kenneth C. Louden, Programming Languages: Principles and Practice (影印版,电子工业出版社,2003).
[3] Ravi Sethi, Programming Languages, Concepts & Constructs,Adison-Wesley,1997 (中译本(裘宗燕等译)及影印本,机械工业出版社,2002).
[4] Glynn Winskel. The Formal Semantics of Programming Languages An Introduction. The MIT Press, 1993.
[5] Seth D. Bergmann. Compiler Design: Theory, Tools and Examples. Rowan University, 2017.
[6] Timothy C. Lethbridge and Robert Laganière. Object-Oriented Software Engineering: Practical Software Development using UML and Java, 2nd edition. McGraw-Hill Education, 2005.
成绩判定:
参加课程学习的每位同学需从Proceedings of POPL 2024、PLDI 2024、OOPSLA 2024或ICFP 2024中任选一篇论文做一次报告(时间50-60分钟),并选择一个课题进行研究,完成一篇课程论文(中英文皆可,中文不少于软件学报格式10页,英文不少于LNCS格式15页),论文课题可从下面建议课题中选择其一,也可根据自己的研究方向自选课题(自选课题需符合本课程宗旨并经与任课教师讨论取得同意,如自选课题,请写一个简短的研究建议,说明所选课题的重要性及与本课程的相关性,通过邮件发送给我,合理的题目都可以通过确认)。
本课程期末成绩将基于平时成绩(课堂表现及作业20%)、前沿论文报告(30%)和课程研究论文(30%-50%)综合评定。
重要日期(deadline):
平时作业提交(通过教学网):见课程日程安排。
确定报告题目及课程论文所选课题(课程微信群接龙或发email至[email protected]):3月31日。
课程论文提交(教学网):6月8日(不延期)。
课程论文可选课题:
1. Python和C++的面向对象模型研究(也可选择其他两种面向对象的程序设计语言,将两种语言的面向对象模型进行比较,关注语言的继承机制,讨论动态类型的面向对象语言的优势和劣势。)(独立完成,30%)
2. Java的并行机制、功能和问题(讨论Java的基本并行功能,以及Java中的并行支持库,也可选择其他提供并行机制的程序设计语言进行研究。)(独立完成,30%)
3. 智能合约编程语言的并行问题(现有的智能合约编程语言如Solidity、Move、Cadence、Liquid等均不能支持并行编程模型,可能原因是什么?会导致什么问题?有什么可能的解决方法?)(独立或合作完成,合作者不超过2人,30%-40%)
4. Solidity的安全性:设计和问题(研究智能合约编程语言Solidity的安全性机制,语言允许合约做哪些事情?有什么合约需要的特征但由于安全问题语言中未能提供?语言中有什么样的安全漏洞?可以如何解决?)(独立或合作完成,合作者不超过2人,30%-40%)
5. Mediator的X语言代码生成:自选一种程序设计语言或形式规约语言(C++/Java/Python/UPPAAL/muCRL2/B/Event-B/...),实现从Mediator模型到该语言程序代码的生成工具。(独立或合作完成,合作者不超过2人,50%)
6. 智能合约规约语言设计(参考PRISM、Event-B、Mediator等语言,设计一种针对智能合约的形式化规约语言,可采用基于组件的方式构造智能合约的规约,通过该语言对智能合约的重要行为性质进行描述,并给出其严格的语义定义。)(独立或合作完成,合作者不超过3人,50%)
课程日程安排:
序号 | 课程内容 | 作业(标*为选做内容) |
Lecture 1 |
Introduction |
2月28日前提交本次作业。 1. 如果你支持在所有程序设计领域使用同一种语言,说明支持的理由。 2. 如果你反对在所有程序设计领域使用同一种语言,说明反对的理由。 3. 很多语言区分用户定义名字里头的字母大小写,这个设计有什么优点和缺点? 4. 阅读《Concepts of Programming Languages》第2章,写一篇不少于2页的简单文献报告,介绍程序设计语言发展过程。 |
Lecture 2 |
Syntax |
|
Lecture 3 |
Operational Semantics |
|
Lecture 4 |
Part 1: Operational Semantics (Continued) Part 2: Denotational and Axiom Semantics |
|
Lecture 5 |
Lexical and Syntax Analysis |
|
Lecture 6 |
Name, Bindings and Scopes |
|
Lecture 7 |
Part 1: Name, Bindings and Scopes (Continued) Part 2: Data Types |
|
Lecture 8 |
Data Types (Continued) |
|
Lecture 9 |
Part 1: Expressions and Assignment Statements Part 2: Statement-level Control Structures |
|
Lecture 10 |
Statement-level Control Structures (Continued) |
|
Lecture 11 |
Subprograms |
|
Lecture 12 |
Part 1: Subprograms (Continued) Part 2: Implementing Subprograms |
|
Lecture 13 | Part 1: Implementing Subprograms (Continued) Part 2: Abstract Data Types and Encapsulation Constructs |
|
Lecture 14 | Part 1: Abstract Data Types and Encapsulation Constructs (Continued) Part 2: Object-Orientation (I) |
|
Lecture 15 | Object-Orientation (II) |
|
Lecture 16 | Concurrency |
|
Lecture 17 | Exception Handling and Event Handling |
|
Lecture 18 | 前沿论文报告1(5月20日) |
|
Lecture 19 | 前沿论文报告2(5月22日) |
|
Lecture 20 | 前沿论文报告3(5月29日) | |
Lecture 21 | 前沿论文报告4(6月3日) | |
Lecture 22 | 前沿论文报告5(6月5日) |