Transcript Document
Introduction to Programming Languages CS331 What is a Programming Language? • Formally, a set of finite sequences of elements of the alphabet – E.g., abcd… • It has a syntax and a semantics – We will define these in great detail shortly – Communicates only an algorithmic idea • A programming language makes it easier and efficient for people to communicate with computers Principles of Language Design • The major principles that underlie the design of modern programming languages are – – – – Syntax Type systems (semantics) Memory Management Exception Handling • We treat these categories formally instead of just comparing features of different languages to – Apply more rigor (needed for example in writing a compiler) – Understand future languages better (formalisms universal) Syntax • Tells us what constitutes a correctly written program – Vocabulary – Alphabet • Not unlike work with spoken languages – Borrows from linguistic theory, grammar – Most programming languages use a contextfree grammar Type Systems and Semantics • If the syntax is correct… – What kind of values can we manipulate? • Is a 32 bit value an integer, a float, 4 ASCII characters, etc. – Semantics applies meaning to the data values • What is the exact effect of a statement on the state of computation? – What happens next? – These must all be defined somehow; we will use a formal abstract definition for semantics Memory Management • Collection of techniques to map values and data structures to memory – Static vs. Dynamic memory – Use of the heap – Garbage collection and reclamation • Numerous algorithms and strategies have been designed to manage memory Exception Handling • An exception is an unexpected event – Division by zero – Overflow – Illegal memory access • How can these be trapped and handled? • (will mostly skip this chapter in the class) Tower of Babel of Programming Languages • What programming languages do you already know or can think of the names? Why so many languages? • • • • • Application domains Levels of Languages Different philosophies to solve problems Language improvement Standards Application Domains • Scientific Computing – Mathematical, Parallel, Historically FORTRAN • Management Information Systems – Database, SQL – COBOL for business systems – Client/Server approach popular • Artificial Intelligence – Intelligent behavior, deduction – Roots of functional and logical programming • Systems – Compilers, OS, network, etc. – Typically low level languages, Assembly/C • Web – Overlap with other applications – Client/Server, often interpreted • Education – PASCAL, ALICE Programming Paradigms • Paradigm: Model or mental framework for thinking about something – Procedural/Imperative • Programs are a series of steps; assignments, loops, sequences, conditional statements – Object-Oriented • Collection of interacting objects; inheritance, polymorphism – Functional • Program is a collection of mathematical functions using functional composition – Logic • Program is a collection of logical declarations; states what the outcome should be rather than how to accomplish the outcome – Event-Driven • Continuous loop responding to events – Concurrent • Collection of cooperating processes; issues for parallelism Pragmatic Considerations • Architecture constraints – Stuck with the von Neumann model? – Instruction set matches with Imperative model • Contextual constraints – Relates back to application area, levels of languages – General purpose vs. special purpose – Compiled vs. interpreted Virtual Machine • This text uses the virtual machine model for a language called “Clite” • Interpreter is Java, so Clite is really doubly-interpreted! (or Just-InTime Compiled) • By doing so, we avoid details of mapping a language to a specific machine architecture Standards • Standardization – process of defining a machineindependent definition to which all implementors of the language must adhere – Used to be bottom-up and standardization only took place if a language was used enough – Process is becoming top-down with larger companies (e.g. Microsoft, Sun) • Major standards organizations, ANSI, ISO, ECMA – Slow process, e.g. ANSI/ISO C (1999) Brief history of PL’s FORTRAN • FORmula TRANslation – IBM 1957; John Backus • • First high level language Designed to support numerical computation – Still used today in scientific computing • Code snippet 10 IF (NUMBER .LT. 0) GO TO 20 READ (*,*) NUMBER GO TO 10 20 … • • Early versions used GOTO A simple FORTRAN error resulted in errors for NASA’s Project Mercury suborbital flights (myth for Mariner Venus probe) – DO 3 I = 1,3 was mistyped as DO 3 I = 1.3 which was accepted by the compiler as assigning 1.3 to the variable DO3I COBOL • Common Business Oriented Language • Designed for business needs; payroll, accounting, etc. – Responsible for huge amounts of legacy code • Designed to be English-Like to make it ‘easy to program’ – ADD A TO B GIVING SUM Pascal • 1970 Nicklaus Wirth • Designed to enforce good programming techniques as a teaching language, easy to learn – Taught in most schools/universities in the 80’s • Not embraced as an industrial language; instead they used C – But offshoot language Delphi (Borland) is used commonly and commercially today; competitor to Microsoft’s Visual Basic C • 1970 – Dennis Ritchie, Bell Labs • Originally designed to write UNIX – Close to assembly, allows speed efficiencies – Led to its popularity today, the basis for just about every operating system (including Windows) – One of the most popular choices when it comes to real-time systems C++ • 1980 – Bjarne Stroustrup, Bell Labs • Superset of C++ – Adds object-oriented programming on top of C • Standardized by ANSI/ISO – One of the most popular commercial languages today, allows low-level access of C together with OOP • We’ll examine C++ in this class C# • Relatively new language developed by Microsoft – ECMA standard, on fast track for ISO standard • Combines aspects of C++/Java/Visual Basic – – – – – OOP Uses concept of virtual machine (CLI) - .NET Easy integration with web services Easy development of GUI via IDE Cleans up some messiness of previous languages • We will also examine C# in this class ADA • Named after Ada Lovelace – Daughter of Lord Byron – Mathematician, Scientist • 1979 US Armed Services – Intended as a common language for all government contractors – Powerful; OOP, Multiprocessing, structures for efficiency and re-usability • Criticized for being difficult to learn • Don’t see much ADA around nowadays Java • 1994 – James Gosling, Sun Microsystems • OOP • Virtual machine – Both interpreted and compiled • Rise of the web has been attributed to its success • No ISO/ECMA standard of Java – Sun pulled out of the standards process in 1999 for more control – Does have “Java Community Process” Lisp • 1958 – John McCarthy • LISt Processing – Based on Alonzo Church’s Lambda Calculus • Computing with symbolic expressions rather than numbers • List structure as the key data structure • Composition of functions as a tool for forming more complex functions • Sample (defun list-of (n elt) (if (zerop n) nil (cons elt (list-of (- n 1) elt)))) • We’ll study Scheme, an offshoot of Lisp SML • 1980’s Standard Meta Language – Edinburgh Lab, Robin Milner • Fully formal definition – – – – Close to mathematics (sets, tuples, functions) No declarations as in imperative languages No side effects Type of variables is computed by inference, depending on context • [1,4,5] = list of integers • (1,1) is a tuple of integers • fun square(x) = x*x; Prolog • 1972 - Alan Colmeraurer • PROgramming LOGic – ISO standard 1995 • A Prolog program is a set of facts and a set of logical rules speaks(mary, russian). speaks(bob, english). speaks(mary,english). talkswith(P1,P2) :- speaks(P1,L), speaks(P2,L), P1\=P2. Program that defines people that speak Russian and that you talk to someone that speaks the same language. • Queries: speaks(mary,X). ; X=english, russian Special Purpose Languages • Languages designed for specific tasks – SQL • Retrieval from relational databases – PERL • Practical extraction and report language • Processing strings, regular expressions – HTML • Markup of hypertext • When we get to PHP we will assume you know some HTML Programming Language Qualities • Simplicity and clarity – How easy is it to write in the language? – Different definitions; some minimize keystrokes • Binding – How are values bound to variables? • Definition, compilation, runtime, early vs. late binding • Orthogonality – Do features combine in a predictable way? E.g. meaning of + • Reliability – Behave the same way each time it is run? • Applicability – How well does the language map to its applications? • Abstraction – Low or high level? • Efficiency – Practical and efficient on a von Neumann machine? Conclusions • There are lots of programming languages out there – Different paradigms – Different applications – Different levels of computing • There will probably continue to be even more programming languages in the future • By studying formal properties of programming languages and a sampling of paradigms, you will be well prepared to face these new languages