Presentation is loading. Please wait.

Presentation is loading. Please wait.

By Neng-Fa Zhou1 Evolution of programming languages –Machine language –Assembly language –Sub-routines and loop (Fortran) –Procedures and recursion (Algol,

Similar presentations


Presentation on theme: "By Neng-Fa Zhou1 Evolution of programming languages –Machine language –Assembly language –Sub-routines and loop (Fortran) –Procedures and recursion (Algol,"— Presentation transcript:

1 by Neng-Fa Zhou1 Evolution of programming languages –Machine language –Assembly language –Sub-routines and loop (Fortran) –Procedures and recursion (Algol, Pascal, C) –Modules (Modula-2, Ada) –Objects (Simula, Smalltalk, C++,Java) –Declarative programming languages (Prolog, CLP, Lisp, ML, Haskall)

2 by Neng-Fa Zhou2 Why are there so many languages 4 Evolution –Procedural  structural  object-oriented 4 New paradigms and applications –Logic languages (Prolog, CLP) for complex data and knowledge processing –Functional languages (Lisp, ML, Haskell) for symbolic computation –Scripting languages (JavaScript, Pearl, Tcl, Python, Ruby, XSLT) for Web-based data processing 4 Personal preferences

3 by Neng-Fa Zhou3 What makes a language successful 4 Expressiveness 4 Availability of implementations 4 Efficiency 4 Productivity 4 Industrial sponsorships

4 by Neng-Fa Zhou4 Why study programming languages 4 Understand language features and concepts at a higher level 4 Improve the ability to choose appropriate languages 4 Increase the ability to learn new languages 4 Simulate useful features

5 by Neng-Fa Zhou5 Why study language implementation 4 Understand how languages are specified and implemented 4 Understand obscure phenomena 4 Write better-style and efficient programs 4 Design and implement domain-specific languages

6 by Neng-Fa Zhou6 Programming language spectrum 4 Declarative –Logic and constraint-based (Prolog, CLP(FD)) –Functional (Lisp/Scheme, ML, Haskell) –Dataflow (Id, Val) –Template-based (XSLT) –Database (SQL) 4 Imperative –von Neumann (C, Ada, Fortran, Pascal,…) –Scripting (Perl, Python, PHP,…) –Object-oriented (Smalltalk, Effel, C++, Java, C#)

7 by Neng-Fa Zhou7 Imperative 4 Features –Variables are mnemonics of memory locations –Assignment statements –goto –Iterative constructs

8 by Neng-Fa Zhou8 Stack in C typedef struct NodeStruct { int val; struct NodeStruct *next; } Node, *NodePtr, *List; typedef struct StackStruct { int size; List elms; } Stack, *StackPtr;

9 by Neng-Fa Zhou9 Stack in C (Cont.) void stack_push(StackPtr s, int x){ s->size++; lst_add(&s->elms,x); } int stack_pop(StackPtr s){ if (s->size==0){ error("empty stack"); } else { s->size--; return lst_remove(&s->elms); }

10 by Neng-Fa Zhou10 Object-oriented 4 Features –Abstract data types –Inheritance and overriding –Polymorphism –Dynamic binding

11 by Neng-Fa Zhou11 Stack in Java import java.util.LinkedList; class MyStack { private LinkedList elms; public MyStack() { elms = new LinkedList (); } public void push(int x) { elms.addFirst(x); } public int pop() { if (elms.size()==0){ throw new RuntimeException("Empty stack"); } else return elms.removeFirst(); }

12 Stack in C# by Neng-Fa Zhou12 using System; using System.Collections.Generic; class MyStack { private LinkedList elms; public MyStack() { elms = new LinkedList (); } public void push(int x) { elms.AddFirst(x); } public int pop() { if (elms.Count==0){ throw new System.Exception("stack underflow"); } else { int tmp = elms.First.Value; elms.RemoveFirst(); return tmp; }

13 by Neng-Fa Zhou13 Stack in C++ class Stack { public: Stack(); void push(int); int pop(); private: list elms; }; Stack::Stack(){ } void Stack::push(int x){ elms.push_front(x); } int Stack::pop(){ assert(!elms.empty()); int x = elms.front(); elms.pop_front(); return x; }

14 by Neng-Fa Zhou14 Functional 4 Features –Single assignment variables (no side effects) –Recursion –Rule-based and pattern matching (ML, Haskell) –High-order functions –Lazy evaluation (Haskell) –Meta-programming (Scheme)

15 by Neng-Fa Zhou15 Stack in Scheme (define stack_push (lambda (s x) (cons x s))) (define stack_peek (lambda (s) (if (eq? s ()) (raise "empty stack") (car s)))) (define stack_pop (lambda (s) (if (eq? s ()) (raise "empty stack") (cdr s))))

16 by Neng-Fa Zhou16 Stack in Haskell stack_push s x = (x:s) stack_peek (x:_) = x stack_pop (_:s) = s

17 by Neng-Fa Zhou17 Stack in SML/NJ fun stack_push s x = (x::s) fun stack_peek (x::s) = x fun stack_pop (_::s) = s

18 by Neng-Fa Zhou18 F# let stack_push s x = x :: s let stack_peek s = match s with | x :: _ -> x let stack_pop s = match s with | _ ::s1 -> s1

19 by Neng-Fa Zhou19 Logic & constraint-based 4 Features –Logic variables –Recursion –Unification –Backtracking –Meta-programming

20 by Neng-Fa Zhou20 Stack in Prolog stack_push(S,X,[X|S]). stack_pop([X|S],X,S).

21 by Neng-Fa Zhou21 Implementation methods 4 Compilation – Translate high-level program to machine code Slow translation Fast execution 4 Pure interpretation –No translation Slow execution Becoming rare 4 Hybrid implementation systems –Small translation cost –Medium execution speed

22 by Neng-Fa Zhou22 Review questions 4 Why are there so many programming languages? 4 What makes a programming language successful? 4 Why is it important to study programming languages? 4 Name two languages in each of the following paradigms: procedural, OOP, logic, and functional. 4 What are the features of OOP languages? 4 What are the features of functional languages? 4 What are the features of logic languages?


Download ppt "By Neng-Fa Zhou1 Evolution of programming languages –Machine language –Assembly language –Sub-routines and loop (Fortran) –Procedures and recursion (Algol,"

Similar presentations


Ads by Google