Core-TyCO The Language Definition Version 0.1

Similar documents
Last class. CS Principles of Programming Languages. Introduction. Outline

Variables. Substitution

Flang typechecker Due: February 27, 2015

Polymorphic lambda calculus Princ. of Progr. Languages (and Extended ) The University of Birmingham. c Uday Reddy

CSE-321: Assignment 8 (100 points)

Programming Languages Third Edition

CVO103: Programming Languages. Lecture 5 Design and Implementation of PLs (1) Expressions

CSCI.6962/4962 Software Verification Fundamental Proof Methods in Computer Science (Arkoudas and Musser) Chapter p. 1/27

Homework 3 COSE212, Fall 2018

Higher-Order Logic. Specification and Verification with Higher-Order Logic

Programming Languages and Compilers (CS 421)

Introduction to SML Getting Started

CS4215 Programming Language Implementation. Martin Henz

CS4120/4121/5120/5121 Spring 2018 Xi Type System Specification Cornell University Version of February 18, 2018

The Impact of Linearity Information on the Performance of TyCO

CSE-321 Programming Languages 2011 Final

Lexical Considerations

Harvard School of Engineering and Applied Sciences Computer Science 152

Comp 411 Principles of Programming Languages Lecture 7 Meta-interpreters. Corky Cartwright January 26, 2018

Comp 311: Sample Midterm Examination

3.7 Denotational Semantics

Note that in this definition, n + m denotes the syntactic expression with three symbols n, +, and m, not to the number that is the sum of n and m.

A Multi-Threaded Asynchronous Language

CPS 506 Comparative Programming Languages. Programming Language Paradigm

Lexical Considerations

CMSC 330: Organization of Programming Languages

Language Reference Manual simplicity

SML A F unctional Functional Language Language Lecture 19

The SPL Programming Language Reference Manual

Type Inference with Inequalities

Lecture Notes on Program Equivalence

CMSC 330: Organization of Programming Languages. Operational Semantics

Calculus of Inductive Constructions

Functional Programming. Pure Functional Programming

Lecture 15 CIS 341: COMPILERS

1 Lexical Considerations

G Programming Languages - Fall 2012

Chapter 15. Functional Programming Languages

Functional Programming Languages (FPL)

CS 6110 S11 Lecture 25 Typed λ-calculus 6 April 2011

1 Introduction. 3 Syntax

The Typed λ Calculus and Type Inferencing in ML

(Refer Slide Time: 4:00)

Scope and Introduction to Functional Languages. Review and Finish Scoping. Announcements. Assignment 3 due Thu at 11:55pm. Website has SML resources

Programming Language Features. CMSC 330: Organization of Programming Languages. Turing Completeness. Turing Machine.

CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages. Formal Semantics of a Prog. Lang. Specifying Syntax, Semantics

Type Checking and Type Inference

Decaf Language Reference

A First Look at ML. Chapter Five Modern Programming Languages, 2nd ed. 1

Introduction to the Lambda Calculus

Agenda. CS301 Session 11. Common type constructors. Things we could add to Impcore. Discussion: midterm exam - take-home or inclass?

COMP520 - GoLite Type Checking Specification

The PCAT Programming Language Reference Manual

An analysis framework for an imperative privacy-preserving programming language

Principles of Programming Languages 2017W, Functional Programming

CMSC 330: Organization of Programming Languages. Lambda Calculus

Arbitrary-rank polymorphism in (GHC) Haskell

SEMANTIC ANALYSIS TYPES AND DECLARATIONS

Intro to semantics; Small-step semantics Lecture 1 Tuesday, January 29, 2013

Specifying Syntax. An English Grammar. Components of a Grammar. Language Specification. Types of Grammars. 1. Terminal symbols or terminals, Σ

Functional Programming. Big Picture. Design of Programming Languages

RSL Reference Manual

Lecture Notes on Data Representation

Semantics and Pragmatics of NLP Propositional Logic, Predicates and Functions

Lecture Notes on Static Semantics

A New Proof of P-time Completeness of Linear Lambda Calculus

COSC252: Programming Languages: Semantic Specification. Jeremy Bolton, PhD Adjunct Professor

Lecture 3: Recursion; Structural Induction

CSE505, Fall 2012, Midterm Examination October 30, 2012

Denotational Semantics. Domain Theory

Goals: Define the syntax of a simple imperative language Define a semantics using natural deduction 1

SMURF Language Reference Manual Serial MUsic Represented as Functions

DaMPL. Language Reference Manual. Henrique Grando

Lecture 2: Big-Step Semantics

Types, Expressions, and States

Sémantique des Langages de Programmation (SemLP) DM : Region Types

Where is ML type inference headed?

Lambda Calculus. Variables and Functions. cs3723 1

CMSC 330: Organization of Programming Languages

Formal Systems and their Applications

A Functional Evaluation Model

(Not Quite) Minijava

Decaf Language Reference Manual

One of a number of approaches to a mathematical challenge at the time (1930): Constructibility

Lecture #13: Type Inference and Unification. Typing In the Language ML. Type Inference. Doing Type Inference

LECTURE 16. Functional Programming

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages. Lambda calculus

COP4020 Programming Languages. Functional Programming Prof. Robert van Engelen

6.821 Programming Languages Handout Fall MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Compvter Science

CMSC 330: Organization of Programming Languages. Lambda Calculus

Lecture 2: SML Basics

15-819M: Data, Code, Decisions

Z Notation. June 21, 2018

Programming Languages Assignment #7

Questions? Static Semantics. Static Semantics. Static Semantics. Next week on Wednesday (5 th of October) no

1.3. Conditional expressions To express case distinctions like

Fall Lecture 3 September 4. Stephen Brookes

Data Abstraction. An Abstraction for Inductive Data Types. Philip W. L. Fong.

ML Has Principal Typings

Transcription:

Core-TyCO The Language Definition Version 0.1 Vasco T. Vasconcelos Rui Bastos DI FCUL TR 98 3 March 1998 Departamento de Informática Faculdade de Ciências da Universidade de Lisboa Campo Grande, 1700 Lisboa Portugal Technical reports are available at http://www.di.fc.ul.pt/biblioteca/tech-reports. The files are stored in PDF, with the report number as filename. Alternatively, reports are available by post from the above address.

This is the second report on TyCO [3], a (still) experimental strongly and implicitly typed concurrent object oriented programming language based on a predicative polymorphic calculus of objects [4, 5], featuring asynchronous messages, objects, and process declarations, together with a predicative polymorphic typing assignment system assigning monomorphic types to variables and polymorphic types to process variables. Sections 1 and 2 define the syntax and static semantics of the language, both in the style of Standard ML [2]. Dynamic semantics is the subject of Section 3, presented along the lines of the π-calculus [1]. Contents 1 Syntax 1 1.1 Reserved words............................ 1 1.2 Identifiers............................... 2 1.3 Grammar............................... 2 1.4 Syntactic restrictions......................... 4 1.5 Comments............................... 4 1.6 Derived forms for processes..................... 4 2 Static semantics 4 2.1 Simple objects............................ 4 2.2 Compound objects.......................... 4 2.3 Operations on finite maps...................... 4 2.4 Recursive types, infinite trees, and typing compatibility..... 5 2.5 Free type variables.......................... 5 2.6 Type schemes, closure, and instances................ 5 2.7 Environment modification and projection............. 5 2.8 Derived forms for types....................... 6 2.9 Types for primitive operations and objects............. 6 2.10 Inference rules............................ 6 3 Dynamic semantics 9 3.1 Free identifiers............................ 9 3.2 Variable substitution and α-conversion............... 10 3.3 Structural congruence........................ 10 3.4 Reduction rules............................ 11 1 Syntax 1.1 Reserved words Figure 1 lists the reserved words of core-tyco. identifiers. They may not be used as 1

and branch def else if in inaction into let new not or then!? { } [ ] ( ), _ + - * / % = <> > >= < <= ^ Figure 1: Reserved Words c or const Const constants (Integer, Boolean, and String) a, x or var Var variables v or val Const Var values l or label Label labels X or procvar ProcVar process variables Figure 2: Classes of Identifiers 1.2 Identifiers The classes of identifiers for core-tyco are shown in Figure 2. An integer constant (decimal notation only) is an optional negation symbol (-) followed by a non-empty sequence of decimal digits 0 9. Aboolean constant is either true or false. Astring constant is a sequence, between quotes ("), of zero or more characters. 1.3 Grammar The phrase classes for core-tyco are shown in Figure 3 and the grammatical rules in Figure 4. Brackets enclose optional phrases. program Program programs P, Q, R or proc Proc processes D or dec Dec declarations bind Bind process bindings multbind MultBind sequence of bindings M or method Method methods M + or methrow MethRow method rows e or exp Exp expressions expseq Exp + sequence of expressions varseq Var + sequence of variables valseq Val + sequence of values binop BinOp binary operators unop UnOp unary operators Figure 3: Phrase Classes The scope of new extends as far to the right as possible, and the operator takes precedence over def in, so, for example, def D in new xp Qmeans def D in (new x (P Q)). The precedence and associativity of the remaining operators (including arithmetical and logical) is standard. 2

program ::= proc program proc ::= var! label [ expseq ] message var?{ methrow } object new var proc scope restriction def dec in proc local declaration procvar [ expseq ] process instantiation proc proc parallel composition if exp then proc else proc conditional inaction inaction ( proc ) dec ::= multbind sequence of bindings multbind ::= bind and multbind multiple binding bind ::= procvar ( varseq ) =proc process binding methrow ::= method, methrow method row method ::= label ( varseq ) =proc method exp ::= exp binop exp infixed expression unop exp prefixed expression val value ( exp ) expseq ::= exp, expseq sequence of expressions varseq ::= var, varseq sequence of variables binop ::= + - * / % ^ = <> > >= < <= and or unop ::= - not Figure 4: Grammar 3

1.4 Syntactic restrictions 1. No label may appear twice in the same method row. 2. No method or process binding parameter list may contain the same variable twice. 3. No sequence of bindings may contain the same process variable twice. 1.5 Comments A comment is any character sequence beginning with -- and extending to the end of the same line. 1.6 Derived forms for processes A list of derived forms built from the primitives of the core language is shown in Figure 5, where variable z is fresh. Symbol = means rewrites to. 2 Static semantics 2.1 Simple objects The simple objects for the static semantics are defined in Figure 6. 2.2 Compound objects When A and B are sets, A B denotes the set of finite maps (partial functions with finite domain) from A to B. The domain of a finite map f is denoted dom(f). Figure 7 shows the compound objects for the static semantics. 2.3 Operations on finite maps A finite map will often be written explicitly in the form {a 1 : b 1,...,a n : b n }, for n 0; in particular, the empty map is {}. When a n = a 1 a n and b n = b 1 b n, we abbreviate the above finite map to {a n : b n }. When f and g are finite maps, the map f + g, called f modified by g, isthe finite map with domain dom(f) dom(g) andvalues (f+g)(a) = ifa dom(g) theng(a)elsef(a). When f is a finite map and A a set, f \ A, called f restricted by A, isthe finite map with domain dom(f) \ A and values (f \ A)(a) =f(a). 4

2.4 Recursive types, infinite trees, and typing compatibility Types are interpreted as regular infinite trees. A translation () from types to infinite trees is defined as follows. t = t ϱ = {l : α 1 α n l:α 1 α n ϱ} µt.α = fix(λρ.α [ρ/t]) Two types α and β are equivalent, denoted by α β, iffα =β. Two typings Γ and are compatible, denoted by Γ, iff whenever a dom(γ) dom( ) then Γ(a) (a). Similarly, two record types ϱ and ϱ are compatible, ϱ ϱ, iff whenever l dom(ϱ) dom(ϱ )thenϱ(l)=α 1 α n,ϱ (l)=β 1 β n, and α i β i,for1 i n. 2.5 Free type variables The set of free type variables in the various semantic objects is inductively defined as follows. ftv(t) = {t} ftv(α 1 α n ) = 1 i n ftv(α i) ftv(µt.α) = ftv(α)\{t} ftv( t n.τ) = ftv(τ)\{t n } ftv(f) = a dom(f) ftv(a) (for f a finite map) 2.6 Type schemes, closure, and instances Two type schemes are considered equal if they can be obtained from each other by renaming and reordering of bound type variables, and deleting type variables from the prefix which do not occur in the body. A type scheme σ = t n.τ generalizes another type scheme σ = u n.τ, written σ σ,ifτ =τ[α n /t n ], for some α n,andu n contains no free type variables of σ. Let τ be a sequence of types and E an environment. The closure of τ with respect to E, clos E (τ), is the type scheme t n.τ, wheret n =ftv(τ)\ftv(e). When B is a basis whose range contains only type sequences (rather than arbitrary type schemes), clos E (B), the closure of B with respect to E, isthe basis {X :clos E (τ) X:τ B}. 2.7 Environment modification and projection When E is an environment, Γ a typing and B abasis,e+bmeans E +({},B), and E +ΓmeansE+(Γ,{}). Given an environment E, the expression C of E accesses the C component of E, namely, Γ of E means the typing component of E andbof E means the basis component of E. 5

2.8 Derived forms for types Notation α n β m,forn, m 0, is used to emphasize the functional nature of some methods, and abbreviates type {val : α n {val : β m }}. For empty type sequences (when n or m are 0) we write () instead of ε. 2.9 Types for primitive operations and objects Core-TyCO has as predefined the primitive types int, bool, andstring, along with the following operations. + : int int int - : int int int * : int int int / : int int int % : int int int - : int int ^ : string string string and : bool bool bool or : bool bool bool not : bool bool The usual relational operations are also provided. Currently they may take as arguments only integers. = : int int bool <> : int int bool < : int int bool <= : int int bool > : int int bool >= : int int bool A basic stream based I/O facility is available by means of an object io. 2.10 Inference rules io : {getb :() bool, putb : bool, geti :() int, puti : int, gets :() string, puts : string} Variables Γ var type x dom(γ) Γ x Γ(x) (1) x dom(γ) Γ x α (2) 6

(2) Allows for free variables in processes. Sequences of variables Γ varseq typeseq Γ x α Γ+{x:α} varseq α n Γ x, varseq α α n (3) When the option is present, varseq is a sequence of n variables. Expressions Γ exp type, Γ Function typeof, when applied to a constant or a primitive operator, returns its type. Γ c typeof(c), {} (4) Γ x α Γ x α, {x : α} (5) typeof(binop) =ρ 1 ρ 2 ρ Γ exp 1 ρ 1, Γ 1 Γ exp 2 ρ 2, Γ 2 Γ 1 Γ 2 Γ exp 1 binop exp 2 ρ, Γ 1 +Γ 2 (6) typeof(unop) =ρ ρ Γ exp ρ, Γ Γ unop exp ρ, Γ (7) Comments: (6) By the current definition of binary operators, both parameters always have the same type, so ρ 1 = ρ 2. (7) Both the parameter and the returned result of all current unary operators have the same type, so ρ = ρ. Sequences of expressions Γ expseq typeseq, Γ Γ exp α, Γ Γ+Γ expseq α n, Γ Γ exp, expseq α α n,γ +Γ (8) When the option is present, expseq is a sequence of n expressions. Methods E method ϱ, Γ E + {x n : α n } proc Γ E l( x 1,...,x n )=proc {l:ε α n }, Γ \ {x n } (9) 7

When the option is present, the variables x n don t appear in the resulting typing. Method rows E methrow ϱ, Γ E method ϱ, Γ E methrow ϱ, Γ Γ Γ E method, methrow ϱ +ϱ,γ +Γ (10) When the option is present, we have dom(ϱ) dom(ϱ )=,bythesyntactic restrictions. Processes E proc Γ E inaction {} (11) ΓofE a ϱ ΓofE expseq α n, Γ l dom(ϱ) ϱ {l:ε α n } E a!l[ expseq ] {a:ϱ} +Γ (12) ΓofE a {} + ϱ E methrow ϱ, Γ {a : ϱ} Γ E a?{ methrow } {a:{} + ϱ } +Γ (13) E proc 1 Γ 1 E proc 2 Γ 2 Γ 1 Γ 2 E proc 1 proc 2 Γ 1 +Γ 2 (14) E + {x : α} proc Γ E new x proc Γ \{x} (15) B of E(X) ε α n ΓofE expseq α n, Γ E X[ expseq ] {} +Γ (16) E dec B E +B proc Γ E def dec in proc Γ (17) E proc Γ E (proc) Γ (18) ΓofE exp bool, Γ E proc 1 Γ 1 E proc 2 Γ 2 Γ Γ 1 Γ 2 E if exp then proc 1 else proc 2 Γ+Γ 1 +Γ 2 (19) 8

Comments: (12) Object a must contain (at least) a method l, accepting as arguments n values of types α n,forn 0. (15) Bound variable x does not appear in the resulting typing. (16) When the option is present, the instantiation of type schemes allows different occurrences of a process variable to have different types. Bindings E bind B E + {x n : α n } proc {} + {x n : α n } E X( x 1,...,x n )=proc {X:ε α n (20) } In the resulting basis, process variable X always has a type instead of a type scheme. Multiple bindings E multbind B B = B + B E + B bind B E + B multbind B (21) E bind and multbind B When the option is present, the syntactic restrictions assure that dom(b ) dom(b )=. Declarations E dec B E multbind B (22) E dec clos E (B) By rules (20) and (21) we have that basis B contains only types. The closure of B is what allows process variables to be used polymorphically, via rule (16) (in rule (17), proc is typed in an environment that already includes the polymorphic basis). Programs E program Γ E program {} (23) A program must have no free variables. 3 Dynamic semantics 3.1 Free identifiers A variable x occurs free in a process P if x is not in the scope P of a method l(... x...)=p, a process binding X(... x...)=p, or a scope restriction 9

new xp; otherwise it occurs bound. The set of free variables in a process P is denoted by fn(p ). A process variable X occurs free in a process if X is not in the scope P, Q,D of a declaration def X(...)=Q and D in P ; otherwise it occurs bound. The set of free process variables in a process P is denoted by fv(p ). 3.2 Variable substitution and α-conversion The simultaneous substitution of free variables x n in a process P by values v n, for n 0, and provided that each x does not appear twice in x n, is denoted by P [v n /x n ]. A process P is α-convertible to Q if Q results from P by a series of changes of bound variables and bound process variables. 3.3 Structural congruence Processes proc proc P is α-convertible to Q P Q (1) P Q Q P (2) (P Q) R P (Q R) (3) P inaction P (4) new x inaction inaction (5) new x new yp new y new xp (6) x fn(q) (new xp) Q new xp Q (7) def D in inaction inaction (8) x fn(d) def D in new xp new x def D in P (9) fv(d) fv(q) = (def D in P ) Q def D in (P Q) (10) 10

Method rows methrow methrow M + is a permutation of M + M + M + (11) Declarations dec dec D is a permutation of D D D (12) 3.4 Reduction rules Expressions exp val val val (1) exp 1 c 1 exp 2 c 2 exp 1 binop exp 2 c 1 binop c 2 (2) exp c unop exp unop c (3) (1) Constants and variables reduce to themselves. Sequences of expressions expseq valseq exp v expseq v n exp, expseq v v n (4) Processes proc proc expseq v n a!l[ expseq ] a?{l( x 1,...,x n )=P,methrow } P [v n /x n ] (5) expseq v n def X( x 1,...,x n )=P and D in X[ expseq ] Q def X( x 1,...,x n )=P and D in P [v n /x n ] Q (6) P P P Q P Q (7) 11

P P new xp new xp (8) P P def D in P def D in P (9) P P P Q Q Q P Q (10) References [1] Robin Milner. Functions as processes. Journal of Mathematical Structures in Computer Science, 2(2):119 141, 1992. [2] Robin Milner, Mads Tofte, Robert Harper, and David MacQueen. The Definition of Standard ML (Revised). MIT Press, 1997. [3] Vasco T. Vasconcelos. TyCO: the language definition, version 0.0. Keio University, July 1993. [4] Vasco T. Vasconcelos. Predicative polymorphism in π-calculus. In 6th Parallel Architectures and Languages Europe, volume 817 of LNCS, pages 425 437. Springer-Verlag, July 1994. [5] Vasco T. Vasconcelos and Mario Tokoro. A typing system for a calculus of objects. In 1st ISOTAS, volume 742 of LNCS, pages 460 474. Springer- Verlag, November 1993. 12

new x 1,...,x n proc = new x 1 new x n proc a?( varseq ) =proc = a?{val( varseq ) =proc} a![ expseq ] = a!val[ expseq ] l(... _...)=proc = l(... z...)=proc X(... _...)=proc = X(... z...)=proc if exp then proc = if exp then proc else inaction branch a! l [ expseq ] = new z into { methrow } a! l [ expseq, z] z?{ methrow } branch X[ expseq ] = new z into { methrow } X[ expseq, z] z?{ methrow } let varseq = a! l [ expseq ] = branch a! l [ expseq ] in proc into {val(varseq) =proc} let varseq = X[ expseq ] = branch X[ expseq ] in proc into {val(varseq) =proc} Figure 5: Derived Forms u, t or typevar TypeVar typevarseq TypeVarSeq = TypeVar n ρ or primtype PrimType = {int, bool, string} Figure 6: Simple Semantic Objects α, β Type = PrimType TypeVar RcdType RecType τ or α n TypeSeq = Type n ε Type 0 ϱ RcdType = Label TypeSeq µt.α RecType = TypeVar Type σ or t n.τ TypeScheme = n 0 TypeVarn TypeSeq Γ, Typing = Var Type B Basis = ProcVar TypeScheme E Env = Typing Basis Figure 7: Compound Semantic Objects 13