click below
click below
Normal Size Small Size show me how
PL Test 1
| Term | Definition |
|---|---|
| Reasons for Studying Concepts of Programming Languages | -Increased ability to express ideas -Improved background for choosing appropriate languages -Increased ability to learn new languages -Better understanding of significance of implementation |
| Programming Domains | -Scientific applications -Business applications -Artificial Intelligence - Systems programming -Web Software -Mobile Devices -Real Time -Concurrent |
| Language Evaluation Criteria | -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 -Cost: the ultimate total cost |
| Evaluation Criteria: Readability | -Overall simplicity -Orthogonality -Data types -Syntax considerations |
| Evaluation Criteria: Writability | -Simplicity and orthogonality -Support for abstraction -Expressivity |
| Evaluation Criteria: Reliability | -Type checking -Exception handling -Aliasing -Readability and writability |
| Evaluation Criteria: Cost | -Training programmers to use the language -Writing programs -Compiling programs -Executing programs -Language implementation system: availability of free compilers -Reliability: poor reliability leads to high costs -Maintaining programs |
| Evaluation Criteria: Others | -Portability -Generality -Well-definedness |
| Von Neumann Architecture Influence | Imperative languages are most dominant - variables model memory cells - assignments model piping - iteration is efficient |
| Von Neumann Computers | - data and programs stored in memory - memory is separate from CPU - instructions are piped in from memory to CPU |
| 1950s and early 1960s Programming Methodologies | simple applications and worry about machine efficiency |
| Late 1960s Programming Methodologies | people efficiency became important; readability, better control structures -structured programming -top-down design and step-wise refinement |
| Reasons for Studying Concepts of Programming Languages pt 2 | -Better use of languages that are already known -Overall advancement of computing -Increased Job prospects |
| Late 1970s Programming Methodologies | Process-oriented to data-oriented -data abstraction |
| Middle 1980s Programming Methodologies | Object-oriented programming -Data abstraction + inheritance + polymorphism |
| Imperative Language Category | -features: variables, assignment statements, and iteration -include languages that support object-oriented programming -C, java, perl, javascript, Visual BASIC, .NET, C++ |
| Functional Language Category | -main means of making comparisons is by applying functions to given parameters -LISP, Scheme, ML, F# |
| Logic Language Category | -rule-based - prolog |
| Markup/programming hybrid | -markup languages extended to support some programming -JSTL, SXLT |
| Language Design Trade-Offs | -Reliability vs. cost of execution -Readability vs. writability -Writability vs. reliability |
| Compilation Implementation Method | -Programs are translated into machine language; includes JIT systems -Faster and code can be optimized -Only translates once -Use: Large commercial applications |
| Pure Interpretation Implementation Method | -Programs are interpreted by another program known as an interpreter -Nicer to develop (REPL) -Use: Small programs or when efficiency is not an issue |
| Hybrid Implementation Method | -A compromise between compilers and pure interpreters -Use: Small and medium systems when efficiency is not the first concern -Java |
| Von Neumann Bottleneck | -Connection speed between a computer’s memory and its processor determines the speed of a computer -Program instructions often can be executed much faster than the speed of the connection -The primary limiting factor in the speed of computers |
| What is a PL? | syntax: grammatical rules semantics: meaning natural languages are enormous and imprecise and ambiguous |
| PL Generations | 1st: machine instructions (binary) 2nd: assembly languages (not portable & low level) 3rd: high level languages 4th: code generators 5th: prolog? |
| Abstractions on PLs | -data -control -process |
| Programs | data structures + algorithms = programs |
| Zuse's Plankalkul | -Designed in 1945 but not published until 1972 -Never implemented -Advanced data structures (floating point, arrays, records) - invariants -Designed by Konrad Zuse |
| Issues with using machine code | -Poor readability -Poor modifiability -Expression coding was tedious -Machine deficiencies--no indexing or floating point |
| Short Code | -developed by John Mauchly in 1949 -developed for the BINAC computer - expression were coded L->R -was implemented with a pure interpreter |
| Speedcoding | -developed by John Backus in 1954 - developer for the IBM 701 -pseudo ops for arithmetic and math functions -conditional and unconditional branching -Auto-increment register for array access -Slow! |
| UNIVAC Compiling System | -developed between 1951 and 1953 by a team led by Grace Hopper - expanded a pseudo code into machine code subprograms |
| Fortran | -Designed for the IBM 704, which had index registers and floating point hardware - Fortran I was developed in 1957 - Developed by John Backus -Fortran II was distributed in 1958 -Changed forever the way computers are used -Was developed for scientifi |
| LISP | -Designed by John McCarthy in 1958 -AI research needed a language to process data in lists and symbolic computation -syntax is based on lambda calculus -pioneered functional programming -still the dominant language for AI |
| Scheme | -Developed at MIT in the mid 1970s -small -extensive use of static scoping -functions as first class entities -well suited to educational applications -functional programming language |
| Common Lisp | -an effort to combine features of several dialects of Lisp into a single language -large and complex language |
| ALGOL 60 | -result of efforts to design a universal language -ACM and GAMM met for four days in 1958 -was the standard way to publish algorithms for over 20 years -all subsequent imperative languages are based on it -first machine-independent language -lacked I |
| ALGOL 60 pt 2 | -first language whose syntax was formally defined (BNF) -never widely used -lacked I/O -lack of support from IBM |
| COBOL | -computerizing business records -based on FLOW-MATIC -first design meeting (Pentagon) May 1959 -nested selection statements -still the most widely used business application language -first language required by the DoD |
| Basic | -designed by Kemeny & Kurtz at Dartmouth in 1971 -Easy to learn and user for non-science students -current popular dialect: Visual Basic -first widely used language with time sharing |
| PL/I | -designed by IBM and Share in 1964 -originally was named a new programming language -built to do both scientific and business applications -too large and too complex -first pointer data type - |
| APL | -a programming language -designed by Ken Iverson at IBM in 1960 -highly expressive -programs are difficult to read |
| SNOBOL | -designed as a string manipulation language -Designed at Bell Labs by Farber, Griswold, and Polensky in 1964 - powerful operators for string pattern matching -still used for certain text processing tasks |
| SIMULA 67 | -Designed for system simulation in Norway by Nygaard and Dahl -based on ALGOL 60 and SIMULA 1 -Coroutines -classes, objects, and inheritance |
| ALGOL 68 | -user-defined data structures -reference types -dynamic arrays -less usage than AGLOL 60 |
| Pascal | -developed in 1971 by Niklaus Wirth -designed for teaching structured programming -small and simple -largest impact was on teaching programming |
| C | -designed for systems programming at Bell Labs by Dennis Richie in 1972 -powerful set of operators, but poor type checking -designed as a systems language -used in many application areas -initially spread through UNIX |
| Prolog | -developed by Comerauer and Rousesel -early 1970s -based on formal logic -non-procedural -comparitively inefficient -few application areas |
| Ada | -huge design effort and took about 8 years -Sequence of requirements (1975-1978) -Named Ada after Augusta Ada Byron, the first programmer -exception handling -concurrency -generic program units --packages |
| Ada 95 | -began in 1988 -support for OOP -new concurrency features |
| Ada 2005 | -interfaces and synchronizing interfaces -popularity suffered because the DoD no longer requires its uses but also because of the popularity of C++ |
| Smalltalk | -developed at Xerox PARC by Alan Kay and Adele Goldberg -first full object-oriented language -pioneered the graphical user interface design -promoted oop |
| C++ | -developed at Bell Lab by Bjarne Stroustrup at Bell Labs in 1980 -evolved from C and SIMULA 67 -supports both procedural and OOP -rapidly grew in popularity -ANSI standard approved in November 1997 |
| Objective-C | -designed by Brad Cox early 1980s -used by apple for systems programs -uses smalltalk's method for calling syntax |
| Java | -imperative- based OOP language -developed at Sun in the early 1990s -based on c++ -supports only OOP -has references, but not pointers -supports concurrency -portable (JVM) -widely used for web programming -use increased faster than any prev lang |
| Perl | -designed by Larry Wall in 1987 -scripting language -variables are statically typed but implicitly declared -powerful and somewhat dangerous -replacement for UNIX system administration language |
| JavaScript | -Began at Netscape -client-side HTML embedded scripting language purely interpreted -related to Java only through syntax |
| PHP | -hypertext preprocessor -designed by Rasmus Lerdorf -purely interpreted |
| Python | - oo interpreted scripting language - dynamically typed -type checked -supports lists, tuples, and hashed |
| Ruby | -designed in Japan by Yukihiro Matsumoto (Matz) -began as a replacement for Perl and Python -a pure object-oriented scripting language -purely interpreted |
| Lua | -an oo interpreted scripting language -type checked but dynamically typed -easily extendable -supports lists, tuples, and hashes all with its single data structure, the table |
| C# | -Part of the .NET development platform (2000) -based on C++, Java and Delphi -include pointers, delegates, properties, enumeration times, a limited kind of dynamic typing, and anonymous types -is evolving rapidly |
| XSLT | -eXtensible markup language (XML) -eXtensible Stylesheet Language Transformation -programming constructs -hybrid language |
| JSP | -java server pages: collection of technologies to support dynamic Web Documents -JSTL, a JSP library, include programming constructs in the form of HTML elements |
| syntax | the form or structure of the expression, statements, and program units (grammar) |
| semantics | the meaning of the expressions, statements, and program units |
| Language definition | provided by the syntax and semantics of a language |
| sentence | a string of characters over some alphabet |
| language | a set of sentences |
| lexeme | the lowest level syntactic unit of a language (*, sum, begin) |
| token | is a category of lexemes (identifier) |
| recognizer | a recognition device that reads input strings over the alphabet of the language and decides whether the input strings belong to the language |
| generators | -a device that generates sentences of a language -one can determine if the syntax of a particular sentence is syntactically correct by comparing it to the structure of the generator |
| context-free grammars | -developed by Noam Chomsky in the mid-1950s -language generators, meant to describe the syntax of natural languages -define a class of languages called context-free languages |
| Backus-Naur Form | -invented by John Backus to describe the syntax of Algol 58 -BNF is equivalent to context-free grammars -developed in 1959 |
| BNF Fundamentals | -abstractions are used to represent classes of syntactic structures -terminals are lexemes or tokens -LHS (nonterminal) and RHS (string of terminals and/or nonterminals) -nonterminals are enclosed in angle brackets < > |
| Grammar | a finite non-empty set of rules |
| Start symbol | a special element of the nonterminals of a grammar |
| BNF Rules | -an abstraction (nonterminal) can have more than one RHS |
| Describing Lists BNF | -syntactic lists are described using recursion <ident_list> -> ident | ident, <ident_list> |
| derivation | a repeated application of rules, starting with the start symbol and ending with a sentence (all terminal symbols) |
| Example BNF Grammar | <program> -> <stmts> <stmts> -> <stmt> | <stmt> ; <stmts> <stmt> -> <var> = <expr> <var> -> a | b | c | d <expr> -> <term> + <term> | <term> - <term> <term> -> <var> | const |
| Example BNF Derivation | <program> => <stmts> => <stmt> => <var> = <expr> => a = <expr> => a = <term> + <term> => a = <var> + <term> => a = b + <term> => a = b + const |
| derivations | -every string of symbols in a derivation is a sentential form -a sentence is a sentential form that only has terminal symbols -can be leftmost or rightmost |
| left-most derivation | a derivation in which the left-most nonterminal in each sentential form is the one that is expanded |
| ambiguous grammar | if an only if it generates a sential form that has two or more distinct parse trees |
| precedence levels | must be unambiguous expression grammar |
| Extended BNF (EBNF) | -optional parts are places in brackets [ ] -alternative parts of RHSs are placed inside parentheses and separated via vertical bars -Repetitions (0 or more) are placed inside braces {} |
| Context-sensitive syntax | -static semantics (scope rules: must declare id prior to referencing) -attribute grammars: associate attribute values with symbols |
| Operational Semantics | define semantics in terms of effect on state of simple virtual machine |
| Axiomatic semantics | goal of proving program correctness, impose constraints called preconditions and postconditions |
| denotation semantics | formal approach based on recursive function theory |
| Theory of computation | -computability -complexity |
| P | polynomial time |
| NP | nodeterministic solution in polynomial time |
| Formal Language Theory (Syntax) | Chomsky Hierarchy -type 3: regular languages (finite automata) -type 2: context free languages (pushdown automata) -type 1: context sensitive languages (linear bounded automata) -type 0: recursively enumerable languages (Turing machines) |
| non determinism | the ability to "guess" correct alternative |
| close relation between generators and recognizers | generators: production rules recognizers: automata |
| In E(BNF) you can produce a recognizer from a generator | |
| lexical analysis (tokenizing) | -break stream of characters into toxens (lexemes) -pattern matching |
| syntax analysis (parsing) | check syntax and build a parse tree |
| parse tree | can parse top-down or bottom-up |
| concurrency can occur at four levels | -machine instruction level -high-level language statement level -unit level -program level |
| Late 1950s multiprocessor architectures | one general purpose processor and one or more special purpose processors for input and output operations |
| Early 1960s multiprocessor architectures | multiple complete processors, used for program-level concurrency |
| Mid 1960s multiprocessor architectures | multiple partial processors, used for instruction level concurrency |
| Flynn's Taxonomy | SISD: single instruction, single data SIMD: single instruction, multiple data MISD: multiple instructions, single data MIMD: multiple instructions, multiple data |
| Categories of Concurrency | -physical concurrency - logical concurrency |
| Physical Concurrency | Multiple independent processors (multiple threads of control) |
| Logical Concurrency | The appearance of physical concurrency is presented by time-sharing one processor (software can be designed as if there were multiple threads of control) |
| Coroutines (quasi-concurrency) | have a single thread of control |
| thread of control | the sequence of program points reached as control flows through the program |
| Concurrency vs. Parallelism | -concurrency >= 1 CPU -parallelism > 1 CPU |
| multithreading | > 1 thread |
| concurrent units | coroutines, tasks |
| task/process/thread | a program unit that can be in concurrent execution with other program units |
| heavyweight tasks | execute in their own address space |
| lightweight tasks | run in the same address space more efficient |
| disjoint task | does not communicate with or affect the execution of any other task in the program in any way |
| Task Synchronization | a mechanism that controls the order in which tasks execute |
| Task communication is necessary for synchornization | -shared nonlocal variables -parameters -message passing |
| cooperation synchronization | task A must wait for task B to complete some specific activity before task A can continue its execution (producer-consumer problem) |
| competition | two or more tasks must use the same resource that cannot be simultaneously used (a shared counter) -usually provided by mutually exclusive access |
| Major issues | -communication between tasks (message passing, lock on nonlocal variables) -synchronization (cooperative, competitive) |