Slide 1FORTRAN Concepts/ContributionsFORTRAN Design ConsiderationsFORTRAN & Design PrinciplesFORTRAN: Interesting ProblemsSlide 6Slide 7ALGOL60ALGOL60 ContributionsALGOL60 Contributions (2)ALGOL60 TypesALGOL60 Types (more)ALGOL60 ImperativesALGOL60 OdditiesExample from Knuth: SwitchName Parameter PassingJensen’s DeviceUndesirable Interactions04 February 1999; CS655 FORTRAN04 February 1999; CS655 FORTRAN Concepts/Contributions•Binding time•Separate compilation•Modules•Retention (data)•Initialization of data objects•Strong/weak typing (FORTRAN definitely weak!)•Auto declaration•Operator overloading•Aliasing (in common blocks)•Coercion04 February 1999; CS655 FORTRAN Design Considerations•Underlying hardware•Efficiency (time)–direct translation to machine ops–optimization•DO loops•array subscripting•Efficiency (space)–equivalence–common–flat structure (no recursion)04 February 1999; CS655 FORTRAN & Design Principles•Abstraction (control)•Defense in depth (assigned, computed GOTO; DO loop)•Structure (goto’s)•Syntactic consistency (two goto types)•Preservation of information (DO loop)•Zero-one-infinity (array dims, identifier length)•Regularity (strings are second class)04 February 1999; CS655 FORTRAN: Interesting Problems•Array subscripting–limit of three dimensions–limit on subscript expressions•Parameter passing–reference as implemented is dangerous (expr actuals)•Computed/Assigned GOTO’s•Syntax– space compression combined with no key wordsDO 10 I = 1.10DO 10 I = 1,1004 February 1999; CS655 ALGOL6004 February 1999; CS655 ALGOL was indeed an achievement. It was a significant advance on most of its successors. --Alan Perlis04 February 1999; CS655 ALGOL60•Design by committee -- US/Europe -- 1957•Goals:–Machine independence–Improve RE: FORTRAN's established flaws–One standard to end "proliferation" of languages•Model of Computation:–Static block structure (gave additional control over name space)–Recursion [multiple instances of same routine(s)] --birth of stack model04 February 1999; CS655 ALGOL60 Contributions•Declaratives:–Named data objects–Declared their types–Determined storage in activation record•(or what needed to be done at runtime)–Bound name to that storage–Allowed for initialization•Block structure: scope, visibility, hiding–Scope: range over which name is defined–Visibility: set of names that have meaning–Hiding: re-use of name (in new context)c.f. FORTRAN: - named the object - allocated fixed memory - provided for initialization04 February 1999; CS655 ALGOL60 Contributions (2)•Static vs dynamic referencing became an issue–Static: meaning of non-local ref determined by static context–Dynamic: meaning of non-local ref determined by dynamic call chain04 February 1999; CS655 ALGOL60 Types•Primitive types:–real, integer, boolean, strings (2nd class)–no dub precision (for machine independence)–no complex•Constructors:–arrays only•arbitrary bounds•arbitrary dimensions•arbitrary subscripts–includes functions and other array refs•dynamic sizing on block entryZero-one-infinity04 February 1999; CS655 ALGOL60 Types (more)•In general, declarations were required–no auto declarations (except procedure formals, labels)•Strong typing:–The only operations allowed to be performed on a data object are those defined for objects of that type•(one of many defs for strong typing. Others?)•Many loopholes:–labels and integers–specifications and declarations04 February 1999; CS655 ALGOL60 Imperatives•Imperatives:–Computational, control flow, no I/O•Computational-–assignment much more general than FORTRAN'sfac:= IF x <= 1 THEN 1 ELSE x*fac(x-1)•Control flow-–Conditional had awkward inconsistency:IF ~ THEN s1 ELSE ~ -- s1 can't be cond'l--violates regularity04 February 1999; CS655 ALGOL60 Oddities–Conditional booleans odd:IF IF IF a THEN b ELSE c THEN d ELSE f THEN g ELSE h < k–For loop -- very generalFOR i:= 3,7,11 STEP 1 UNTIl 16,i/2 WHILE i >= 1, 2 STEP i UNTIL 32 DO ~(generates: 3,7,1,12,13,14,15,16, 8,4,2,1,2,4,8,16,32)--user can modify loop indices (see Knuth)-- violates localized cost04 February 1999; CS655 Switch (early case / switch statement) BEGINswitch status= in_air, take_off, landing, on_runway …i:= <integer value>goto status[i]; in_air: ... } no ordering req'mnts landing: ... } can be take_off: ... } anywhere …ENDBEGIN switch s = L, IF j > 0 THEN M ELSE N, Q … i:= <integer value> goto s[i]; -- dest depends on j if i=2. …ENDSee Knuth for some gems (e.g. p. 617).-- out of range treated as fall-throughSwitch - supports labeling - violates structure & securityDesignational expression04 February 1999; CS655 Example from Knuth: Switch04 February 1999; CS655 Name Parameter PassingPROCEDURE swap (x, y); integer x, y; BEGIN INTEGER t; t:= x; x:= y; y:= t;END swap (i,j) -- works (x:i, y:j)swap (A[i],i) -- works (x:A[i], y:i)swap (i,A[i]) -- doesn't work! (x:i, y:A[i])-- Similarly, Knuth claims you can't write a general successor function. -- Why?04 February 1999; CS655 Jensen’s Devicereal procedure SUM (EXPR, INDEX, LB, UB); value LB, UB; real EXPR; integer INDEX, LB, UB; begin real TEMP; TEMP := 0; for INDEX := LB step 1 until UB do TEMP:= TEMP + EXPR; SUM:= TEMPend proc SUM;SUM(A[I], I, 1, 25);SUM (SUM(B[I,J], J, 1, N), I, 1, M) -- How many calls to SUM?Manifest interface???04 February 1999; CS655 Undesirable Interactions BEGIN INTEGER max, m, n; READ (max); FOR i:= 1 UNTIL max DO BEGIN READ (m,n); BEGIN OWN REAL ARRAY a[1:m, 1:n]; --Storage? ... <operations on a> ... END END END•How can we deal with changing bounds while trying to keep a copy of "a" around between block
View Full Document