On Orthogonality. by remembering only m + n things, we get m * n capabilities.

Similar documents
Types-2. Type Equivalence

FORTRAN. FORTRAN Concepts/Contributions

Data Types. Outline. In Text: Chapter 6. What is a type? Primitives Strings Ordinals Arrays Records Sets Pointers 5-1. Chapter 6: Data Types 2

Data Types In Text: Ch C apter 6 1

Topic IV. Parameters. Chapter 5 of Programming languages: Concepts & constructs by R. Sethi (2ND EDITION). Addison-Wesley, 1996.

Topic IV. Block-structured procedural languages Algol and Pascal. References:

Introduction Primitive Data Types Character String Types User-Defined Ordinal Types Array Types. Record Types. Pointer and Reference Types

R13 SET Discuss how producer-consumer problem and Dining philosopher s problem are solved using concurrency in ADA.

Programming Languages Third Edition. Chapter 7 Basic Semantics

G Programming Languages Spring 2010 Lecture 6. Robert Grimm, New York University

Programming Languages

SE352b: Roadmap. SE352b Software Engineering Design Tools. W3: Programming Paradigms

The Compiler So Far. CSC 4181 Compiler Construction. Semantic Analysis. Beyond Syntax. Goals of a Semantic Analyzer.

Programming Languages Third Edition. Chapter 10 Control II Procedures and Environments

Types II. Hwansoo Han

Organization of Programming Languages (CSE452) Why are there so many programming languages? What makes a language successful?

Compilers. Type checking. Yannis Smaragdakis, U. Athens (original slides by Sam

Types. What is a type?

CPSC 3740 Programming Languages University of Lethbridge. Data Types

Static Semantics. Winter /3/ Hal Perkins & UW CSE I-1

St. MARTIN S ENGINEERING COLLEGE Dhulapally, Secunderabad

Programming Languages

Attributes, Bindings, and Semantic Functions Declarations, Blocks, Scope, and the Symbol Table Name Resolution and Overloading Allocation, Lifetimes,

SEMANTIC ANALYSIS TYPES AND DECLARATIONS

Organization of Programming Languages CS320/520N. Lecture 06. Razvan C. Bunescu School of Electrical Engineering and Computer Science

Chapter 5 Names, Binding, Type Checking and Scopes

22c:111 Programming Language Concepts. Fall Types I

References and pointers

Example. program sort; var a : array[0..10] of integer; procedure readarray; : function partition (y, z :integer) :integer; var i, j,x, v :integer; :

Compiler construction

Topics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited

Lexical Considerations

Chapter 8 :: Composite Types

Data Types. Every program uses data, either explicitly or implicitly to arrive at a result.

G Programming Languages - Fall 2012

Report of the subcommittee On maintenance of and improvements to ALGOL 68.

Motivation was to facilitate development of systems software, especially OS development.

Lexical Considerations

The PCAT Programming Language Reference Manual

1 Lexical Considerations

Imperative Programming Languages (IPL)

Types and Type Inference

CS558 Programming Languages

Chapter 5 Names, Bindings, Type Checking, and Scopes

CSCE 314 Programming Languages. Type System

HANDLING NONLOCAL REFERENCES

Chapter 5. Names, Bindings, and Scopes

G Programming Languages Spring 2010 Lecture 4. Robert Grimm, New York University

CS558 Programming Languages

Topics Covered Thus Far CMSC 330: Organization of Programming Languages

G Programming Languages - Fall 2012

Chapter 6. Structured Data Types. Topics. Structured Data Types. Vectors and Arrays. Vectors. Vectors: subscripts

CS558 Programming Languages

CMSC 330: Organization of Programming Languages

Organization of Programming Languages CS3200 / 5200N. Lecture 06

Tokens, Expressions and Control Structures

Programming Languages, Summary CSC419; Odelia Schwartz

Appendix. Grammar. A.1 Introduction. A.2 Keywords. There is no worse danger for a teacher than to teach words instead of things.

Note 3. Types. Yunheung Paek. Associate Professor Software Optimizations and Restructuring Lab. Seoul National University

Informatica 3 Syntax and Semantics

Question No: 1 ( Marks: 1 ) - Please choose one One difference LISP and PROLOG is. AI Puzzle Game All f the given

Semantic Analysis and Type Checking

G Programming Languages - Fall 2012

CS 242. Fundamentals. Reading: See last slide

A Fast Review of C Essentials Part I

CSE 307: Principles of Programming Languages

Names, Bindings, Scopes

Type Checking. Outline. General properties of type systems. Types in programming languages. Notation for type rules.

Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus

Outline. General properties of type systems. Types in programming languages. Notation for type rules. Common type rules. Logical rules of inference

Chapter 6. Data Types ISBN

Final-Term Papers Solved MCQS with Reference

1. true / false By a compiler we mean a program that translates to code that will run natively on some machine.

NOTE: Answer ANY FOUR of the following 6 sections:

INSTITUTE OF AERONAUTICAL ENGINEERING

Motivation was to facilitate development of systems software, especially OS development.

Programming Methodology

CS 314 Principles of Programming Languages

The Structure of a Syntax-Directed Compiler

Imperative Programming

Equivalent Notations. Higher-Order Functions. (define (f x y) ( body )) = (define f (lambda (x y) ) ) Anonymous Functions.

Short Notes of CS201

Chapter 6. Data Types ISBN

CS558 Programming Languages. Winter 2013 Lecture 3

CS 430 Spring Mike Lam, Professor. Data Types and Type Checking

The SPL Programming Language Reference Manual

CS201 - Introduction to Programming Glossary By

Data Types (cont.) Subset. subtype in Ada. Powerset. set of in Pascal. implementations. CSE 3302 Programming Languages 10/1/2007

Semantic analysis. Semantic analysis. What we ll cover. Type checking. Symbol tables. Symbol table entries

Lecture 9: Control Flow

LECTURE 18. Control Flow

CS558 Programming Languages

1 Terminology. 2 Environments and Static Scoping. P. N. Hilfinger. Fall Static Analysis: Scope and Types

Comp 311: Sample Midterm Examination

Names, Scope, and Bindings

CA341 - Comparative Programming Languages

Fundamentals of Programming Languages

Intermediate Code Generation

The ACK Modula-2 Compiler

G Programming Languages - Fall 2012

Transcription:

n * On Orthogonality * * What makes orthogonality work? by remembering only m + n things, we get m * n capabilities. Orthogonality says that no point should be definable by more than one XY pair. Orthogonality advantageous only if: m+n + e < m*n - e m ALGOL68 1

ALGOL68: Goals & History Thesis: It is good practice in programming language design to abstain from exceptions. Design goals: gen purpose, rigorously-defined language Clear up trouble spots in ALGOL60 (but, Pascal more like A60 than A68 is) orthogonality, extensibility ALGOL68 - development started in mid-60's. Revised report (SIGPLAN Notices, May 1977) cleared up many ambiguities. Key Ideas in ALGOL68 User type declarations (modes) Orthogonal design (modes, structures, ops) Reference mode (pointers of a sort) United modes (predecessor to variant records) Auto declaration of FOR LOOP index User-specified operator overloading Notion of "elaboration" on context entry 2

More Key Ideas Mode requirement for formals Casting: user-spec'd mode conversion Redefinition of operator precedence Collateral actions Semaphores W-grammars - two-level grammar Contexts (strong, firm, meek, weak, soft) WRT coercion ALGOL68 Structure ALGOL68 is block structured w/ static scope rules Monolithic programming, as in ALGOL60 (and later in Pascal) ALGOL68's model of computation: static stack: block/procedure AR's; local data objects heap: heap -- dynamic-- data objects ALGOL68 is an expression-oriented language (note influence on C/C++) 3

ALGOL68: Organization Declarations: Must be given (FOR LOOP index only exception) Can name new types (modes) Imperatives (units) 15 major unit types Assignment is allowable side-effect of units c.f. C Data types (primitive modes) Int } Real } Char } primitives Bool } Void } Modes created from primitives --defined in "prelude" String Compl Bits - Word full of bits 4

More Primitive Modes Bytes - Word full of chars Sema - Semaphore Format- I/O File - I/O User defined modes allowed: Mode largeint = long INT and its attendant advantages Non-primitive ("non-plain ) modes references * multiples (arrays, rows) structures unions * procedures * * - unusual --can be applied to primitives or other constucted modes 5

References Variable X has two attributes of concern: its value reference to storage where value is kept Most languages don't distinguish e.g. x := x + 2 "value of x "ref to place where value is stored" "The type of x is integer" and "The type of values assigned to x is integer" get combined in this case. ALGOL68 made the distinction (as do e.g. C & C++). References INT x -- means x is a ref to objects of type INT In general, a variable stands for reference to data object so, for: x := x + 2 "dereferenced" to yield int, so + operation is meaningful In general, for V := E type of V should be ref (type of E) Thus, if we declare: REF INT PNTTOX mode of PNTTOX is REF REF INT and PNTTOX:= X -- assigns X's address to PNTTOX action not obvious from syntax 6

Consider INT x,y; -- x&y are REFs to objects of type INT REF INT r; -- r is REF to REF INTs x:= 2; r:= x; y:= r; -- no deref necessary -- ditto - pointer assignment -- assigns 2 as value of y --two derefs required x:= 3; y:= r; -- no deref necessary; -- assigns 3 to y. Two derefs req'd No visual clue that y s value could be affected by assignment to x. ALGOL68 References Note: can't do: r:= 3; -- r is REF REF INT and 3 is INT -- no coercion possible (ref int) r:= 3 -- will work. It assigns 3 to the last variable r referred to (i.e. x). Note: can create REF REF REF... INT, etc if so inclined. Syntactic consistency? Manifest interface? 7

Structuring Primitives ARRAYs (rows) -- 1D: ROW; 2D: ROW ROW; STRUCTURES e.g. [1:12] INT MONTH -- vector of 12 integers On equivalence of arrays: Objects of different dimensions -> different modes Bounds are not part of the mode (c.f. Pascal) [1:10, 1:n] REAL time } equivalent [1:100, 7:11] REAL thing } modes. More Structured Types Aggregate Assignment month:= (31,28,31,30,31,30,31,31,30,31,30,31) --adopted in Ada and later languages Dynamic arrays: [m:n] INT obj -- When encountered, array with n-m+1 locations created. 8

Continue Structuring Primitives FLEX ARRAYs -- change size on the fly. e.g. FLEX [1:0] INT obj -- a row with no integers. obj:= (5,5,5) -- changes bounds to 1:3 on the fly. --bounds change only by assignment to whole array Aside on strings: mode string = FLEX[1:0] CHAR -- done in prelude declaration string greetings; greetings:= "Greetings and salutations" -- creates vector exact length of string. e.g. Structures: mode bin_tree = struct( INT data, REF bin_tree l_child, r_child ) ^ note recursive definition ( illegal definition w/o REF) -- Why? Other standard modes built up from structs: e.g. mode compl = struct ( REAL re, im ) mode bits = struct ( [1:bits_width] BOOL x ) mode bytes = struct ( [1:bytes_width] CHAR x ) mode sema = struct ( REF INT x ) -- all in ALGOL68 prelude 9

e.g. Unions mode combine = UNION ( INT, BOOL )... combine x -- x can take on INT or BOOL values but -- only under controlled conditions. assignment is OK: x:= 5 x:= TRUE More Unions Using x in an expression requires: CASE x IN -- "conformity clause" (INT x1):... <use x1> (BOOL x2):... <use x2> ESAC Note: UNION (t1, t2,..., tn) -- ti can be any mode. -- Only limitation: can't have ti and REF ti in same union. -- "incestuous union" -- creates ambiguity in cases like: UNION (INT, REF INT) x; INT y;... x:= y; -- Can't determine how many derefs to do on y; -- 0: if x is ref ref int; 1: if x is ref int 10

Procedures Procedure units have mode and value; mode determined by arg modes and ret mode. ALGOL68 supports procedure-valued variables: mode Pr = PROC ( vector, matrix ) matrix;... Pr P1, P2; -- two instances of generic Pr... P1 = PROC (vector a, matrix b) matrix: {procedure definition}... P2 = P1 -- P2 now has same def as P1 -- implemented using pointers Procedure modes can be used as parameters (routine texts) Formals and actuals must have same type! Coercion six kinds (see Tannenbaum): dereferencing deproceduring widening rowing uniting voiding 11

More Coercion int i; real r; [1:1] int rowi; ref int refi; union(int, real) ir; proc int p; r:= i/r -- i gets widened ir:= i; -- uniting ir:= r; -- uniting i:= p; -- deproceduring; i:= refi; -- dereferencing (twice) p; -- deproceduring; voiding rowi:= 5; -- rowing CASE Clauses CASE i IN <action1>, <action2>, <action3>, <action4>,... ESAC Pro(s): Enforced structure (as compared to FTN computed goto and ALGOL60 switch) Cons: CASE expression restricted to INT -- a bother If for, say, i = 2, 4, and 6 we want to perform the same action, that action would have to be repeated in place all three times. 12

Continue Cons of CASE Statement If during program development/maintenance, an action got added or removed, programmer could miss the change, and the compiler won't complain very difficult kind of error to identify. => birth of the labeling principle (Tony Hoare came up with model Wirth included in Pascal). Catchall phrase (else, otherwise, etc) to catch cases not named was born later (incorporated into Ada and Modula-2) Coercion A68 Summary... Elaborate interactions can lead to ambiguous and difficult to read programs Coercion may take place when user didn't intend it to The more coercion a translator can do, the less error checking provided to the user. ==> Do you provide coercion at expense of security? 13

A68 Summary (cont)... Type compatibility A68 uses structural equivalence mode complex = struct (real rp; real ip); mode weather = struct (real temp; real humid); are equivalent violates programmer's intentions References A68 Summary (cont)... While dangling refs are controlled in ALGOL68 they can generally only be checked at runtime. Rule: in an assignment to a ref variable, the scope of the object being pointed to must be at least as large as that of the ref variable itself. Dynamic data objects are reclaimed only when control leaves the scope of the associated ref variable. 14

A68 Summary (cont)... Orthogonality in general (real x,y; read((x,y)); if x<y then a else b fi):= b+ if a:=a+1; a>b then c:=c+1; +b else c:=c-1; a fi Small set of concepts interacting in a very complex way. How is simplicity best achieved? Algol68: orthogonality Pascal: non-rotho + "simple facilities with simple interactions." Pascal 15

Pascal History Wirth on Design committee for ALGOL68 quit over differences in design philosophy Pascal meant to be simple, teaching language Target was CDC6000 family initially explains functions having simple return types only (fit in one 60-bit word) Much of Pascal design drawn from ALGOL68 design Sometimes worse! (e.g. function return types, pointer scope) Pascal: First Impression A collection of irregularities Files cannot be passed by value Components of packed data structures cannot be passed by reference Procs and funcs passed as parameters can only have byvalue parameters Functions can only return simple types Formal param types can only be specified by a type identifier, not by its representation Variables of enumerated type can only be initialized by assignment, not by input values 16

Discriminated & Free Union Variant Records Example (discriminated union): Type state = (tennessee, rest); pi_rep = record case loc: state of Free union tennessee: (intpi: integer); removes tag rest: (repi: real); end; Assume: VAR pi: pi_rep; Variant Record Examples CASE pi.loc of tennessee: pi.intpi:= 3; --OK. compiler can rest: pi.repi:= 3.1415926; -- often check. end; pi.repi:= 3.1415926; --error if pi.loc = tennessee pi.repi:= 3.1415926; -- OK if pi.loc=rest pi.loc:= tennessee; -- OK, but no aggregate writeln(pi.intpi); -- garbage w/o tags: pi.repi:= 3.1415926; -- No way to catch this writeln(pi.intpi); -- error, even at runtime. ==> verdict: variant records defeat Pascal type system. --inconsistent with rest of language. 17

Name vs Structure Equivalence Name: Types of two objects match only if they were declared using the same type name Provides best protection against errors Can require artificial creation of names simply to satisfy nameequiv requirements. T1 = T2 does not satisfy name equiv but is often allowed. Structural: Types of two objects match if they have the same "structure More relaxed. Prevents unnecessary creation of type names. Has many logical flaws Pascal Scope Rules... Type T1 =...... Procedure p1; Type T2 = <structure of> T1 -- *** T1 =... which T1 is ref'd at ***? (A) T2's ref to T1 is to T1 in outer level (B) T2's ref to T1 is to T1 in local level Interpretation (B) is consistent with User Report, But (A) is one usually used 18

Binding to Outer Level Type r1 = record r2ptr: ^r2 end; r2 = record r1ptr: ^r1 end; If r2 defined in outer scope, that's what r2ptr is bound to. If r2 is defined in outer scope later on, meaning of program is changed! Wulf, Shaw: vulnerability... C 19

History Design goals Evaluate C Contributions Support/violation of principles Interesting troublesome interactions among language features. 20