* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download paradigm
Go (programming language) wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Logic programming wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Programming language wikipedia , lookup
C Sharp (programming language) wikipedia , lookup
Object-oriented programming wikipedia , lookup
Reactive programming wikipedia , lookup
Programming Languages 2nd edition Tucker and Noonan Chapter 1 Overview A good programming language is a conceptual universe for thinking about programming. A. Perlis Copyright © 2006 The McGraw-Hill Companies, Inc. Paradigms of Programming Languages A programming paradigm is a pattern of problemsolving thought that underlies a particular genre of programs and languages. There are four main programming paradigms: – Imperative – Object-oriented – Functional – Logic (declarative) Copyright © 2006 The McGraw-Hill Companies, Inc. Imperative Paradigm Follows the classic von Neumann-Eckert model: – Program and data are indistinguishable in memory – Program = a sequence of commands – State = values of all variables when program runs – Large programs use procedural abstraction Example imperative languages: – Cobol, Fortran, C, Ada, Perl, … Copyright © 2006 The McGraw-Hill Companies, Inc. The von Neumann-Eckert Model Copyright © 2006 The McGraw-Hill Companies, Inc. Object-oriented (OO) Paradigm An OO Program is a collection of objects that interact by passing messages that transform the state. When studying OO, we learn about: – Sending Messages – Inheritance – Polymorphism Example OO languages: Smalltalk, Java, C++, C#, and Python Copyright © 2006 The McGraw-Hill Companies, Inc. Functional Paradigm Functional programming models a computation as a collection of mathematical functions. – Input = domain – Output = range Functional languages are characterized by: – Functional composition – Recursion Example functional languages: – Lisp, Scheme, ML, Haskell, … Copyright © 2006 The McGraw-Hill Companies, Inc. Functional vs Imperative • Compute Factorial Function – In Imperative Programming Languages: fact(int n) { if (n <= 1) return 1; else return n * fact(n-1); } – In Functional Programming Languages: Scheme (define (fact n) (if (< n 1) 1 (* n (fact (- n 1))) )) Copyright © 2006 The McGraw-Hill Companies, Inc. Logic Paradigm Logic programming declares what outcome the program should accomplish, rather than how it should be accomplished. When studying logic programming we see: – Programs as sets of constraints on a problem – Programs that achieve all possible solutions – Programs that are nondeterministic Example logic programming languages: – Prolog Copyright © 2006 The McGraw-Hill Companies, Inc. Logic vs Imperative • Concatenate two strings: – In Imperative Programming Languages: – In Logic Programming Languages: Prolog append([], X , X). Appending the empty list to any list (X) returns an unchanged list (X again). append([Head|Tail], Y, [Head|Z]) :- append(Tail, Y, Z) If Tail is appended to Y to get Z, then a list one element larger [Head | Tail] can be appended to Y to get [Head | Z]. Copyright © 2006 The McGraw-Hill Companies, Inc. Example append([english, russian], [spanish], L) H= english, Tail = [russian], Y=[spanish], L=[english|Z] append([russian],[spanish],[Z]) H=russian, Tail=[], Y=[spanish], [Z]=[russian|Z’] append([],[spanish],[Z’]). X =[spanish], Z’ = [spanish] append([], [spanish], [spanish]) Copyright © 2006 The McGraw-Hill Companies, Inc. A Brief History of Programming Languages Copyright © 2006 The McGraw-Hill Companies, Inc. What makes a successful language? Key characteristics: – Simplicity and readability – Clarity about binding – Reliability – Support – Abstraction – Orthogonality – Efficient implementation Copyright © 2006 The McGraw-Hill Companies, Inc. Simplicity and Readability • Small instruction set – Is a smaller number of instructions better? • Simple syntax – More than one way to accomplish a particular op, – A single op has more than one meaning • Benefits: – Ease of learning – Ease of programming Copyright © 2006 The McGraw-Hill Companies, Inc. Reliability A language is reliable if: – Program behavior is the same on different platforms • E.g., early versions of Fortran – Type errors are detected • E.g., C vs Haskell – Semantic errors are properly trapped • E.g., C vs C++ – Memory leaks are prevented • E.g., C vs Java Copyright © 2006 The McGraw-Hill Companies, Inc. Language Support • Accessible (public domain) compilers/interpreters • Good texts and tutorials • Wide community of users • Integrated with development environments (IDEs) Copyright © 2006 The McGraw-Hill Companies, Inc. Abstraction in Programming • Data – Programmer-defined types/classes – Class libraries • Procedural – Programmer-defined functions – Standard function libraries Copyright © 2006 The McGraw-Hill Companies, Inc. Orthogonality A language is orthogonal if its features are built upon a small, mutually independent set of primitive operations. • Fewer exceptional rules = conceptual simplicity – E.g., restricting types of arguments to a function • Tradeoffs with efficiency Copyright © 2006 The McGraw-Hill Companies, Inc. Compilers and Virtual Machines Compiler – produces machine code Interpreter – executes instructions on a virtual machine • Example compiled languages: – Fortran, Cobol, C, C++ • Example interpreted languages: – Scheme, Haskell, Python • Hybrid compilation/interpretation – The Java Virtual Machine (JVM) Copyright © 2006 The McGraw-Hill Companies, Inc. The Compiling Process Copyright © 2006 The McGraw-Hill Companies, Inc. The Interpreting Process Copyright © 2006 The McGraw-Hill Companies, Inc.