A Few Key Ideas • No particular language is a prerequisite for this course – However you should be proficient in at least one language – A working knowledge of C++ is worth pursuing as you go – We’ll work on many paradigms in C++ • “How we communicate influences how we think and vice versa.” – [Louden and Lambert 3rd Ed. pp. 2] • “Similarly, how we program computers influences how we think about computation, and vice versa.” – [Louden and Lambert 3rd Ed. pp. 2] CSE 425: Intro to Programming Languages and their Design Abstraction in Programming LD R1 FIRST 0010 001 000000100 (opcode) (register) (location) • Von Neumann Architecture – Program instructions and data are stored in a memory area – CPU executes a sequence of instructions • Machine instruction sets: lowest level of abstraction – Binary representation that the CPU can process – Or that a virtual machine can process (e.g., byte code) • Assembly language is only slightly more abstract – “Readable” labels: operations, registers, location addresses CSE 425: Intro to Programming Languages and their Design Evolving to Higher Levels of Abstraction • Algebraic notation and floating point numbers – E.g., Fortran (John Backus) • Structured abstractions and machine independence – E.g., ALGOL (a committee), Pascal (Niklaus Wirth) • Architecture independence (on beyond Von Neumann) – E.g., based on Lambda Calculus (Alonzo Church) – E.g., Lisp (John McCarthy) CSE 425: Intro to Programming Languages and their Design Data Abstraction • Basic abstractions – Variables, data types, declarations • Structured abstractions – Data structures, arrays • Unit abstractions – Abstract data types (ADTs), classes, packages, namespaces • Key ideas – Information hiding, modularity, reusability, interoperability CSE 425: Intro to Programming Languages and their Design Control Abstraction • Basic abstractions – Algebraic statements, “syntactic sugar” • Structured abstractions – Loops, branch instructions – Procedures, iterators, cursors, manipulators, etc. • Unit abstractions – ADTs, classes, packages, namespaces (same as for data!) • Key ideas – Selection, iteration, formal/actual parameters, composition CSE 425: Intro to Programming Languages and their Design Some Programming Paradigms • Imperative/procedural (E.g., C, C++) – Variables, assignment, other operators • Functional (E.g., Lisp, Scheme, ML, Haskell, C++) – Abstract notion of a function, based on lambda calculus • Logic (E.g., Prolog, but can develop structures in C++) – Based on symbolic logic (e.g., predicate calculus) • Object-oriented (E.g., Java, Python, C++) – Based on encapsulation of data and control together • Generic (E.g., C++ and especially its standard library) – Based on type abstraction and enforcement mechanisms – We’ll cover informally via examples throughout the semester CSE 425: Intro to Programming Languages and their Design Language Definition • Syntax – Lexical structure, tokens, grammars (E.g., BNF) • Basic semantics – Informal description, may be incomplete • Formal semantics – Operational semantics (execution specification) – Denotational semantics (specification as functions) – Axiomatic semantics (assertions about program state) CSE 425: Intro to Programming Languages and their Design Language Design • Goals (potentially conflicting) – Efficiency of coding or execution, writability, expressiveness • Specific design criteria – – – – – – Regularity (how well language features are integrated) Generality (how few cases have to be handled specially) Orthogonality (how widely features still behave the same) Uniformity (consistent appearance/behavior across features) Safety or “security” (how difficult it is to produce errors) Extensibility (how easy and effective is feature addition) CSE 425: Intro to Programming Languages and their Design Comparing Programming Languages • Different languages usually have different goals – E.g., C++ focuses on expressiveness and efficiency of execution, at some cost to writability and efficiency of coding • Accordingly, they may focus on different design criteria – E.g., although Java, C++, and Python are all designed with the object-oriented programming paradigm in mind… – … operator overloading increases extensibility but reduces safety (e.g., operator precedence of ^ for exponentiation) – … generality and uniformity are aided by a simpler and smaller set of language features – … and so forth CSE 425: Intro to Programming Languages and their Design Today’s Studio Exercises • We’ll explore Visual Studio and a few coding ideas – Built incrementally from simple to more complex abstractions • We’ll work in C++, a multi-paradigm language – Please form teams that put people less (or without a) C++ background together with those familiar with C++ – Ask for help as needed – Use the on-line C++ reference and also the material at http://www.cse.wustl.edu/~cdgill/courses/cse332/ • Record your answers as you go and e-mail them (with the studio name in the subject line), when you’re done – E-mail them to the course account, cse425@seas.wustl.edu – You should get an e-mail back acknowledging receipt – Please track which studios you have (and have not) sent CSE 425: Intro to Programming Languages and their Design