Concepts Of Programming Languages (11th Edition) =LINK=
This course is an examination of the constructs of programming languages, the four major programming paradigms, and several programming languages, including their application and underlying execution models. The paradigms examined in this course include object-oriented, functional, and logical.Students will gain exposure to and experience in a variety of languages, including ML, Prolog, and Java. Several other languages will be briefly explored through a series of short lectures.
Concepts of Programming Languages (11th Edition)
This is a computer science course focusing on the underlying concepts and ideas of programming languages and language design. This discourse herein and discussions within the course will be limited to the subjects pertaining to this overarching topic. Other topics of conversation and discussion (i.e., politics, religion, culture, etc.) not directly related to these topics are outside this domain and will be considered a distraction. Although these topics are important and should be discussed, this class is not the place for such discussions, let us focus simply on the topic at hand.
When the students have successfully completed this course, theywill be able to: understand the essential aspects of programming languages,including theoretical foundations such as the lambda calculus,predicate calculus and the actor model, compare and apply multiple programming paradigms, design and develop logic, functional, and concurrent (distributed and mobile) programs.Course Contents Introduction
Brief history of programming languages
Resolution and unification
Search and backtracking
Functional and Imperative Programming
Scope of variables
Data abstraction/control abstraction
Parameter passing mechanisms
Expression evaluation orders
State (Imperative programming)
Concurrent and Distributed Object-Oriented Programming
Synchronous vs asynchronous communication, message passing
Token-passing continuations, join blocks, first-classcontinuations
Universal naming, remote message passing, migration(Distributed programming)
Tentative Course Syllabus Date Topic Handouts Grade 01/23 Introduction to programming languages: history, syntax, semantics, essentials, paradigms. Logic programming: introduction, Horn clauses Intro,PLP11A.pdf rainy.pl 01/26 Logic programming: predicate calculus--Programming Assignment 1 Due 02/10 PLP11B.pdf 20% 01/30 Prolog: resolution, unification, search, backtracking, cut, lists PLP11C.pdfappend.plcrossword.plcut.plcut2.plcut3.plcut4.plcut5.plloop.plnot2.pl 02/02 Prolog: arithmetic, equalities, I/O, meta-interpreters, natural language parsing PLP11D.pdfbrowse.plreverse.plsentences.plsentences2.pl 02/06 Logic programming: accumulators, difference lists PLP11E,Sections3.4.3-3.4.4.pdfaccumulators.placcumulators.oz 02/09 Lambda calculus: alpha-renaming, beta conversion,applicative and normal evaluation orders, Church-Rosser theorem,combinators PLP11E,Sections3.4.3-3.4.4.pdfdlists.oz 02/13 Higher order programming, Oz -- Programming Assignment 2 Due 03/02 LambdaCalculus.pdf 20% 02/16 Introduction to programming concepts: lists, pattern matching LambdaCalculus2.pdfcombinators.ozeta.ozhop.ozlambda-booleans.ozlambda-numbers.ozrec.ozseq.oz 02/23 Introduction to programming concepts: correctness, complexity Chapter1.pdfcomb.ozconcepts.ozlists.ozpascal.ozscope.ozstore.oz 02/27 Declarative programming, grammars, syntax and semantics. Section2.1.pdfrainy.ozrecursion.oz 03/01 Single-assignment store, kernel language syntax Section2.2-2.3.pdfsingle-assignment.oz 03/05 Kernel language semantics: concepts, abstract machine Section2.4.1-2.4.2.pdfkernel.ozscope2.oz 03/08 Kernel language semantics: non-suspendable, suspendable statements, closures Sections2.4.3-2.4.4.pdfdataflow.oz 03/19 From kernel to practical language, exceptions Sections2.4.5,2.6,2.7.pdfcase-semantics.ozsemantics.oz 03/22 Review for Exam I 03/26 Exam I 20% 03/29 Memory management, tail-form optimization, garbage collection Section2.5.pdfmemleak.oz 04/02 Exam I analysis 04/05 Iterative computation, higher order programming, abstract data types Sections3.1-3.2,3.6-3.7.pdffold.ozsqrt.ozstackADT.oz 04/09 State, object-oriented programming, inheritance, polymorphism Sections6.1-6.4,7.1-7.2.pdfc.javac1.javac2.javac3.javaoop.oz 04/12 Actors: a model of concurrent computation -- Programming Assignment 3 Due 04/27 actors.pdf 20% 04/16 SALSA concurrency: actor creation, asynchronous message passing, state encapsulation, token-passing continuations, named tokens, join blocks, first-class continuations SALSA-Concurrency.pdfCalculator.salsaCell.salsaCellTester.salsaFibonacci.salsaHelloWorld.salsaNDCellTester.salsa 04/19 SALSA distribution and mobility: universal naming, location-transparentcommunication, actor migration SALSA-Distributed.pdfAddressBook.salsaAddUser.salsaCell.salsaCellTester.salsaGetCellValue.salsaGetEmail.salsaMigrate.salsaMigrateCell.salsaMovingCellTester.salsareadme.txt 04/23 Concurrent and distributed programming patterns SALSA-Patterns.pdf 04/26 Declarative concurrency Chapter4.pdfdconcurrency.oz 04/30 Dynamic and static typing, parameter passing mechanisms, lazy evaluation Sections2.8.3,4.5,6.1-6.4.pdfcallbyneed.ozlazy-eval.oz 05/03 Review for Exam II 05/07 Exam II 20% Class Participation Extra-Credit 5% Reading Material Concepts,Techniques, and Models of Computer Programming by Van Roy, andHaridi. 1st Edition. MIT Press 2004. (Required Textbook)
ProgrammingLanguage Pragmatics by Scott. 2nd Edition. Morgan KaufmannPublishers. (Recommended Textbook)
Essentials ofProgramming Languages by Friedman, Wand, and Haynes. 2ndEdition. MIT Press. (Recommended Textbook)
A Foundation for Actor Computation by Agha, Mason, Smith, Talcott. pp. 1-27.
In Journal of Functional Programming, 1996.
ProgrammingDynamically Reconfigurable Open Systems with SALSA by Varela andAgha.
In ACM SigPlan Notices 36(12):20-34, OOPSLA 2001 IntriguingTechnology Track, December 2001.
The only formal prerequisite is CSE 143. We will very much rely on athorough understanding of the concepts from CSE 143 as well as Java programmingskills. We will go much further and you will be challenged to approach softwaredevelopment much differently than you have in CSE 143 or other courses.
Besides the required text, the following books may be helpful to you: The Pragmatic Programmer by Andrew Hunt and David Thomas, 20th anniversary (2nd) edition, Addison-Wesley, 2020. Contains a great deal of distilled wisdom about software construction and the craft of programming, including many things that those who read the book later in their careers wish they had learned early on.
Program Development in Java by Barbara Liskov and John Guttag, 1st ed, Addison Wesley, 2000. The content of this well-written book closely mirrors much of the content of the course. The only downside is that it was written 17 years ago, so it is out-of-date with regard to some of key parts of the Java language and libraries. Nonetheless, it is a good place to look for another presentation of the material covered in class, if you can ignore those parts.
Core Java Vol. I - Fundamentals by Cay Horstmann, 10th ed, Prentice-Hall, 2016; 11th ed, 2018. This is a good general reference for the Java language and basic libraries. While technical documentation for these things is available on the web, the discussions in a book like this one are usually easier to follow and typically include advice not found in the formal documentation. Either recent edition will cover what we need for CSE 331.
StructureLecturesEach lecture will be pre-recorded. The recordings should usually beavailable 20 hours before the date of the lecture on the calendar sothat every student has an opportunity to watch it beforehand.
Aaron has worked professionally on programming languages, most notably Clojure and ClojureScript. He is the creator of Repsheet, an open source threat intelligence toolkit; is the co-author of Programming Clojure, 2nd and 3rd Edition and a contributor to Functional Programming: A PragPub Anthology. 350c69d7ab