Introduction to programming languages, Algorithms & flowcharts Slides borrowed from Instructor: Wajih Alouini
What are Program and programming language? Program : Set of instructions which a computer can “interpret” to solve problems, make calculations, perform tasks, etc. Programming Language : A formal language that is intended for the expression of computer programs Syntax is away of writing program in any language (every language has its own syntax)
Why study programming languages? Programming languages are important for students in all disciplines of engineering because they are the primary tools of the central activity of any science.
Why study programming languages? (cont.) To improve your ability to develop effective algorithms and to improve your use of your existing programming language. To increase your vocabulary of useful programming constructs. To allow a better choice of programming languages. To make it easier to learn a new language.
A short history of programming Languages 1950 : Numerically based languages. FORTRAN (55) Business languages. COBOL(60) Artificial intelligence languages. LISP, ALGOL(58) LISP, FORTRAN (55) ALGOL 1970 : PLs Ada, C, Pascal, Smalltalk 1980 : Development of functional programming: ML, Miranda Object-oriented programming: Smalltalk, C++
A short history of programming languages (cont.) Fourth-generation languages Productivity tools (such as spreadsheets) Visual languages : Delphi Scripting languages : Perl Expert systems shells Network computing : Java
Low-level vs. High-level Programming Languages Machine code Assembly High-level: (abstraction from the computer details) Basic, C, Java, Pascal, C++, Perl, Python, … Assembly is translated by assembler to machine code.
Styles of Computer Programming Procedural: procedures, routines, subroutines, methods, or functions e.g. C, Pascal, Basic, Fortran Functional Mathematical functions e.g. Lisp, Erlang, Haskell, ML, … Object-oriented e.g. C++, Java, Smalltalk Rule-based (or Logic) : facts, rules e.g. Prolog
Examples (1/5) Fibonacci numbers How to program? 0,1,1,2,3,5,8,13 Fn = Fn-1 + Fn-2 , n>=2 F0 = 0, F1 = 1 How to program? 0,1,1,2,3,5,8,13
Examples (2/5) Functional: (Haskell) fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n-2)
Examples (3/5) Procedural: (C) int fib(int n) { int first = 0, second = 1; for (int i=0, i<n; i++) { int sum = first+second; first = second; second = sum; } return first; }
Examples (4/5) Assembly: (in x86 using MASM syntax) mov edx, [esp+8] cmp edx, 0 ja @f mov eax, 0 ret @@: cmp edx, 2 ja @f mov eax, 1 ret @@: push ebx mov ebx, 1 mov ecx, 1 @@: lea eax, [ebx+ecx] cmp edx, 3 jbe @f mov ebx, ecx mov ecx, eax dec edx jmp @b @@: pop ebx ret
Examples (5/5) Machine code 8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3
Attributes of a good language Ease of program verification Proof of correctness, desk checking, test Simplicity of semantic and syntax Programming environment Portability of programs Cost of use Program execution Program translation Program creation, testing, and use Program maintenance
Attributes of a good language (another view: to make a software reliable, maintainable, efficient) Reliability Writability Readability Simplicity Safety (no goto, no pointers) Robustness (undesired events can be trapped, like arithmetic overflow, invalid inputs) Maintainability Factoring (modularity) Locality Efficiency -Easy to write. -Based on module and easy to maintain better than procedural.
Issues for all Languages Can it be understood by people and processed by machines? although translation may be required Sufficient expressive power? can we say what needs to be said, at an appropriate level of abstraction? When building a programming language we should think of : Is it easy for people to read and understand . - Is the Program can be expressed with less code and with high level of abstraction without getting more complicated.
Translation Compilation Interpretation Translate into instructions suitable for some other (lower level) machine During execution, that machine maintains program state information Interpretation May involve some translation Interpreter maintains program state The machine will interact with the program during execution. - Difference between compiler and interpreter is that compiler will compile code directly into machine code such as add operation but in interpreter no (it needs some other program designed for the specific machine.
Trade-offs Compilation Interpretation lower level machine may be faster, so programs run faster compilation can be expensive examples: C (and Java?) Interpretation more ability to perform diagnostics (or changes) at run-time examples: Basic, UNIX shells, Lisp Differences between compilation and interpretation