CSE307 (Spring 2023)
Principles of Programming Languages

General Information | Schedule | Resources | Requirements

General Information

Course description: This course is an introduction to programming language design and implementation. From the design point of view, we will study language features as tools for expressing what and how to compute. From the implementation point of view, we will discuss interpreters for understanding language features and discuss compilers as tools for mapping language features onto computer hardware. The course will touch on a variety of languages in different programming paradigms. Rather than dwell on the features of any particular language, we will focus instead on understanding the commonalities and differences among languages, the reasons for them, and the implications of them. Students will do biweekly programming assignments, mostly in Python, to better understand language features and language processing. | Prerequisites: C or higher: CSE 216 or CSE 219 or CSE 260, CSE 220, CSE major | Credits: 3 | Official description and learning outcomes

Instructor: Annie Liu | Office: New CS 237 | Phone: 631-632-8463 | Email: liu@cs.stonybrook.edu | Office hours: Mon 12:40-1 PM, 2:20-3 PM, Thu 4:20-5 PM, Fri 12:20-1 PM, 2:20-2:40 PM, or email for an appointment.

TAs: Sucharitha Inapanuri | TA Office: CS 2126 | Email: sucharitha.inapanuri@stonybrook.edu | Office hours: Tue Fri 4:30-5:30 PM, Thu 5:30-6:30 PM.
Kushaal Hulsoor | Email: khulsoor@cs.stonybrook.edu | Office hours: by appointment.

Lectures: Mon Fri 1-2:20 PM, New CS 120 (Note: the first class will be on Zoom)

Textbook: Programming Language Pragmatics by Michael Scott. 4th Edition, Morgan Kaufmann Publishers, 2016. Errata. This is an excellent textbook that covers both language design and implementation. Relevant additional materials will be given under resources as the course proceeds.

Grading: Lecture critiques: 5% | In-class exercises: 10% | Assignments: 10% | 2 Quizzes: 2 x 20% | Final exam: 35% | Extra-credit project: 15% | No late submission will receive credit.

Course homepage: http://www.cs.stonybrook.edu/~liu/cse307/


Schedule

14 Weeks total for 5 units: 13 topics, each two lectures, plus 2 quizzes

Unit 1. Overview and language examples

 1. Language overview---what, why, and how:
	data/control/module abstraction, interpreter/compiler

 2. Language examples---Python, SML, Prolog, and more:
	sets, functions, rules, objects, concurrent/distributed 

Unit 2. Language processing

 3. Syntax analysis---scanning, parsing:
        RE, NFA/DFA/min DFA, CFG, LL/top-down vs LR/bottom-up parsers

 4. Semantic analysis---static semantics:
	AG, attribute eval., action routines, AST, type checking, code gen.

 Quiz 1 (Feb. 20, 2023)

 5. Names----scopes and bindings:
	static/stack/heap obj., GC, scoping: sta./dyn., aliasing, polymorphism

Unit 3. Data types and control flows

 6. Imperative languages---expression eval., variable as value vs reference,
	assignment/seq'g/sel'n/iteration, recursion, generator, nondeterminism

 7. Data types---record/variant, array/sequence/set, pointer, recursive:
	typing: strong/weak/static/dynamic, type system/checking/inference

Unit 4. Data abstraction and control abstraction

 8. Database languages---sets and relations, queries:
	comprehension/aggregation/quantification, invariants, incremental updates

 9. Functional languages---recursive functions,	call by reference/value/name, 
	eager/lazy, higher-order, lambda calculus

 Quiz 2 (Apr. 7, 2023)

 10. Logic languages---rules, search, efficiency:
	logic/relational/recursive programming, tabling, negation/aggregation

Unit 5. Module abstraction and concurrency

 11. Object-oriented languages---encapsulation, inheritance:
	objects, attributes, multiple inheritance, evolution of abstraction

 12. Concurrent and distributed languages: shared-memory/message-passing,
  	thread/process, synchronous/asynchrounous, history queries

 13. Language review and outlook---ease of programming, integrated languages:
	correctness/efficiency/productivity, clarity, procedural/declarative

 Final exam (May 15, 2023, 2:15-5:00 PM)

Resources

Google Classroom for this course, for students in the course

References

Programming languages and tools at https://hyperpolyglot.org/, with commonly used features in a side-by-side format, and with explanations by examples.

Python | Python Documentation (read Tutorial, browse Library Reference, and when needed look up Language Reference and rest)


Requirements

Follow all information in the Google Classroom for this course.

Attend all lectures and take good notes. This is the most efficient way to learn the course materials, because we will both distill and elaborate written materials and discuss important related materials. We will start promptly on time. We will have every student participate in solving problems and presenting solutions in class.

Do all course work. The readings are to help you preview and review the materials discussed in the lectures. The assignments are to provide concrete experiences with the basic concepts and methods covered in the lectures. The exercises are to help check that you are keeping up with the lectures and the assignments. The exams will be comprehensive.

If you have any questions, ask. Ask questions in class, in office hours, and in the Q&A forum. Talk with your classmates, and share ideas, but not solutions to assignments.

Your submitted work

Your handins must include the following information at the top: your name, student id, course number, assignment number, and due date, and must be submitted in a neat and organized fashion.

Your programming solutions must be submitted with a README.txt file explaining where things are, what you did and found for the assignment (that is not described in the assignment handout), and how to run and test your program. This file is worth a non-trivial portion of the grade.

Your approach to solving problems is as important as your final solutions; you need to show how you arrived at your solutions and include appropriate explanations. Always include good explanations in your README file and good comments in your code.

Your homework submissions must be your own work. You are not permitted to share, borrow, or even look at another student's work while completing your own homework. Likewise, copying material from any source other than what is specified by the instructor will constitute cheating. You may discuss ideas with others and look up references, but you must write up your solutions independently and credit all sources that you used. Any evidence that answers have been copied, shared, or transmitted in any way, including the use of answers downloaded from the Internet or written by others previously, will be regarded as evidence of academic dishonesty. Anyone involved will be reported.

Submission issues

Neither extensions nor late submissions will be approved under normal circumstances. If some emergency or other circumstances truly beyond your control prevent you from submitting your assignment on time, supply the instructor with suitable documentation and notification prior to the assignment deadline. The instructor will also refer you to the Dean of Students for follow-up consultation.

Students are urged to plan ahead to avoid problems such as computer failures at the last minute. If your assignment is incomplete before it is due, turn in whatever you have. You are advised to budget your time wisely and to start working on an assignment the day it is posted.

Grading issues

The final grade you receive in this class will reflect, as far as possible, the extent to which you have mastered the concepts and their applications. How much someone needs a grade, or how close they are to the next higher grade, will have no effect on grade. As the instructor, I want everyone to do well in this course, and will make every reasonable effort to help you understand the material taught. However, the grades provided at the end of the semester are final, except for rare situations involving grading errors. They will not be altered for other reasons, so please do not ask me to do so.

If you think you found grading errors, please arrange a re-grading within one week of receiving the graded work; later requests will not be entertained.

To promote consistency of grading, issues about work graded by a TA should be addressed first to the TA and then, if the issues are not resolved, to the instructor.

University Policies

Academic Integrity

Each student must pursue his or her academic goals honestly and be personally accountable for all submitted work. Representing another person's work as your own is always wrong. Faculty is required to report any suspected instances of academic dishonesty to the Academic Judiciary. For more comprehensive information on academic integrity, including categories of academic dishonesty please refer to the academic judiciary website at http://www.stonybrook.edu/commcms/academic_integrity/index.html

Student Accessibility Support Center

If you have a physical, psychological, medical, or learning disability that may impact your course work, please contact the Student Accessibility Support Center, Stony Brook Union Suite 107, (631) 632-6748, or at sasc@stonybrook.edu. They will determine with you what accommodations are necessary and appropriate. All information and documentation is confidential.

Students who require assistance during emergency evacuation are encouraged to discuss their needs with their professors and the Student Accessibility Support Center. For procedures and information go to the following website: https://ehs.stonybrook.edu//programs/fire-safety/emergency-evacuation/evacuation-guide-disabilities and search Fire Safety and Evacuation and Disabilities.

Critical Incident Management

Stony Brook University expects students to respect the rights, privileges, and property of other people. Faculty are required to report to the Office of Student Conduct and Community Standards any disruptive behavior that interrupts their ability to teach, compromises the safety of the learning environment, or inhibits students' ability to learn. Further information about most academic matters can be found in the Undergraduate Bulletin, the Undergraduate Class Schedule, and the Faculty-Employee Handbook.


Annie Liu