Type-Safe Web Programming Using Routed Multiparty Session Types in Typescript

Total Page:16

File Type:pdf, Size:1020Kb

Type-Safe Web Programming Using Routed Multiparty Session Types in Typescript MENG INDIVIDUAL PROJECT IMPERIAL COLLEGE LONDON DEPARTMENT OF COMPUTING Type-safe Web Programming Using Routed Multiparty Session Types in TypeScript Supervisor: Prof. Nobuko Yoshida Author: Anson Miu Second Marker: Dr. Iain Phillips June 18, 2020 Abstract Modern web programming involves coordinating interactions between web browser clients and a web server. Typically, the interactions are informally described, making it difficult to verify communication correctness in web-based distributed systems. Multiparty Session Types (MPST) are a typing discipline for concurrent processes that communicate via message passing. MPST theory can ensure communication safety properties and protocol conformance. Existing work in session-typed web development over WebSocket transport is incompatible with modern web program- ming practices and is limited to supporting communication protocols that implement the server-centric network topology. We address limitations in the current state of the art by: (1) implementing SES- SIONTS, a code generation toolchain for session-typed web development over Web- Socket transport using TypeScript; and (2) presenting ROUTEDSESSIONS, a new mul- tiparty session type theory that supports routed communications. SESSIONTS provides developers with TypeScript APIs generated from a communi- cation protocol specification based on multiparty session type theory. Our work is compatible with modern web programming industrial practices. The generated APIs build upon TypeScript concurrency practices, complement the event-driven style of programming in full-stack web development, and are compatible with the Node.js runtime for server-side endpoints and the React.js framework for browser-side end- points. We evaluate the expressiveness of SESSIONTS for modern web programming using case studies of protocols found in web services, and analyse the performance overhead through running benchmarks against a baseline implementation. ROUTEDSESSIONS can express interactions to be routed via an intermediate partic- ipant. Using ROUTEDSESSIONS, we propose an approach for supporting peer-to-peer communication between browser-side endpoints through routing communication via the server in a way that avoids excessive serialisation and preserves communication safety. We evaluate the correctness of ROUTEDSESSIONS by proving communication safety properties, such as deadlock freedom. Acknowledgements I would like to thank Prof. Nobuko Yoshida, Fangyi Zhou and Dr. Francisco Ferreira for their continuous support, encouragement and motivation during the project. I extend my gratitude to the members of the Mobility Reading Group. Their regular meetings have been a source of inspiration for me, and helped me spark new ideas to incorporate into the project. I would also like to thank Prof. Peter Pietzuch for supporting me as my personal tutor throughout the degree. I would like to thank all the friends I have made throughout my time at Imperial. In particular, to the friends under the namespace labelled Reply 404 at the time of writing: I am forever grateful for every bit of shared memory over the past four years. Finally, I would like to thank my family for their unconditional love and support throughout my life, and encouraging me to pursue a degree abroad. Contents List of Figures5 List of Tables6 Listings7 1 Introduction9 1.1 Motivation.................................9 1.2 Objectives................................. 11 1.3 Contributions............................... 13 2 Background 15 2.1 Session Types............................... 15 2.1.1 Process Calculus......................... 16 2.1.2 Binary Session Types....................... 17 2.1.3 Multiparty Session Types..................... 22 2.2 Related Work............................... 24 2.2.1 Scribble and Endpoint API Generation............. 25 2.2.2 Session Types in Web Development............... 29 2.3 TypeScript................................. 31 I Implementing Server-Centric Topologies over WebSockets 33 3 SESSIONTS: Session Type API Generation for TypeScript 34 3.1 Development Workflow......................... 34 3.1.1 Protocol Specification with Scribble............... 35 3.1.2 From Scribble to EFSM...................... 36 3.1.3 API Generation.......................... 36 3.2 Implementation.............................. 38 3.3 Testing................................... 39 4 NODEMPST: Back-End Session Type Web Development 41 4.1 Challenges................................. 42 4.2 Approach................................. 42 4.3 EFSM Encoding.............................. 42 4.3.1 Roles, Labels, Messages..................... 42 1 CONTENTS 4.3.2 Handler APIs........................... 44 4.3.3 Wrapping Handlers in “Implementations”........... 45 4.4 Runtime.................................. 48 4.4.1 Managing Connections...................... 49 4.4.2 Executing the EFSM....................... 50 4.4.3 Sending Messages........................ 53 4.4.4 Receiving Messages........................ 54 4.4.5 Handling Termination...................... 59 4.5 Alternative Designs............................ 61 4.6 Limitations................................ 62 4.7 Summary................................. 62 5 REACTMPST: Front-End Session Type Web Development 63 5.1 Challenges................................. 64 5.2 Approach................................. 64 5.2.1 The React Framework...................... 65 5.3 EFSM Encoding.............................. 66 5.3.1 Send States............................ 67 5.3.2 Receive States........................... 70 5.3.3 Terminal States.......................... 72 5.4 Runtime.................................. 73 5.4.1 Connecting to the Session.................... 75 5.4.2 Executing the EFSM....................... 75 5.4.3 Sending Messages........................ 76 5.4.4 Receiving Messages........................ 78 5.4.5 Handling Termination...................... 79 5.5 Alternative Designs............................ 79 5.6 Limitations................................ 80 5.7 Summary................................. 80 6 Extensions 81 6.1 Supporting Asynchronous Implementations.............. 81 6.1.1 Motivation............................ 81 6.1.2 API Extension........................... 83 6.1.3 Runtime Extension........................ 84 6.1.4 Limitations............................ 85 6.2 Error Handling.............................. 85 6.2.1 Motivation............................ 86 6.2.2 API Extension........................... 87 6.2.3 Runtime Extension........................ 88 6.2.4 Caveats with Asynchronous Operations............. 92 6.2.5 Limitations............................ 92 2 CONTENTS II Implementing Arbitrary Topologies over WebSockets 93 7 Motivation: Supporting Peer-to-Peer Interactions 94 7.1 TWO BUYER Protocol........................... 94 7.2 Proposal: Server as a Router....................... 95 7.3 Challenges................................. 96 8 ROUTEDSESSIONS: A Theory of Routed Multiparty Session Types 98 8.1 Syntax for Global and Local Types.................... 98 8.1.1 Global Types........................... 98 8.1.2 Local Types............................ 99 8.1.3 Projection............................. 101 8.1.4 Well-formedness......................... 102 8.2 Labelled Transition System (LTS) Semantics.............. 103 8.2.1 LTS Semantics over Global Types................ 104 8.2.2 LTS Semantics over Local Types................. 105 8.3 LTS Soundness and Completeness with respect to Projection..... 107 8.3.1 LTS Semantics over Configurations............... 108 8.3.2 Extending Projection for Configurations............ 109 8.3.3 Trace Equivalence........................ 110 8.3.4 Deadlock Freedom........................ 114 8.4 From Canonical MPST to ROUTEDSESSIONS .............. 120 8.4.1 Router-Parameterised Encoding................. 120 8.4.2 Preserving Well-formedness................... 122 8.4.3 Preserving Communication................... 124 8.5 Summary................................. 127 9 Implementing ROUTEDSESSIONS in SESSIONTS 128 9.1 Extending NODEMPST.......................... 128 9.2 Extending REACTMPST......................... 129 III Evaluation and Conclusion 131 10 Evaluation 132 10.1 Multiparty Sessions: NOUGHTS AND CROSSES ............. 133 10.1.1 Game Server........................... 133 10.1.2 Game Players........................... 135 10.1.3 Summary............................. 135 10.2 Routed Multiparty Sessions: TWO BUYERS ............... 136 10.3 Performance Benchmarks........................ 137 10.3.1 Setup............................... 138 10.3.2 Execution Pattern......................... 140 10.3.3 Overhead............................. 141 10.4 Summary................................. 143 3 CONTENTS 11 Conclusion 145 11.1 Contributions............................... 145 11.2 Future Work................................ 146 Bibliography 148 A Lemmas and Proofs 153 A.1 Lemmas and Proofs for Chapter 8.................... 153 B Artefacts for Evaluation 155 B.1 Implementation for NOUGHTS AND CROSSES .............. 155 B.2 Package Dependencies for Benchmarks................. 156 4 List of Figures 1.1 Message-Passing Architecture of Web-Based Flight Booking Service. 10 2.1 Syntax of Asynchronous π-calculus................... 17 2.2 Syntax of Session Calculus with Branching, Selection and Recursion. 18 2.3 Syntax of Session Types......................... 19 2.4 Syntax of Global Types.......................... 22 2.5 Definition of Merging Operator..................... 23 2.6 Type Checking with Multiparty
Recommended publications
  • Purerl-Cookbook Documentation
    purerl-cookbook Documentation Rob Ashton Jun 17, 2021 Contents 1 The build process 3 1.1 Purerl (Server) Build...........................................3 1.2 Erlang (Server) Build..........................................3 1.3 Purescript (Client) Build.........................................4 2 Editors 9 2.1 Other editors...............................................9 3 Skeleton 13 3.1 Erlang.................................................. 13 3.2 Purerl................................................... 15 3.3 Purescript................................................. 17 4 Basic OTP 19 4.1 OTP Entry Point............................................. 19 4.2 OTP Supervisor............................................. 20 4.3 OTP Gen server............................................. 22 4.4 Dynamic Supervision Trees....................................... 23 5 Web Server 25 5.1 Stetson.................................................. 25 5.2 Stetson Routing............................................. 26 5.3 Stetson Handlers............................................. 28 5.4 Stetson Websockets........................................... 29 5.5 Stetson Streaming............................................ 30 6 Logging 33 6.1 Lager................................................... 33 6.2 Logger.................................................. 34 7 Messaging 37 7.1 Subscribing to Incoming messages (pseudo-example).......................... 37 7.2 Sending Outgoing Messages (pseudo example)............................. 38 8 Interop 47 8.1
    [Show full text]
  • ML Module Mania: a Type-Safe, Separately Compiled, Extensible Interpreter
    ML Module Mania: A Type-Safe, Separately Compiled, Extensible Interpreter The Harvard community has made this article openly available. Please share how this access benefits you. Your story matters Citation Ramsey, Norman. 2005. ML Module Mania: A Type-Safe, Separately Compiled, Extensible Interpreter. Harvard Computer Science Group Technical Report TR-11-05. Citable link http://nrs.harvard.edu/urn-3:HUL.InstRepos:25104737 Terms of Use This article was downloaded from Harvard University’s DASH repository, and is made available under the terms and conditions applicable to Other Posted Material, as set forth at http:// nrs.harvard.edu/urn-3:HUL.InstRepos:dash.current.terms-of- use#LAA ¡¢ £¥¤§¦©¨ © ¥ ! " $# %& !'( *)+ %¨,.-/£102©¨ 3¤4#576¥)+ %&8+9©¨ :1)+ 3';&'( )< %' =?>A@CBEDAFHG7DABJILKM GPORQQSOUT3V N W >BYXZ*[CK\@7]_^\`aKbF!^\K/c@C>ZdX eDf@hgiDf@kjmlnF!`ogpKb@CIh`q[UM W DABsr!@k`ajdtKAu!vwDAIhIkDi^Rx_Z!ILK[h[SI ML Module Mania: A Type-Safe, Separately Compiled, Extensible Interpreter Norman Ramsey Division of Engineering and Applied Sciences Harvard University Abstract An application that uses an embedded interpreter is writ- ten in two languages: Most code is written in the original, The new embedded interpreter Lua-ML combines extensi- host language (e.g., C, C++, or ML), but key parts can be bility and separate compilation without compromising type written in the embedded language. This organization has safety. The interpreter’s types are extended by applying a several benefits: sum constructor to built-in types and to extensions, then • Complex command-line arguments aren’t needed; the tying a recursive knot using a two-level type; the sum con- embedded language can be used on the command line.
    [Show full text]
  • Marcelo Camargo (Haskell Camargo) – Résumé Projects
    Marcelo Camargo (Haskell Camargo) – Résumé https://github.com/haskellcamargo [email protected] http://coderbits.com/haskellcamargo Based in Joinville / SC – Brazil Knowledge • Programming languages domain: ◦ Ada, AdvPL, BASIC, C, C++, C#, Clipper, Clojure, CoffeeScript, Common LISP, Elixir, Erlang, F#, FORTRAN, Go, Harbour, Haskell, Haxe, Hy, Java, JavaScript, Ink, LiveScript, Lua, MATLAB, Nimrod, OCaml, Pascal, PHP, PogoScript, Processing, PureScript, Python, Ruby, Rust, Self, Shell, Swift, TypeScript, VisualBasic [.NET], Whip, ZPL. • Markup, style and serialization languages: ◦ Markdown, reStructuredText, [X] HTML, XML, CSS, LESS, SASS, Stylus, Yaml, JSON, DSON. • Database management systems: ◦ Oracle, MySQL, SQL Server, IBM DB2, PostgreSQL. • Development for operating systems: ◦ Unix based, Windows (CE mobile included), Android, Firefox OS. • Parsers and compilers: ◦ Macros: ▪ Sweet.js, preprocessor directives. ◦ Parser and scanner generators: ▪ ANTLR, PEG.js, Jison, Flex, re2c, Lime. • Languages: ◦ Portuguese (native) ◦ English (native) ◦ Spanish (fluent) ◦ French (fluent) ◦ Turkish (intermediate) ◦ Chinese (mandarin) (intermediate) ◦ Esperanto (intermediate) Projects • Prelude AdvPL – a library that implements functional programming in AdvPL and extends its syntax to a more expressive one; it's a port of Haskell's Prelude; • Frida – a LISP dialect that runs on top of Node.js; • PHPP – A complete PHP preprocessor with a grammar able to identify and replace tokens and extend/modify the language syntax, meant to be implemented
    [Show full text]
  • Tierless Web Programming in ML Gabriel Radanne
    Tierless Web programming in ML Gabriel Radanne To cite this version: Gabriel Radanne. Tierless Web programming in ML. Programming Languages [cs.PL]. Université Paris Diderot (Paris 7), 2017. English. tel-01788885 HAL Id: tel-01788885 https://hal.archives-ouvertes.fr/tel-01788885 Submitted on 9 May 2018 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. Distributed under a Creative Commons Attribution - NonCommercial - ShareAlike| 4.0 International License Thèse de doctorat de l’Université Sorbonne Paris Cité Préparée à l’Université Paris Diderot au Laboratoire IRIF Ecole Doctorale 386 — Science Mathématiques De Paris Centre Tierless Web programming in ML par Gabriel Radanne Thèse de Doctorat d’informatique Dirigée par Roberto Di Cosmo et Jérôme Vouillon Thèse soutenue publiquement le 14 Novembre 2017 devant le jury constitué de Manuel Serrano Président du Jury Roberto Di Cosmo Directeur de thèse Jérôme Vouillon Co-Directeur de thèse Koen Claessen Rapporteur Jacques Garrigue Rapporteur Coen De Roover Examinateur Xavier Leroy Examinateur Jeremy Yallop Examinateur This work is licensed under a Creative Commons “Attribution- NonCommercial-ShareAlike 4.0 International” license. Abstract Eliom is a dialect of OCaml for Web programming in which server and client pieces of code can be mixed in the same file using syntactic annotations.
    [Show full text]
  • Safety Properties Liveness Properties
    Computer security Goal: prevent bad things from happening PLDI’06 Tutorial T1: Clients not paying for services Enforcing and Expressing Security Critical service unavailable with Programming Languages Confidential information leaked Important information damaged System used to violate laws (e.g., copyright) Andrew Myers Conventional security mechanisms aren’t Cornell University up to the challenge http://www.cs.cornell.edu/andru PLDI Tutorial: Enforcing and Expressing Security with Programming Languages - Andrew Myers 2 Harder & more important Language-based security In the ’70s, computing systems were isolated. Conventional security: program is black box software updates done infrequently by an experienced Encryption administrator. Firewalls you trusted the (few) programs you ran. System calls/privileged mode physical access was required. Process-level privilege and permissions-based access control crashes and outages didn’t cost billions. The Internet has changed all of this. Prevents addressing important security issues: Downloaded and mobile code we depend upon the infrastructure for everyday services you have no idea what programs do. Buffer overruns and other safety problems software is constantly updated – sometimes without your knowledge Extensible systems or consent. Application-level security policies a hacker in the Philippines is as close as your neighbor. System-level security validation everything is executable (e.g., web pages, email). Languages and compilers to the rescue! PLDI Tutorial: Enforcing
    [Show full text]
  • Seaflow Language Reference Manual Rohan Arora, Junyang Jin, Ho Sanlok Lee, Sarah Seidman Ra3091, Jj3132, Hl3436, Ss5311
    Seaflow Language Reference Manual Rohan Arora, Junyang Jin, Ho Sanlok Lee, Sarah Seidman ra3091, jj3132, hl3436, ss5311 1 Introduction 3 2 Lexical Conventions 3 2.1 Comments 3 2.2 Identifiers 3 2.3 Keywords 3 2.4 Literals 3 3 Expressions and Statements 3 3.1 Expressions 4 3.1.1 Primary Expressions 4 3.1.1 Operators 4 3.1.2 Conditional expression 4 3.4 Statements 5 3.4.1 Declaration 5 3.4.2 Immutability 5 3.4.3 Observable re-assignment 5 4 Functions Junyang 6 4.1 Declaration 6 4.2 Scope rules 6 4.3 Higher Order Functions 6 5 Observables 7 5.1 Declaration 7 5.2 Subscription 7 5.3 Methods 7 6 Conversions 9 1 Introduction Seaflow is an imperative language designed to address the asynchronous event conundrum by supporting some of the core principles of ReactiveX and reactive programming natively. Modern applications handle many asynchronous events, but it is difficult to model such applications using programming languages such as Java and JavaScript. One popular solution among the developers is to use ReactiveX implementations in their respective languages to architect event-driven reactive models. However, since Java and JavaScript are not designed for reactive programming, it leads to complex implementations where multiple programming styles are mixed-used. Our goals include: 1. All data types are immutable, with the exception being observables, no pointers 2. The creation of an observable should be simple 3. Natively support core principles in the ReactiveX specification 2 Lexical Conventions 2.1 Comments We use the characters /* to introduce a comment, which terminates with the characters */.
    [Show full text]
  • Cyclone: a Type-Safe Dialect of C∗
    Cyclone: A Type-Safe Dialect of C∗ Dan Grossman Michael Hicks Trevor Jim Greg Morrisett If any bug has achieved celebrity status, it is the • In C, an array of structs will be laid out contigu- buffer overflow. It made front-page news as early ously in memory, which is good for cache locality. as 1987, as the enabler of the Morris worm, the first In Java, the decision of how to lay out an array worm to spread through the Internet. In recent years, of objects is made by the compiler, and probably attacks exploiting buffer overflows have become more has indirections. frequent, and more virulent. This year, for exam- ple, the Witty worm was released to the wild less • C has data types that match hardware data than 48 hours after a buffer overflow vulnerability types and operations. Java abstracts from the was publicly announced; in 45 minutes, it infected hardware (“write once, run anywhere”). the entire world-wide population of 12,000 machines running the vulnerable programs. • C has manual memory management, whereas Notably, buffer overflows are a problem only for the Java has garbage collection. Garbage collec- C and C++ languages—Java and other “safe” lan- tion is safe and convenient, but places little con- guages have built-in protection against them. More- trol over performance in the hands of the pro- over, buffer overflows appear in C programs written grammer, and indeed encourages an allocation- by expert programmers who are security concious— intensive style. programs such as OpenSSH, Kerberos, and the com- In short, C programmers can see the costs of their mercial intrusion detection programs that were the programs simply by looking at them, and they can target of Witty.
    [Show full text]
  • Cs164: Introduction to Programming Languages and Compilers
    Lecture 19 Flow Analysis flow analysis in prolog; applications of flow analysis Ras Bodik Hack Your Language! CS164: Introduction to Programming Ali and Mangpo Languages and Compilers, Spring 2013 UC Berkeley 1 Today Static program analysis what it computes and how are its results used Points-to analysis analysis for understanding flow of pointer values Andersen’s algorithm approximation of programs: how and why Andersen’s algorithm in Prolog points-to analysis expressed via just four deduction rules Andersen’s algorithm via CYK parsing (optional) expressed as CYK parsing of a graph representing the pgm Static Analysis of Programs definition and motivation 3 Static program analysis Computes program properties used by a range of clients: compiler optimizers, static debuggers, security audit tools, IDEs, … Static analysis == at compile time – that is, prior to seeing the actual input ==> analysis answer must be correct for all possible inputs Sample program properties: does variable x has a constant value (for all inputs)? does foo() return a table (whenever called, on all inputs)? 4 Client 1: Program Optimization Optimize program by finding constant subexpressions Ex: replace x[i] with x[1] if we know that i is always 1. This optimizations saves the address computation. This analysis is called constant propagation i = 2 … i = i+2 … if (…) { …} … x[i] = x[i-1] 5 Client 2: Find security vulnerabilities One specific analysis: find broken sanitization In a web server program, as whether a value can flow from POST (untrusted source) to the SQL interpreter (trusted sink) without passing through the cgi.escape() sanitizer? This is taint analysis.
    [Show full text]
  • JNI – C++ Integration Made Easy
    JNI – C++ integration made easy Evgeniy Gabrilovich Lev Finkelstein [email protected] [email protected] Abstract The Java Native Interface (JNI) [1] provides interoperation between Java code running on a Java Virtual Machine and code written in other programming languages (e.g., C++ or assembly). The JNI is useful when existing libraries need to be integrated into Java code, or when portions of the code are implemented in other languages for improved performance. The Java Native Interface is extremely flexible, allowing Java methods to invoke native methods and vice versa, as well as allowing native functions to manipulate Java objects. However, this flexibility comes at the expense of extra effort for the native language programmer, who has to explicitly specify how to connect to various Java objects (and later to disconnect from them, to avoid resource leak). We suggest a template-based framework that relieves the C++ programmer from most of this burden. In particular, the proposed technique provides automatic selection of the right functions to access Java objects based on their types, automatic release of previously acquired resources when they are no longer necessary, and overall simpler interface through grouping of auxiliary functions. Introduction The Java Native Interface1 is a powerful framework for seamless integration between Java and other programming languages (called “native languages” in the JNI terminology). A common case of using the JNI is when a system architect wants to benefit from both worlds, implementing communication protocols in Java and computationally expensive algorithmic parts in C++ (the latter are usually compiled into a dynamic library, which is then invoked from the Java code).
    [Show full text]
  • Difference Between Method Declaration and Signature
    Difference Between Method Declaration And Signature Asiatic and relaxed Dillon still terms his tacheometry namely. Is Tom dirt or hierarchal after Zyrian Nelson hasting so variously? Heterozygous Henrique instals terribly. Chapter 15 Functions. How junior you identify a function? There play an important difference between schedule two forms of code block seeing the. Subroutines in C and Java are always expressed as functions methods which may. Only one params keyword is permitted in a method declaration. Complex constant and so, where you declare checked exception parameters which case, it prompts the method declaration group the habit of control passes the positional. Overview of methods method parameters and method return values. A whole object has the cash public attributes and methods. Defining Methods. A constant only be unanimous a type explicitly by doing constant declaration or. As a stop rule using prototypes is the preferred method as it. C endif Class HelloJNI Method sayHello Signature V JNIEXPORT. Method signature It consists of the method name just a parameter list window of. As I breathe in the difference between static and dynamic binding static methods are. Most electronic signature solutions in the United States fall from this broad. DEPRECATED Method declarations with type constraints and per source filter. Methods and Method Declaration in Java dummies. Class Methods Apex Developer Guide Salesforce Developers. Using function signatures to remove a library method Function signatures are known important snapshot of searching for library functions The F libraries. Many different kinds of parameters with rather subtle semantic differences. For addition as real numbers the distinction is somewhat moot because is.
    [Show full text]
  • Data Types Are Values
    Data Types Are Values James Donahue Alan Demers Data Types Are Values James Donahue Xerox Corporation Palo Alto Research Center 3333 Coyote Hill Road Palo Alto, California 94304 Alan Demers Computer Science Department Cornell University Ithaca, New York 14853 CSL -83-5 March 1984 [P83-00005] © Copyright 1984 ACM. All rights reserved. Reprinted with permission. A bst ract: An important goal of programming language research is to isolate the fundamental concepts of languages, those basic ideas that allow us to understand the relationship among various language features. This paper examines one of these underlying notions, data type, with particular attention to the treatment of generic or polymorphic procedures and static type-checking. A version of this paper will appear in the ACM Transact~ons on Programming Languages and Systems. CR Categories and Subject Descriptors: 0.3 (Programming Languages), 0.3.1 (Formal Definitions and Theory), 0.3.3 (Language Constructs), F.3.2 (Semantics of Programming Languages) Additional Keywords and Phrases: data types, polymorphism XEROX Xerox Corporation Palo Alto Research Center 3333 Coyote Hill Road Palo Alto, California 94304 DATA TYPES ARE VALVES 1 1. Introduction An important goal of programming language research is to isolate the fundamental concepts of languages, those basic ideas that allow us to understand the relationship among various language features. This paper examines one of these underlying notions, data type, and presents a meaning for this term that allows us to: describe a simple treatment of generic or polymorphic procedures that preserves full static type-checking and allows unrestricted use of recursion; and give a precise meaning to the phrase strong typing, so that Language X is strongly typed can be interpreted as a critically important theorem about the semantics of the language.
    [Show full text]
  • Education Social
    Jens Krause Hamburg Area - Germany | http://jkrause.io | [email protected] Independent Software Developer with ~20 years of experiences in the industry. Today focused on building software in the crypto and blockchain space by using Functional Programming (Haskell, PureScript, Rust etc). Contract work (Detailed portfolio: http://jkrause.io/arbeiten/) 2016 - 2019 Blockchain development LNX Senior Blockchain Architect Seoul / South Korea - Prepare DAG part to work with Substrate May 2019 – August 2019 - p2p handling of DAG nodes independently of Substrate (libp2p, Rust) (contract + remote work) - e2e / unit tests (Rust) - Basic architecture of LNX wallet (Vue.js, Vuex, polkadot.js, TypeScript) FOAM Senior Blockchain Developer New York / USA - Front- and backend development of a TCR (Ethereum) based world map April 2018 – April 2019 http://map.foam.space (PureScript, Haskell) (contract + remote work) - PoC of Plasma MVP implementation with Cosmos (Go, PureScript) - Misc. (e2e, unit tests, Solidity) IOHK Cardano SL Developer – Team Haskell Hong Kong - Front- and backend development of Cardano‘s blockchain explorer Dec. 2016 – April 2018 https://cardanoexplorer.com (PureScript, Haskell) (contract + remote work) - Re-write of Daedalus wallet API (Haskell) - Developing API layer to bridge Daedalus wallet (PureScript) - Testing and re-factoring of Cardano-SL (Haskell) - Misc. PoC‘s (e.g. type generator Haskell to PureScript) 2012 - 2016 Web-, Mobile development Misc. projects / clients Senior Developer Cellular, SinnerSchrader, - Web / Mobile applications (Angular, Backbone, Ionic, Knockout, React, misc. startups, Volkswagen, React Native, RxJS, TypeScript, CoffeeScript, ES 6/7, RubyMotion) ZDF, TUI, etc. - Backend development (NodeJS, PHP, Zend, RabbitMQ, Ruby) - TDD / BDD / E2E (Karma, Istanbul, Mocha, Sinon, Enzyme, Webdriver, CucumberJS) 1999 - 2012 Web-, Desktop-, Mobile development Misc.
    [Show full text]