* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download CS 214 Programming Languages
Ada (programming language) wikipedia , lookup
Join-pattern wikipedia , lookup
Name mangling wikipedia , lookup
Assembly language wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Control flow wikipedia , lookup
Reactive programming wikipedia , lookup
Interpreter (computing) wikipedia , lookup
Programming language wikipedia , lookup
Logic programming wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Structured programming wikipedia , lookup
Functional programming wikipedia , lookup
Go (programming language) wikipedia , lookup
CS 214 Programming Languages Spring 2010 Details  Course homepage: cs.calvin.edu/curriculum/cs/214/  Important dates:  February 19: Project language choice  March 5: Test 1  March 19: Project proposal  April 16: Test 2  May 10-12: Final project presentations  Final Exam: May 15, 1:30p Programming Language History  In the beginning… 0010 1011 1000 0000 0010 1111 1000 0100 0011 0011 1000 1000  Binary machine language  Difficult to write  Prone to programmer errors  Difficult to debug Assembly Languages  Mnemonic for each operation  Symbolic names instead of memory addresses MOV ADD STO 0010 1011 0010 1111 0011 0011 MOV I ADD J STO K I J K 1000 0000 1000 0100 1000 1000 0010 1011 1000 0000 0010 1111 1000 0100 0011 0011 1000 1000  Programs called assemblers automate translation Assembly Languages  Pros:  Not quite so cumbersome  Somewhat less error prone  Cons:  Not portable  Not intuitive High Level Languages  Rear Admiral Grace Hopper  1952: Develops first compiler called, simply, A  The Idea: Write code independent of the machine-level details  Use a compiler to translate into machine language k = i + j; MOV I ADD J STO K 0010 1011 1000 0000 0010 1111 1000 0100 0011 0011 1000 1000 compiler assembler Edsger Dijkstra Quotes  The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.  It is practically impossible to teach good programming to students who have had prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.  APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums. High Level Languages 1950s  1957: Backus et al design FORTRAN  FORmulaTRANslation; for scientific users  Subsequent versions in ‘58, ‘62, ‘77, ‘90, ‘95  1959: Hopper et al design COBOL  Emphasized readability; for business users  Introduced If-Then-Else statement  1959: McCarthy designs LISP  LISt Processing; introduced the linked list as primitive type  First functional programming language (every op is a function)  Also introduced dynamic scope, garbage collection Early 1960s  1960: Wirth et al design Algol-60  ALGOrithmic Language: designed for encoding algorithms  Introduces block structure: basis for structured programming  Introduces procedures: basis for procedural programming  1964: Wirth designs Algol-W, with the case statement  1964: Kemeny and Kurtz design BASIC  1965: IBM designs PL-1  Introduces multi-tasking, exception-handling  1967: Nyquist & Dahl design Simula  SIMULAtion HLL; introduces class construct  Laid foundation for O-O programming Late 1960s and early 1970s  1968: Wirth designs Algol-68  Introduces If-Then-Elseif statement; pointer variables  1970: Wirth designs Pascal  Consolidates Algol-x features into one simple language  1970: Ritchie designs C for OS implementation (Unix)  Provides direct hardware access, separate compilation/linking  AKA “high level assembly language” and “Fortran done right”  1972: Colmerauer, Roussel & Kowalski design Prolog  PROgramming LOGic; designed for logic programming  Logic/predicate-based HLL for programming inferences  First logic HLL; used in expert systems 1970s continued  1977: Gordon & Milner design ML (MetaLanguage)  Hybrid HLL: functional, with inference rules (Prolog)  Allows linked ADTs to be defined without pointers (recursively)  AKA a “higher level language”  1979: Hoare designs CSP  Introduces support for concurrent programming  1980: Xerox PARC team designs Smalltalk  First pure object-oriented language (inheritance, polymorphism)  Program statements translated to byte code, not machine code  Introduces virtual machine to execute byte code  Functions replaced by methods, calls by messages Early 1980s  1980: Wirth designs Modula-2  Introduces the module - a container for types and operations  1981: DOD designs Ada  Algol-family HLL  Introduces generic types, task synchronization (rendezvous)  1983: May designs Occam  Concurrent HLL based on CSP  1983: LLNL designs SISAL  Concurrent HLL for array-processing on supercomputers  1984: Sussman & Abelson design Scheme  Simplified easier-to-use Lisp, with static scope Later 1980s  1984: Jordan designs The Force  First HLL for programming SIMD multiprocessors  1986: Stroustrup designs C++  Hybrid language: (procedural) C with object-oriented features  Parameterized types via macro-substitution (templates)  1987: Wall designs Perl  Interpreted procedural language; features of C, sh, awk, sed, Lisp  1988: Wirth designs Oberon  Algol-family with features for OO and systems programming  1988: Mehrotra & van Rosendale design Kali  First language for programming MIMD multiprocessors Early 1990s  1990: Hudak & Wadler design Haskel  Hybrid language: functional and OO features  1990: van Rossum designs Python  Scripting language; features from Perl, Scheme, Smalltalk, Tcl  Focus on readability, ease for the person instead of the machine  1991: Microsoft designs Visual Basic  BASIC with integrated support for building GUIs  Later versions add OO features  VB controls are most-reused “objects” in the world  1993: High Performance Fortran (HPF) released  Fortran extended for SIMD and MIMD multiprocessors Late 1990s  1994: Perl-5 released  OO features added to Perl  1995: Ada-95 released  OO features added to original Ada (renamed Ada-8x)  1995: Matsumoto releases Ruby  Fully OO scripting language; features from Perl, Python, …  Emphasis on making menial programming tasks easy  1996: Gosling et al. design Java  C++ syntax, Smalltalk philosophy  Extensive class library (networking, graphics, threads, etc.)  Provides Java Virtual Machine (JVM) for platform-independence  Support for both applications and applets (run via www-browser) Development continues  PHP (1995)  UML (1996)  C# (2000)  Scriptol (2001)  Scala (2004)  …  Not to mention hundreds of other languages developed along the way! Programming Paradigms  Imperative / Procedural  Central features are variables, assignment statements, and iteration  Write blocks of statements e.g. C, Pascal  Functional  Main means of making computations is by applying functions to given parameters  Write functions, pass arguments e.g. LISP, Scheme  Logic  Rule-based (rules are specified in no particular order)  Write inference rules e.g. Prolog  Object-oriented  Data abstraction, inheritance, late binding  Build objects, send messages e.g. Java, C++  Concurrent  Build communicating processes/threads/tasks e.g. CSP, Occam OO Procedural FORTRAN Functional COBOL FORTRAN-II Logic 1950s Lisp ALGOL-60 FORTRAN-IV BASIC ALGOL-W ALGOL-68 Pascal Fortran-77 1960s PL/1 Simula awk C sed Prolog 1970s Modula Ada ML Modula-2 Smalltalk Scheme C++ 1980s Perl Oberon Fortran-90 Fortran-95 Visual Basic Python Haskel Perl-5 1990s Ada-95 Visual Basic 5.0 Java How to decide?  Readability: the ease with which programs can be read and understood  Writability: the ease with which a language can be used to create programs  Reliability: conformance to specifications (i.e., performs to its specifications)  Cost: the ultimate total cost  Portability, Generality, Well-definedness Trade-offs  Reliability vs. cost of execution  Example: Java demands all references to array elements be checked for proper indexing but that leads to increased execution costs  Readability vs. writability  Example: APL provides many powerful operators (and a large number of new symbols), allowing complex computations to be written in a compact program but at the cost of poor readability  Writability (flexibility) vs. reliability  Example: C++ pointers are powerful and very flexible but not reliably used Implementation Methods  Compilation  Programs are translated into machine language  Pure Interpretation  Programs are interpreted by another program known as an interpreter  Hybrid Implementation Systems  A compromise between compilers and pure interpreters
 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
									 
                                             
                                             
                                             
                                             
                                             
                                             
                                             
                                             
                                             
                                             
                                            