X

Download Overview Programming Languages PowerPoint Presentation

SlidesFinder-Advertising-Design.jpg

Login   OR  Register
X


Iframe embed code :



Presentation url :

Home / Education & Training / Education & Training Presentations / Overview Programming Languages PowerPoint Presentation

Overview Programming Languages PowerPoint Presentation

Ppt Presentation Embed Code   Zoom Ppt Presentation

PowerPoint is the world's most popular presentation software which can let you create professional Overview Programming Languages powerpoint presentation easily and in no time. This helps you give your presentation on Overview Programming Languages in a conference, a school lecture, a business proposal, in a webinar and business and professional representations.

The uploader spent his/her valuable time to create this Overview Programming Languages powerpoint presentation slides, to share his/her useful content with the world. This ppt presentation uploaded by onlinesearch in Education & Training ppt presentation category is available for free download,and can be used according to your industries like finance, marketing, education, health and many more.

About This Presentation

Overview Programming Languages Presentation Transcript

Slide 1 - slide 1 Vitaly Shmatikov CS 345 Potted History of Programming Languages
Slide 2 - slide 2 Algorithm Abu Ja’far Muhammad ibn Musa al-Khorezmi (“from Khorezm”) Lived in Baghdad around 780 – 850 AD Chief mathematician in Khalif Al Mamun’s “House of Wisdom” Author of “A Compact Introduction To Calculation Using Rules Of Completion And Reduction” Removing negative units from the equation by adding the same quantity on the other side (“al-gabr” in Arabic)
Slide 3 - slide 3 “Calculus of Thought” Gottfried Wilhelm Leibniz 1646 - 1716 Inventor of calculus and binary system “Calculus ratiocinator”: human reasoning can be reduced to a formal symbolic language, in which all arguments would be settled by mechanical manipulation of logical concepts Invented a mechanical calculator
Slide 4 - slide 4 Formalisms for Computation (1) Predicate logic Gottlöb Frege (1848-1925) Formal basis for proof theory and automated theorem proving Logic programming Computation as logical deduction Turing machines Alan Turing (1912-1954) Imperative programming Sequences of commands, explicit state transitions, update via assignment
Slide 5 - slide 5 Formalisms for Computation (2) Lambda calculus Alonzo Church (1903-1995) Formal basis for all functional languages, semantics, type theory Functional programming Pure expression evaluation, no assignment operator Recursive functions & automata Stephen Kleene (1909-1994) Regular expressions, finite-state machines, PDAs
Slide 6 - slide 6 Church’s Legacy Alonzo Church (PhD Princeton 1927) Hartley Rogers (PhD Princeton 1952) Albert Meyer (PhD Harvard 1972) Vitaly Shmatikov (PhD Stanford 2000) John Mitchell (PhD MIT 1984) … 1916 other academic descendants Recursion theory Semantics, concurrency Theory of object-oriented languages
Slide 7 - slide 7 Church’s Thesis All these different syntactic formalisms describe the same class of mathematical objects Church’s Thesis: “Every effectively calculable function (effectively decidable predicate) is general recursive” Turing’s Thesis: “Every function which would be naturally regarded as computable is computable by a Turing machine” Recursion, lambda-calculus and Turing machines are equivalent in their expressive power Why is this a “thesis” and not a “theorem”?
Slide 8 - slide 8 Formalisms for Computation (3) Combinatory logic Moses Schönfinkel (1889-1942??) Haskell Curry (1900-1982) Post production systems Emil Post (1897-1954) Markov algorithms Andrey Markov (1903-1979)
Slide 9 - slide 9 Programming Language Formal notation for specifying computations Syntax (usually specified by a context-free grammar) Semantics for each syntactic construct Practical implementation on a real or virtual machine Translation vs. compilation vs. interpretation C++ was originally translated into C by Stroustrup’s Cfront Java originally used a bytecode interpreter, now native code compilers are commonly used for greater efficiency Lisp, Scheme and most other functional languages are interpreted by a virtual machine, but code is often precompiled to an internal executable for efficiency Efficiency vs. portability
Slide 10 - slide 10 Assembly Languages Invented by machine designers the early 1950s Mnemonics instead of binary opcodes push ebp mov ebp, esp sub esp, 4 push edi Reusable macros and subroutines
Slide 11 - slide 11 FORTRAN Procedural, imperative language Still used in scientific computation Developed at IBM in the 1950s by John Backus (1924-2007) Backus’s 1977 Turing award lecture (see course website) made the case for functional programming On FORTRAN: “We did not know what we wanted and how to do it. It just sort of grew. The first struggle was over what the language would look like. Then how to parse expressions – it was a big problem…” BNF: Backus-Naur form for defining context-free grammars
Slide 12 - slide 12 From FORTRAN to LISP “Anyone could learn Lisp in one day, except that if they already knew FORTRAN, it would take three days” - Marvin Minsky
Slide 13 - slide 13 LISP Invented by John McCarthy (b. 1927, Turing award: 1971) See original paper on course website Formal notation for lambda-calculus Pioneered many PL concepts Automated memory management (garbage collection) Dynamic typing No distinction between code and data Still in use: ACL2, Scheme, …
Slide 14 - slide 14 LISP Quotes “The greatest single programming language ever designed” --Alan Kay “LISP being the most powerful and cleanest of languages, that's the language that the GNU project always prefer” -- Richard Stallman “Programming in Lisp is like playing with the primordial forces of the universe. It feels like lightning between your fingertips.” -- Glenn Ehrlich “Lisp has all the visual appeal of oatmeal with fingernail clippings mixed in” -- Larry Wall “LISP programmers know the value of everything and the cost of nothing” -- Alan Perlis
Slide 15 - slide 15 Algol 60 Designed in 1958-1960 Great influence on modern languages Formally specified syntax (BNF) Peter Naur: 2005 Turing award Lexical scoping: begin … end or {…} Modular procedures, recursive procedures, variable type declarations, stack storage allocation “Birth of computer science” -- Dijkstra “A language so far ahead of its time that it was not only an improvement on its predecessors, but also on nearly all its successors” -- Hoare
Slide 16 - slide 16 Algol 60 Sample real procedure average(A,n); real array A; integer n; begin real sum; sum := 0; for i = 1 step 1 until n do sum := sum + A[i]; average := sum/n end;
Slide 17 - slide 17 Algol Oddity Question Is x := x equivalent to doing nothing? Interesting answer in Algol integer procedure p; begin … p := p … end; Assignment here is actually a recursive call
Slide 18 - slide 18 Some Trouble Spots in Algol 60 Type discipline improved by later languages Parameter types can be array No array bounds Parameter type can be procedure No argument or return types for procedure parameter Parameter passing methods Pass-by-name had various anomalies “Copy rule” based on substitution, interacts with side effects Pass-by-value expensive for arrays Some awkward control issues Goto out of block requires memory management
Slide 19 - slide 19 Algol 60 Pass-by-Name Substitute text of actual parameter Unpredictable with side effects! Example procedure inc2(i, j); integer i, j; begin i := i+1; j := j+1 end; inc2 (k, A[k]); begin k := k+1; A[k] := A[k] +1 end; Is this what you expected?
Slide 20 - slide 20 Algol 60 Legacy “Another line of development stemming from Algol 60 has led to languages such as Pascal and its descendants, e.g., Euclid, Mesa, and Ada, which are significantly lower­level than Algol. Each of these languages seriously restricts the block or procedure mechanism of Algol by eliminating features such as call by name, dynamic arrays, or procedure parameters.” - John C. Reynolds
Slide 21 - slide 21 Algol 68 Very elaborate type system Complicated type conversions Idiosyncratic terminology Types were called “modes” Arrays were called “multiple values” vW grammars instead of BNF Context-sensitive grammar invented by A. van Wijngaarden Eliminated pass-by-name Considered difficult to understand
Slide 22 - slide 22 Pascal Designed by Niklaus Wirth 1984 Turing Award Revised type system of Algol Good data structure concepts Records, variants, subranges More restrictive than Algol 60/68 Procedure parameters cannot have procedure parameters Popular teaching language Simple one-pass compiler
Slide 23 - slide 23 Limitations of Pascal Array bounds part of type procedure p(a: array [1..10] of integer) procedure p(n: integer, a: array [1..n] of integer) Not successful for “industrial-strength” projects See Kernighan’s “Why Pascal is not my favorite language” on the course website Attempt at orthogonal design backfires Parameter must be given a type Type cannot contain variables How could this have happened? Emphasis on teaching!
Slide 24 - slide 24 SIMULA 67 Ole-Johan Dahl (1931-2002) Kristen Nygaard (1926-2002) Joint 2001 Turing Award First object-oriented language Objects and classes Subclasses and inheritance Virtual procedures
Slide 25 - slide 25 BCPL / B / C Family Born of frustration with big OSes and big languages (Multics, PL/I, Algol 68) Keep lexical scope and recursion Low-level machine access Manual memory management Explicit pointer manipulation Weak typing (introduced in C) Systems programming for small-memory machines PDP-7, PDP-11, later VAX, Unix workstations and PCs C has been called a “portable assembly language”
Slide 26 - slide 26 BCPL Designed by Martin Richards (1966) Emphasis on portability and ease of compilation Front end: parse + generate code for virtual machine Back end: translate code for native machine Single data type (word), equivalence of pointers and arrays, pointer arithmetic – this is unusual! “The philosophy of BCPL is not one of the tyrant who thinks he knows best and lays down the law on what is and what is not allowed; rather, BCPL acts more as a servant offering his services to the best of his ability without complaint, even when confronted with apparent nonsense. The programmer is always assumed to know what he is doing and is not hemmed in by petty restrictions.”
Slide 27 - slide 27 Arrays and Pointers An array is treated as a pointer to first element BCPL: let V = vec 10 V!i to index the ith array element C: A[i] is equivalent to pointer dereference *( (A) + (i) )
Slide 28 - slide 28 B “BCPL squeezed into 8K bytes of memory & filtered through Ken Thompson’s brain” Very compact syntax One-pass compiler on a small-memory machine Generates intermediate “threaded code,” not native code No nested scopes Assignment: = instead of Algol-style := How many times have you written if (a=b) { … } ? Pre-/postfix notation: x++ instead of x:=x+1 Null-terminated strings In C, strings are null-terminated sequences of bytes referenced either by a pointer-to-char, or an array variable s[]
Slide 29 - slide 29 Lex the Language Lawyer ++x++ This is evaluated first Now C++ … class DoublePlus { public: // prefix operator DoublePlus operator++() { … } // postfix operator DoublePlus operator++(int) { … } }; Increments x, returns old value Can only be applied to l-value (more about this later in the course) Not an l-value! This is illegal in C! What is this for?
Slide 30 - slide 30 More Fun with Prefix and Postfix x+=x++ ++x + x++ What do these mean?
Slide 31 - slide 31 C Bell Labs 1972 (Dennis Ritchie) Development closely related to UNIX 1983 Turing Award to Thompson and Ritchie Added weak typing to B int, char, their pointer types Typed arrays = typed pointers int a[10]; … x = a[i]; means x = *(&a[0]+i*sizeof(int)) Compiles to native code
Slide 32 - slide 32 Types in C Main difference between B and C Syntax of type rules influenced by Algol 68 int i, *pi, **ppi; int f(), *f(), **f(), *(*pf)(), (*pf)(int); int *api[10], (*pai)[10]; Also structs and unions What do these declarations mean?
Slide 33 - slide 33 Evolution of C 1973-1980: new features; compiler ported unsigned, long, union, enums 1978: K&R C book published 1989: ANSI C standardization Function prototypes as in C++ 1999: ISO 9899:1999 also known as “C99” Inline functions, C++-like decls, bools, variable arrays Concurrent C, Objective C, C*, C++, C# “Portable assembly language” Early C++, Modula-3, Eiffel source-translated to C
Slide 34 - slide 34 C++ Bell Labs 1979 (Bjarne Stroustrup) “C with Classes” (C++ since 1983) Influenced by Simula Originally translated into C using Cfront, then native compilers GNU g++ Several PL concepts Multiple inheritance Templates / generics Exception handling
Slide 35 - slide 35 Java Sun 1991-1995 (James Gosling) Originally called Oak, intended for set top boxes Mixture of C and Modula-3 Unlike C++ No templates (generics), no multiple inheritance, no operator overloading Like Modula-3 (developed at DEC SRC) Explicit interfaces, single inheritance, exception handling, built-in threading model, references & automatic garbage collection (no explicit pointers!) “Generics” added later
Slide 36 - slide 36 Other Important Languages Algol-like Modula, Oberon, Ada Functional ISWIM, FP, SASL, Miranda, Haskell, LCF, ML, Caml, Ocaml, Scheme, Common LISP Object-oriented Smalltalk, Objective-C, Eiffel, Modula-3, Self, C#, CLOS Logic programming Prolog, Gödel, LDL, ACL2, Isabelle, HOL
Slide 37 - slide 37 … And More Data processing and databases Cobol, SQL, 4GLs, XQuery Systems programming PL/I, PL/M, BLISS Specialized applications APL, Forth, Icon, Logo, SNOBOL4, GPSS, Visual Basic Concurrent, parallel, distributed Concurrent Pascal, Concurrent C, C*, SR, Occam, Erlang, Obliq
Slide 38 - slide 38 Forth Program BIOS, bootloaders, device firmware Sun BIOS, Lockheed Martin’s missile tracking, FedEx barcode readers … hex 4666 dup negate do i 4000 dup 2* negate do 2a 0 dup 2dup 1e 0 do 2swap * d >>a 4 pick + -rot - j + dup dup * e >>a rot dup dup * e >>a rot swap 2dup + 10000 > if 3drop 2drop 20 0 dup 2dup leave then loop 2drop 2drop type 268 +loop cr drop 5de +loop
Slide 39 - slide 39 APL Computation-intensive tasks, esp. in finance Mortgage cash flow analysis, insurance calculations, … Got this?
Slide 40 - slide 40 Brave New World Programming tool “mini-languages” awk, make, lex, yacc, autoconf … Command shells, scripting and “web” languages sh, csh, tcsh, ksh, zsh, bash … Perl, JavaScript, PHP, Python, Rexx, Ruby, Tcl, AppleScript, VBScript … Web application frameworks and technologies ASP.NET, AJAX, Flash, Silverlight … Note: HTML/XML are markup languages, not programming languages, but they often embed executable scripts like Active Server Pages (ASPs) & Java Server Pages (JSPs)
Slide 41 - slide 41 Why So Many Languages? “There will always be things we wish to say in our programs that in all languages can only be said poorly.” - Alan Perlis
Slide 42 - slide 42 What’s Driving Their Evolution? Constant search for better ways to build software tools for solving computational problems Many PLs are general purpose tools Others are targeted at specific kinds of problems For example, massively parallel computations or graphics Useful ideas evolve into language designs Algol  Simula  Smalltalk  C with Classes  C++ Often design is driven by expediency Scripting languages: Perl, Tcl, Python, PHP, etc. “PHP is a minor evil perpetrated by incompetent amateurs, whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals.” - Jon Ribbens
Slide 43 - slide 43 What Do They Have in Common? Lexical structure and analysis Tokens: keywords, operators, symbols, variables Regular expressions and finite automata Syntactic structure and analysis Parsing, context-free grammars Pragmatic issues Scoping, block structure, local variables Procedures, parameter passing, iteration, recursion Type checking, data structures Semantics What do programs mean and are they correct
Slide 44 - slide 44 Core Features vs. Syntactic Sugar What is the core high-level language syntax required to emulate a universal Turing machine? What is the core syntax of C? Are ++, --, +=, -=, ?:, for/do/while part of the core? Convenience features? Structures/records, arrays, loops, case/switch? Preprocessor macros (textual substitution) Run-time libraries String handling, I/O, system calls, threads, networking, etc. “Syntactic sugar causes cancer of the semicolons” - Alan Perlis
Slide 45 - slide 45 Final Thoughts There will be new languages invented You will have to spend time learning them on your own! For now, enjoy the luxury of being able to take a class Conflicting goals for language design can lead to feature creep and hideous complexity Exhibit A: PL/I Exhibit B: C++ Then someone gets fed up … A language that adopts the original simple and elegant ideas, while eliminating the complexity (e.g., Java)