Introduction to Programming Languages CS 331 What is





























- Slides: 29

Introduction to Programming Languages CS 331

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 context-free 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-In. Time 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 DO 3 I

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 Mc. Carthy • 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 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(P 1, P 2) : - speaks(P 1, L), speaks(P 2, L), P 1=P 2. 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