An implementation of the MPass programming language based on a session type interpretation of pure linear logic with recursion. Examples: see lecture6.mps Creating a standalone executable with mlton % make mpass % ./mpass lecture6.mps (single file) % make test (regression testing) Running interactively in SML/NJ % sml - CM.make "sources.cm"; - Top.mpass "lecture6.mps"; (* testing single file *) Version notes 0.1 - first release 0.2 - bug fix, improved error messages 0.3 - subtyping with --subtyping (-s) flag; bug fix 0.4 - bug fixes 0.5 - observation depth with --depth parameter -------------------------------------------------- Grammar -------------------------------------------------- COMMENTS '%' '\n' for single-line comment '(*' '*)' for multi-line, properly nested comment IDENTIFIERS ::= [!"#$%&'()*+,-./:;<=>?@[]^_`{|}~] (all except '_\ and whitespace) ::= [a-zA-Z_0-9']* ::= [a-zA-Z_]* ::= ' | '+ ::= [ \n\t\r\v\f]+ Shadowing of variables is disallowed. OPERATOR PRECEDENCE operator precedence prec 5: * (infix, right assoc) prec 4: -o (infix, right assoc) operator precedence ';' is right assoc so x : +{'e : 1} <- (send x 'e ; send x ()) ; recv x (...) requires parentheses GRAMMAR ::= | '1' | '+' '{' '}' | '&' '{' '}' | '*' | '-o' | '(' ')' ::= ':' [ ',' ] ::= '(' ':' ')' ::= 'send' [';' ] | 'recv' '(' ')' | 'fwd' | 'call' * | [ ':' ] '<-' ';' | '(' ')' ::= '=>' [ '|' ] ::= '(' ')' | | ::= 'type' = | 'proc' * = | 'exec' % requires empty antecedent | 'fail' ::= *