I. course summary A. review of syllabus ------------------------------------------ WHAT WE STUDIED Models - Declarative + Exceptions + Security - Concurrent (data-driven) + By-need evaluation (demand-driven) - Message Passing Programming - Functional - Declarative - Declarative Concurrent - Message passing ------------------------------------------ What's the difference between the declarative and functional models? What does the declarative concurrent model add? What does the message passing model add? What does the relational model add? Does the relational model still have message passing features? B. language design and model ideas ------------------------------------------ WHAT DID WE LEARN ABOUT COMPUTATION MODELS AND LANGUAGE DESIGN? ------------------------------------------ What primitives are helpful, powerful? What techniques? What principles? C. Programming lessons What did you learn about programming from each? ------------------------------------------ WHAT DID WE LEARN ABOUT PROGRAMMING? ------------------------------------------ 1. Declarative 2. Declarative concurrency 3. Message Passing 4. Explicit State 5. Relational (logic programming) 6. Comparison What are the advantages and disadvantages (limits) of each paradigm? How do they compare for making programming easier? D. what's the value of all this? ------------------------------------------ WHAT'S THE VALUE OF ALL THIS? Programming is language design: - make it easy for your users - give them good notation - provide primitives, ways to combine them, and abstraction facilities Kernel language approach: - find primitives that give new power - add sugars on top of these ------------------------------------------ E. where to go from here ------------------------------------------ WHERE TO GO FROM HERE Further classes: - COP 5021 Program Analysis ------------------------------------------ II. style (or model) vs. problems A. styles vs. kinds of problems that work well ------------------------------------------ WHAT KINDS OF PROBLEMS WORK WELL IN... Declarative (+ higher-order) style? Declarative Concurrent (+ demand-driven) style? Message Passing style? Relational (logic programming) style? Explicit State (ADT, OO) style? ------------------------------------------ B. What kinds of things are not easily done in a given style? ------------------------------------------ WHAT IS NOT EASILY DONE IN ... Declarative style? Declarative Concurrent style? Message Passing style? Relational style? Explicit State (ADT, OO) style? ------------------------------------------