Programming Languages Programming Languages Tucker and Noonan Tucker and Noonan Chapter 12: Imperative Programming 12.1 What Makes a Language Imperative? 12.2 Procedural Abstraction 12.3 Expressions and Assignment 12.4 Library Support for Data Structures 12.5 C 12.6 Ada 12.7 Perl
30
Embed
CSC321: Programming Languages Programming Languages Tucker and Noonan Chapter 12: Imperative Programming 12.1 What Makes a Language Imperative? 12.2 Procedural.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Programming LanguagesProgramming LanguagesTucker and NoonanTucker and Noonan
Chapter 12: Imperative Programming
12.1 What Makes a Language Imperative?12.2 Procedural Abstraction12.3 Expressions and Assignment12.4 Library Support for Data Structures12.5 C12.6 Ada12.7 Perl
Imperative ProgrammingImperative Programming
• Oldest and most well-developed paradigm
• Mirrors computer architecture
• Typical Languages– Fortran, Pascal– C, Clite– Ada 83– Perl
What Makes Languages Imperative?What Makes Languages Imperative?
• In a von Neumann machine memory holds:– Instructions– Data– Intellectual heart: assignment statement– Others:
• Procedural abstraction allows the programmer to be concerned mainly with a function interface, ignoring the details of how it is computed.
• The process of stepwise refinement utilizes procedural abstraction to develop an algorithm starting with a general form and ending with an implementation.
• Ex: sort(list, len)
Expressions and AssignmentExpressions and Assignment
• Assignment statement is fundamental:– target = expression
• Copy semantics: Expression is evaluated to a value, which is copied to the target; used by imperative languages
• Reference semantics: Expression is evaluated to an object, whose pointer is copied to the target; used by object-oriented languages.
• There exist vast libraries of functions for most imperative languages.
• Partially accounts for the longevity of languages like Fortran, Cobol, and C.
• Typical libraries for data structures– Iterators– Vectors– Lists– Stacks, queues, deques, priority queues– Sets and bags– Maps
• Goto• Structured programming revolution of 1970s replace the
goto with while loops.
• Other supports– Integer variables, values, operations– Input/output, error/exception handling, library support
CC• “C was originally designed for and implemented on the
UNIX• Operating system on the DEC PDP-11, by Dennis Ritchie.• The operating system, the C compiler, and essentially all• UNIX applications programs (including all of the software• Used to prepare this book) are written in C. ... C is not
tied to• Any particular hardware or system, however, and it is
easy to• Write programs that will run without change on any
machine that supports C.”
InfluencesInfluences
• Multics, PL/I• Application: typesetting documentation• PDP-11: 16-bit minicomputer; 32 KB memory• BCPL: typeless• Portability: big-endian vs. little-endian machines• Good code from a non-optimizing compiler• Hardware support for: ++, --, +=, etc.
if (ct=0) min = max = number;ct++;sum += number;min = number < min? number : min;max = number > max? number : max;printf(“Enter number: “);
}printf(“%d numbers read\n”, ct);if (ct>0)
printf(“Average: \t%d\n”, sum / ct);printf(“Maximum:\t%d\n”, max);printf(“Minimum: \t%d\n”, min);
}}
AdaAda• Developed in late 1970’s by DoD• DoD spending billions of dollars on software• Over 450 languages in use• Solution: standardize on one language• Higher Order Language Working Group• Ada 83
– problem: size of language/compiler– no subsets rule
• Hard times during 1990s– use of COTS
• Renewed interest– COTS proved problematic– development of Spark Ada– NYU GNAT (Ada) compiler
General CharacteristicsGeneral Characteristics
• Influences: Algol, Pascal
• Large language; case insensitive
• Unlike C, array indexing errors trapped
• Type safe
• Union
• Generics
• Exception handling -- strictly control
type union(b: boolean) is =record
case b iswhen true =>
i : integer;when false =>
r : float;end case
end record;tagged : union;begin tagged := (b => false, r => 3.375);
put(tagged.i); -- errorcase tagged(b) is
when true =>put(tagged.i);
when false =>put(tagged.r);
end case
Tagged UnionTagged Union
• Generic sort
– Sort various data set of different types• Code
generic type element is private; type list is array(natural range <>) of
element; with function ">"(a, b : element) return
boolean;package sort_pck is procedure sort (in out a : list);end sort_pck;
GenericsGenerics
package body sort_pck isprocedure sort (in out a : list) isbegin
for i in a'first .. a'last - 1 loop for j in i+1 .. a'last loop if a(i) > a(j) then declare t : element; begin t := a(i); a(i) := a(j); a(j) := t; end; end if;
end loopend loop;
end sort;end sort_pck;
Ada: AverageAda: Average
• Comparable to C
• Infinite loop; exit on end of file via exception
• Inner loop to catch errors caused by non-numeric data
• Exception handling
• Wordy than C
Ada: Average CodeAda: Average Codewith Ada.Text_IO: with Ada.Integer_Text_IO;Procedure Average is sum := 0; Ct := 0; Ada.Text_IO.Put(“Enter number: “); loop
begin Ada.Integer_Text_IO.Get(Number);
if Ct = 0 thenMin := Number;Max := Number;
end ifCount := Count + 1;if Number < Min then
Min := Number;elsif Number > Max then
Max := Number;end if
exception when Constraint_Error =>
Ada.Text_IO.Put(“Value out of range.”);
when Ada.Text_IO.Data_Error =>Ada.Text_IO.Put(“Value not an
integer.“); when Ada.Text_IO.End_Error =>
exit;end
Ada.Text_IO.Put(“Enter number: “); end loop
Ada.Integer_Text_IO.Put(Ct, 5); Ada.Text_IO.Put(“ numbers read”); Ada.Text.IO.New_Line; if Ct > 0 then Ada.Text_IO.Put(“Average: “);
• Widely used• A scripting language (originally for Unix)• Dynamically typed• Encourages a variety of styles• Supports regular expression pattern matching• Default conversion from one type to another
(vs. Python)• Result is distinct operators; ex: . for string
1. #! /usr/bin/perl2. die "Usage mygrep string \n" if @ARGV < 1;3. use strict;4. my $string = shift;5. my $ct = 0;6. while (<>) {7. $ct++;8. print "$ct:\t$_" if /$string/;9. }10. exit;
Perl: GrepPerl: Grep
• Scalar variables start with a $• Indexed arrays with an @• Hash arrays with %• Otherwise: bare word syntax error• use strict forces declaration of
variables– local : dynamic scoping– my : static scoping– NB: only 1 $_
Comments on GrepComments on Grep
StringsStrings• Double quotes: special characters interpreted
– ex: “$a \n”– forms: “ “, qq{ }, qq/ /
• Single quotes: special characters uninterpreted– forms: ‘ ‘, q{ }, q/ /