Transcript ppt
Programming Languages CSCI-4430 & CSCI-6430, Spring 2016 www.cs.rpi.edu/~milanova/csci4430/ Ana Milanova Lally Hall 314, 518 276-6887 [email protected] Office hours: Wednesdays Noon-2pm Lecture Outline Introduction Art of programming language design Programming language spectrum Why study programming languages? Overview of compilation Read: Scott Chapter 1 2 Introduction Course webpage http://www.cs.rpi.edu/~milanova/csci4430 Announcements – check regularly Schedule, Notes, Reading Homework Homework assignments posted there Homework server Schedule, lecture slides and assigned reading Homework submission and grades RPILMS Discussion board and grades Spring 16 CSCI 4430, A Milanova 3 Introduction Required textbook Programming Language Pragmatics, 3rd Edition, by Michael Scott, Morgan Kaufmann, 2009 Recommended textbook Compilers: Principles, Techniques, and Tools, 2nd Edition, by A. Aho, M. Lam, R. Sethi and J. Ullman, Addison Wesley, 2007 (as known as “The Dragon Book”) Spring 16 CSCI 4430, A Milanova 4 Introduction Syllabus www.cs.rpi.edu/~milanova/csci4430/syllabus.htm Topics, outcomes, policies and grading 2 midterm exams and a final exam: 50% 9 homework assignments: 42% 10 quizzes: 8% 2% extra credit for attendance and participation Spring 16 CSCI 4430, A Milanova 5 Introduction Homework is due at the beginning of lecture on the due date Submit written homework electronically in Homework server AND on paper at the beginning of lecture Submit programming homework in Homework server No late days! You may submit a late homework at the beginning of next lecture for 50% credit Spring 16 CSCI 4430, A Milanova 6 Introduction Quizzes 10 in-class quizzes Will cover material of previous week Work in groups is encouraged We will distribute quizzes at the beginning of lecture Keep and submit quiz at the end of class Spring 16 CSCI 4430, A Milanova 7 Introduction In-class exercises At the end of class, I may give a simple problem on the material we have just covered Work in groups and ask questions You can discuss or submit answers to receive feedback Participation in these exercises carries towards 2% extra credit Spring 16 CSCI 4430, A Milanova 8 Introduction Graduate students taking 6430 as part of the PhD qualifying exam To earn an A, you must earn 94% or more AND Complete (satisfactorily!) a paper critique Check syllabus www.cs.rpi.edu/~milanova/csci4430/syllabus.htm for details Spring 16 CSCI 4430, A Milanova 9 Random Notes… Prolog and Scheme programming assignments must be be completed individually Java programming assignment must be completed in teams of two using pairprogramming Ask questions: in class, after class, email, LMS Spring 16 CSCI 4430, A Milanova 10 Academic Integrity All written homework assignments must be completed individually Programming assignments, except for last one, must be completed individually Excessive similarities in homework and exams! will be considered cheating Incidents of cheating will be taken extremely seriously and will result in penalties Spring 16 CSCI 4430, A Milanova 11 How to Study Read textbook chapter in advance of lecture Read lecture notes and textbook chapter (again) immediately after class I will assign reading at the end of each class I will post lecture notes short after class Solve exercises in lecture notes Form study groups ASK QUESTIONS – in class, after class, etc. Spring 16 CSCI 4430, A Milanova 12 Course Topics Programming language syntax: Scanning and parsing Programming language semantics: Attribute grammars Naming, binding and scoping Data abstraction and types Control abstraction and parameter passing Concurrency A logic-oriented language: Prolog A functional language: Scheme Imperative languages An object-oriented language: Java A dynamic language: Python Spring 16 CSCI 4430, A Milanova 13 Lecture Outline Introduction to the course The art of programming language design The programming language spectrum Why study programming languages Overview of compilation Spring 16 CSCI 4430, A Milanova 14 The Art of Language Design Why are there so many languages? Different programming domains Business applications Manufacturing/control systems Reliability and non-stop operation Scientific applications Process data, reports, transactions, increasingly distributed Computationally intensive Personal preference… Spring 16 CSCI 4430, A Milanova 15 The Art of Language Design Some languages are more successful than others Expressive Power Abstraction Ease of use by novice Excellent compilers Powerful sponsors Circumstances… Spring 16 CSCI 4430, A Milanova 16 The Programming Language Spectrum Imperative languages Von Neumann languages: Fortran, C,… Object-oriented languages: Java, C++, Smalltalk,… Dynamic languages: Perl, Python, PHP,… Declarative languages Functional languages: Scheme/Lisp, ML, Haskell Logic languages: Prolog There are other declarative languages: e.g., dataflow languages 17 The Programming Language Spectrum Imperative languages Evolved from the von Neumann Architecture Variables Assignment Statements Spring 16 CSCI 4430, A Milanova. Graph: Sebesta, 2005 18 The Programming Language Spectrum Imperative languages j := i – j “von Neumann bottleneck”: tube connecting CPU and memory lw t0,28(sp) lw t1,24(sp) subu t2,t0,t1 sw t2,24(sp) Spring 16 CSCI 4430, A Milanova 19 The Programming Language Spectrum Imperative languages Most widely popular programming style FORTRAN, C, C++, C#, Java, Python, Visual BASIC, Perl, JavaScript, Ruby, etc. Variable and assignment statement are central concepts Program is a sequence of statements: j := i – j; k := j * l; Execution is a sequence of transitions on memory state Spring 16 CSCI 4430, A Milanova 20 The Programming Language Spectrum FORTRAN was invented in mid-1950 John Backus, the inventor of FORTRAN, wrote the following paper in 1979: “Can programming be liberated from the von Neumann style? A functional style and its algebra of programs” Problems with imperative languages Difficult to understand programs Difficult to reason about correctness of programs Von Neumann Bottleneck Spring 16 CSCI 4430, A Milanova 21 The Programming Language Spectrum Functional Programming Main alternative to imperative programming Lisp/Scheme, ML, Haskell Program consists of function definitions + evaluation expr (fun3 (fun2 (fun1 data))) (fun3 (fun2 data2)) (fun3 data3) data4 Execution is a sequence of function applications (i.e., reductions) Logic Programming Perform queries against knowledge base Prolog, Datalog, SQL Spring 16 CSCI 4430, A Milanova 22 An Example: Inner Product Inner product in FORTRAN: 1. C := 0; 2. for I := 1 step 1 until N do 3. C := C + a[I]* b[I]; Illustrates state-transition semantics Fall 16 CSCI 4430, A Milanova 23 An Example: Inner Product Inner product in FP: Function composition Def IP = (Insert +) º (ApplyToAll *) º Transpose IP <<1,2,3>,<6,5,4>> is (Insert +) ((ApplyToAll *) (Transpose <<1,2,3>,<6,5,4>>)) (Insert +) ((ApplyToAll *) <<1,6>,<2,5>,<3,4>>) (Insert +) <6,10,12> 28 Illustrates reduction (applicative) semantics 24 Why Study Programming Languages Goal of the course: learn to analyze programming languages What are the questions we ask when facing a new programming language Helps learn new languages, choose the right language for a problem, understand language features, design better languages! Spring 16 CSCI 4430, A Milanova 25 Lecture Outline Introduction to the course The art of language design The programming language spectrum Why study programming languages Overview of compilation Spring 16 CSCI 4430, A Milanova 26 Compilation and Interpretation Compilation Pure interpretation A “high-level” program is translated into executable machine code Compiler A program is translated and executed one statement at a time Interpreter Hybrid interpretation A program is “compiled” into intermediate code; intermediate code is “interpreted” Both a compiler and an interpreter Spring 16 CSCI 4430, A Milanova 27 Compilation COMPILER character stream Scanner (lexical analysis) token stream Parser (syntax analysis) parse tree Semantic analysis and intermediate code generation abstract syntax tree and/or intermediate form Machine-independent code improvement modified intermediate form Code Generation target language (assember) Machine-dependent code improvement modified target language Spring 16 CSCI 4430, A Milanova 28 Compilation position = initial + rate * 60; Scanner <id,1> <=> <id,2> <+> <id,3> <*> <60> Symbol table 1. position, … 2. initial, … 3. rate, … Parser Semantic analysis and intermediate code generation Spring 16 CSCI 4430, A Milanova 29 Compilation Semantic analysis and intermediate code generation = <id,1> + <id,2> Abstract Syntax Tree * <id,3> inttoreal 60 tmp1 = inttoreal (60) tmp2 = id3 * tmp1 tmp3 = id2 + tmp2 id1 = tmp3 Spring 16 CSCI 4430, A Milanova Intermediate form (three-address code) 30 Compilation Machine-independent code improvement tmp1 = id3 * 60.0 id1 = id2 + tmp1 Improved intermediate form Code generation movf id3, R2 mulf #60.0, R2 movf id2, R1 addf R2, R1 movf R1, id1 Target language 31 Pure Interpretation e.g. BASIC REM COMMENT LET X = 5 LET Y = 8 PRINT X PRINT Y LET Z = X PRINT Z ... Also JavaScript.... Spring 16 CSCI 4430, A Milanova 32 Hybrid Interpretation 09 99 19 09 99 19 09 99 AB 73 29 AB 73 29 AB 73 19 09 99 19 09 99 19 09 29 AB 73 29 AB 73 29 e.g. Java byte code e.g. Java Virtual Machine (JVM) Spring 16 CSCI 4430, A Milanova Also Perl.... 33 Compilation vs. Interpretation A language can be implemented using a compiler or using an interpreter One can build a compiler for Lisp and one can easily build an interpreter for C or Fortran However, language features (determined during language design) have tremendous impact on “compilability” and the decision “compiler vs. interpreter” Spring 16 CSCI 4430, A Milanova 34 Compilation vs. Interpretation What are the features that impact “compilability”? “Static” languages, i.e., languages that perform most semantic checks program execution, are suitable for compilation “Dynamic” languages, i.e., languages that perform most semantic checks execution, are suitable for interpretation Spring 16 CSCI 4430, A Milanova 35 Compilation vs. Interpretation Advantages of compilation? Faster execution Advantages of interpretation? Greater flexibility Sandboxing, source-level debugging, dynamic semantic (type) checks, other dynamic features are much easier Spring 16 CSCI 4430, A Milanova 36 Compilation vs. Interpretation New languages are increasingly dynamic Hybrid implementations are common: compiler from source to intermediate form, then a smart interpreter (Virtual Machine) which does interpretation and JIT (Just-in-Time) compilation Tons of code written in static languages (C, C++, Fortran) Dynamic instrumentation tools (Valgrind, Pin, DynamoRio) serve as “interpreters” for compiled binaries Spring 16 CSCI 4430, A Milanova 37 Next Class We will review regular expressions and context free grammars Read Chapter 2.1 and 2.2 from Scott’s book Spring 16 CSCI 4430, A Milanova 38 Spring 16 CSCI 4430, A Milanova 39