Programming Languages: Part 1 Robert M. Dondero, Ph.D. Princeton University 1
Objectives You will learn/review: Subsets of C, Java, and Python... That are appropriate for COS 333... Through example programs Example 1 in C, Java, Python Example 2 in C, Java, Python 2
Objectives Note: Comprehensive coverage is impossible! Please supplement with reading 3
Objectives Specifically: Overview Program structure Building and running Multiple functions/methods Using library code 4
C Overview Who: AT&T Bell Labs Dennis Ritchie When: 1972 Why: Build Unix 5
C Overview Characteristics: Low level Strongly typed Minimal standard library Two-word description: Fast: Close to the OS and hardware Eccentric: Unless you know the underlying assembly/machine lang 6
Why Study C? Why study C? The world's most popular/influential lang Illustrates some of the course's material Provides strong contrast with other langs I know it You know it from COS 217 We'll do a quick review 7
Java Overview Who: Sun Microsystems Team led by... James Gosling 8
Java Overview When: 1990 Why: Embedded systems ("Oak"), and then... "The language of the Web", and then... Robust portable server-side software 9
Java Overview Characteristics: Medium level Strongly typed Large standard library Two-word description: Rich: Large language and standard library Verbose: I/O is especially so 10
Why Study Java? Why study Java? Elegant and popular Illustrates most of the course's material I know it You know it from COS 126/226 But maybe not some of the advanced features We'll do a quick overview 11
Python Overview Who: Guido Van Rossum 12
Separated at Birth? 13
Python Overview When: ~1990 Why: "I was looking for a 'hobby' programming project that would keep me occupied during the week around Christmas. My office would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus)." Van Rossum 14
Python Overview Characteristics: High level Weakly typed No variable declaration statements "Scripting language" Rich standard library But inconsistent programming conventions 15
Python Overview Two-word description: Expressive: Can accomplish much work with little code Immature: Still evolving; ill-documented 16
Why Study Python? Why study Python? Reasonably elegant and getting more popular Esp. vs. Perl Illustrates most of the course's material Python/Django is popular I'm new to it; I want to learn it You also are new to it??? Thus the first part of the course won't be entirely review??? 17
Why Study that Combination? Among high level languages: Good for computers C Java Python Good for pgmmers The three languages cover the spectrum well 18
Our Approach Approach: sequence of example programs For each example: Examine/run code Note important features Generalize Incidentally... No function/method comments Bad style but saves paper 19
"Hello World" Programs Illustrate Program structure Building and running 20
"Hello World" in C See hello.c Overall structure Comments #include preprocessor directive Definition of main() function printf() function String literal (" ") 21
"Hello World" in C Generalizations: A C program consists of functions Exactly one must be named "main" 22
"Hello World" in C Building and executing: hello.c C preprocessor/compiler/ assembler/linker At run-time OS hello (executable binary code) Source code is portable (to some extent) Executable binary code is not portable 23
"Hello World" in C Long procedure: File: hello.c File: hello.i Preprocess $ gcc -Wall -ansi -pedantic -E hello.c > hello.i Compile $ gcc -Wall -ansi -pedantic -S hello.i 24
"Hello World" in C File: hello.s File: hello.o Assemble $ gcc -Wall -ansi -pedantic -c hello.s File: hello Link $ gcc -Wall -ansi -pedantic hello.o -o hello Run $ hello 25
"Hello World" in C Short procedure: File: hello.c File: hello Preprocess, compile, assemble, link $ gcc -Wall -ansi -pedantic hello.c -o hello Run $ hello 26
"Hello World" in Java See Hello.java Overall structure Comments Class definition Definition of main() method "static" => class level, not object level System.out.println() method String literal (" ") 27
"Hello World" in Java Generalizations: A program consists of classes Define one public class per file Can define other non-public classes in same file A class consists of methods (and fields) 28
"Hello World" in Java Building and executing: Hello.java Java compiler At run-time OS Java interpreter (JVM) Hello.class (bytecode) Source code is portable Bytecode is portable 29
"Hello World" in Java Procedure: File: Hello.java File: Hello.class Compile $ javac Hello.java Run $ java Hello 30
"Hello World" in Python See hello1.py Overall structure (minimal!) #!/usr/bin/env python Comments print statement String literal (' ') No semicolons!!! Commands OS to... Use the Python interpreter Search the PATH env var to find it 31
"Hello World" in Python Generalizations: Program consists of statements (and other things; stay tuned) String literal: ' ' or " " 32
"Hello World" in Python Building and executing: OS Python interpreter At run-time hello1.py hello1.pyc (bytecode) Python compiler Source code is portable Bytecode is portable 33
"Hello World" in Python Procedure 1 (works with/without #! line) $ python hello1.py Procedure 2 (works only with #! line) $ chmod 700 hello1.py $ hello.py Procedure 3 (works with/without #! line) $ python >>> import hello1 Procedure 3 is valuable for learning 34
"Hello World" in Python See hello2.py Function definitions and calls name == ' main ' True iff this module is the "main" module True iff this module is compiled/interpreted directly from the command-line False iff this module is loaded into interpreter by another module Indentation matters!!! 35
"Hello World" in Python Generalizations: Program consists of statements and functions Indentation indicates nesting Better to avoid global code Global code can hide errors in local code 36
"Hello World" in Python Procedure 1 (works with/without #! line) python hello2.py Procedure 2 (works only with #! line) chmod 700 hello2.py hello2.py 37
"Hello World" in Python Procedure 3 (works with/without #! line) $ python >>> import hello2 Makes all names defined in the hello2 module accessible within this (the main) module >>> hello2.main() Can use those names using "hello2." prefix 38
"Hello World" in Python Procedure 4 (works with/without #! line) $ python >>> from hello2 import main >>> main() Imports "main" from the hello2 module into this (the main) module Can use "main" as if it were defined in this module 39
"Square" Programs Illustrate: Multi-function/method programs Function parameters 40
"Square" in C See square1.c One source code file defines multiple functions Parameters are passed by value Compiler does one pass only Compiler must see function definition (or declaration) before function call 41
"Square" in C See square2.c Function declaration Compiler must see function definition or declaration before function call 42
"Square" in Java See Square.java One source code file (one class) defines multiple methods Parameters are passed by value Compiler does two passes Can define methods in any order 43
"Square" in Python See square1.py One source code file defines multiple functions Weakly typed Parameters are typeless Compiler/interpreter does one pass only Compiler/interpreter must see function def before function call 44
"Square" in Python However... Python does not compile/interpret code until necessary 45
"Square" in Python See square2.py OK to define sqr() after main() See square3bad.py Compiler/interpreter attempts to interpret call of sqr() before seeing def of sqr() Error
"Square" in Python See square4bad.py Compiler/interpreter does not attempt to interpret call of non-existing function No error detected! Dangerous!!!
"SquareRoot" Programs Illustrate: Using library code 48
"SquareRoot" in C See squareroot.c #include <math.h> Provides compiler with declaration of sqrt() Allows compiler to check calls of sqrt() 49
"SquareRoot" in C To build: $ gcc -Wall -ansi -pedantic squareroot.c -o squareroot -lm -lm commands linker to search libm.a for function defs Experiment: Required on many/most systems, but not on ours Remove #include directive What happens? 50
"SquareRoot" in Java See SquareRoot1.java Uses full class name in code Fine, but sometimes awkward See SquareRoot2.java import java.lang.math; Commands compiler to resolve "Math" to "java.lang.math" Actually, not necessary: "java.lang.*" is imported by default 51
"SquareRoot" in Python See squareroot1.py import math Makes all names defined in the math module accessible within this (the main) module Can use those names using "math." prefix Bad: Sometimes awkward to use prefix Good: No conflicts with names in this module 52
"SquareRoot" in Python See squareroot2.py from math import sqrt Imports "sqrt" from the math module into this module Can use "sqrt" as if it were defined in this module Good: No need to specify prefixes Bad: Potential name conflicts New def overwrites old def 53
Summary We have covered: In Java, C, and Python... Program structure Building and running Multiple functions/methods Using library code 54