Developing a Monadic Type Checker for an Object-Oriented Language: an Experience Report

Total Page:16

File Type:pdf, Size:1020Kb

Developing a Monadic Type Checker for an Object-Oriented Language: an Experience Report Developing a Monadic Type Checker for an Object-Oriented Language: An Experience Report Elias Castegren Kiko Fernandez-Reyes Software and Computer Systems Information Technology KTH Royal Institute of Technology Uppsala University Sweden Sweden [email protected] [email protected] Abstract 1 Introduction Functional programming languages are well-suited for de- Compilers for functional languages are often written in veloping compilers, and compilers for functional languages functional languages themselves. For example, the Haskell, are often themselves written in a functional language. Func- OCaml, and F# compilers are written in their own respec- tional abstractions, such as monads, allow abstracting away tive language [1, 2, 5]. The recursive nature of functional some of the repetitive structure of a compiler, removing programming, as well as constructs such as algebraic data boilerplate code and making extensions simpler. Even so, types and pattern matching, lends itself well to traverse and functional languages are rarely used to implement compilers manipulate abstract syntax trees, which is a large part of the for languages of other paradigms. task of a compiler. Functional programming languages pro- This paper reports on the experience of a four-year long vide abstractions, such as type classes or ML style modules, project where we developed a compiler for a concurrent, which allows writing concise and extensible code. object-oriented language using the functional language Haskell. However, programmers are creatures of habit. Therefore, The focus of the paper is the implementation of the type compilers for imperative or object-oriented languages tend checker, but the design works well in static analysis tools, to be written in languages of these paradigms, e.g., the Java such as tracking uniqueness of variables to ensure data-race compiler and the Scala compiler are written in their respec- freedom. The paper starts from a simple type checker to tive languages, and the clang compiler framework for C and which we add more complex features, such as type state, C++ is written in C++ [3, 4, 6]. This habit prevents compiler with minimal changes to the overall initial design. writers from using attractive features from other languages. For example, a programmer developing a language tool in C CCS Concepts • Software and its engineering → Func- will miss out on features like pattern matching and useful tional languages; Compilers; Object oriented languages; • type system features that are not available in C.1 Theory of computation → Type theory. In this paper, we report on our experience using Haskell Keywords functional programming, object-oriented lan- to develop the compiler for the object-oriented language guages, type systems, compilers Encore [10]. The full compiler consists of ≈15,000 lines of Haskell which compiles Encore to C. To make the presenta- ACM Reference Format: tion fit in a paper, we use a subset of the language andfocus Elias Castegren and Kiko Fernandez-Reyes. 2019. Developing a on the implementation of the type checker (≈7,000 lines in Monadic Type Checker for an Object-Oriented Language: An Expe- the full compiler). We start from a simple type checker and rience Report. In Proceedings of the 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE ’19), October gradually refactor and extend it to make it more robust and 20–22, 2019, Athens, Greece. ACM, New York, NY, USA, 13 pages. feature rich. The monadic structure of the code allows these https://doi.org/10.1145/3357766.3359545 extensions with few or no changes to the original code. The language started as a research project, but has since Permission to make digital or hard copies of all or part of this work for evolved to a full language with support for parametric poly- personal or classroom use is granted without fee provided that copies morphism, subtyping via traits [31], concurrency, and a type are not made or distributed for profit or commercial advantage and that system that prevents data-races between threads sharing copies bear this notice and the full citation on the first page. Copyrights state [12]. This paper reports on our experience creating a for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or compiler for a research language, focusing on the features republish, to post on servers or to redistribute to lists, requires prior specific and robustness of the type checker. The techniques used are permission and/or a fee. Request permissions from [email protected]. not novel on their own, but we have not seen them used in SLE ’19, October 20–22, 2019, Athens, Greece this combination for an object-oriented language. © 2019 Copyright held by the owner/author(s). Publication rights licensed to ACM. 1The same argument could be made in the other direction, since functional ACM ISBN 978-1-4503-6981-7/19/10...$15.00 languages for example typically do not offer control over low-level details https://doi.org/10.1145/3357766.3359545 like memory layout. SLE ’19, October 20–22, 2019, Athens, Greece Elias Castegren and Kiko Fernandez-Reyes Audience Our hope is that this paper can serve as a source Expressions are mostly standard for an object-oriented of inspiration for language engineering researchers and com- language. For simplicity we use a let expression for intro- piler writers who want to use functional languages to de- ducing names and handling scopes (in the Encore compiler, velop compilers and tools for object-oriented languages. We an earlier phase translates an imperative style of variable expect the audience to be familiar with basic Haskell nota- declarations into let form). Sequencing of statements can tion, the standard monads, and basic extensions. be emulated by binding the result of the statement to an unused variable: “s1; s2” =) “let _ = s1 in s2”; or by Contributions using a “sequence expression” containing a list of expres- • An explanation of the initial design and implementa- sions, only the last of which is used for its value (this is tion of a type checker for an object-oriented language, the approach taken in the Encore compiler). An anonymous ¹ º using common functional programming constructs function λ x : τ :e (Lambda in Figure1) takes zero or more (Sections2–3). parameters. Note the difference between method calls, which • Descriptions of how to extend the type checker to call a method on a specified target, and function calls, which handle backtraces, reporting warnings, and throwing call a value of function type. multiple errors (Sections4–6). The task of the type checker is twofold: to ensure that the • A description of the use of phantom types to do type- AST is well-formed, and to decorate each expression node level programming, which ensures that the type checker with its type. Every expression in the AST data type has a indeed type checks the entire program (Section7). field etype, which has value Nothing after parsing and which • Explanation on how to add parametric polymorphism, will be assigned a type during the type checking phase (this subtyping via traits, and tracking of uniqueness of part of the design will be improved in Section7). Additionally, variables with no changes to the monadic design (Sec- the type checker uses an environment, storing a map of all tions8– 10). the classes of a program and all variables currently in scope. Since we only allow assigning to immutable val fields if The main point of the work presented here is the ease of we are currently in a constructor method, we also store a extension from the original type checker with new compiler boolean flag to track this. functionality, and how easily one can add object-oriented features, such as subtyping via traits. data Env = Env {ctable :: Map Name ClassDef ,vartable :: Map Name Type ,constructor :: Bool} 2 A Small Object-Oriented Language and its Typechecker We define a type class [37] Typecheckable with a single We define our object-oriented language below, and the en- function typecheck which takes such an environment and an coding of the abstract syntax tree (AST) using algebraic data AST node, and returns either the decorated node, or an error types in Figure1. value (TCError) representing one of the ways type checking can fail. To avoid having to check if each computation fails or not, we use the exception monad [35]: Classes L ::= class CfQ f : τ ; Mg Qualifiers Q ::= var j val data TCError = TypeMismatchError Type Type Methods M ::= def m¹x : τ º : τ f return e g | UnknownClassError Name | NonArrowTypeError Type Binary operators B ::= + j − j ∗ j / | NonClassTypeError Type Expressions e ::= x j let x = e in e j e:m¹eº j e:f | NonArrowTypeError Type | UninferrableError Expr j e B e j e¹eº j e = e j new C¹eº | .. j if e then e else e j e : τ j v class Typecheckable a where v ::= true j false j n j λ¹x : τ º:e j null typecheck :: Env ! a ! Except TCError a j ! j int j bool j unit Types τ ::= C τ τ Figure2 shows instances of Typecheckable for programs, classes, fields, types and expressions (for brevity, we show an A program consists of a list of class definitions. A class excerpt). Type checking a program corresponds to checking definition contains a list of field and method definitions. A its classes; type checking a class corresponds to extending the field definition has a name, a type, and a mutability modifier environment to include the variable this (Line7), and check- (val or var). A method definition has a name, a list of param- ing its fields and methods (Lines8–9); type checking a type eters, a return type, and a method body.
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]
  • 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]
  • GHC Reading Guide
    GHC Reading Guide - Exploring entrances and mental models to the source code - Takenobu T. Rev. 0.01.1 WIP NOTE: - This is not an official document by the ghc development team. - Please refer to the official documents in detail. - Don't forget “semantics”. It's very important. - This is written for ghc 9.0. Contents Introduction 1. Compiler - Compilation pipeline - Each pipeline stages - Intermediate language syntax - Call graph 2. Runtime system 3. Core libraries Appendix References Introduction Introduction Official resources are here GHC source repository : The GHC Commentary (for developers) : https://gitlab.haskell.org/ghc/ghc https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary GHC Documentation (for users) : * master HEAD https://ghc.gitlab.haskell.org/ghc/doc/ * latest major release https://downloads.haskell.org/~ghc/latest/docs/html/ * version specified https://downloads.haskell.org/~ghc/9.0.1/docs/html/ The User's Guide Core Libraries GHC API Introduction The GHC = Compiler + Runtime System (RTS) + Core Libraries Haskell source (.hs) GHC compiler RuntimeSystem Core Libraries object (.o) (libHsRts.o) (GHC.Base, ...) Linker Executable binary including the RTS (* static link case) Introduction Each division is located in the GHC source tree GHC source repository : https://gitlab.haskell.org/ghc/ghc compiler/ ... compiler sources rts/ ... runtime system sources libraries/ ... core library sources ghc/ ... compiler main includes/ ... include files testsuite/ ... test suites nofib/ ... performance tests mk/ ... build system hadrian/ ... hadrian build system docs/ ... documents : : 1. Compiler 1. Compiler Compilation pipeline 1. compiler The GHC compiler Haskell language GHC compiler Assembly language (native or llvm) 1. compiler GHC compiler comprises pipeline stages GHC compiler Haskell language Parser Renamer Type checker Desugarer Core to Core Core to STG STG to Cmm Assembly language Cmm to Asm (native or llvm) 1.
    [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]
  • Curriculum Vitae
    Diogo Castro Curriculum Vitae Summary I’m a Software Engineer based in Belfast, United Kingdom. My professional journey began as a C# developer, but Functional Programming (FP) soon piqued my interest and led me to learn Scala, Haskell, PureScript and even a bit of Idris. I love building robust, reliable and maintainable applications. I also like teaching and I’m a big believer in "paying it forward". I’ve learned so much from many inspiring people, so I make it a point to share what I’ve learned with others. To that end, I’m currently in charge of training new team members in Scala and FP, do occasional presentations at work and aim to do more public speaking. I blog about FP and Haskell at https://diogocastro.com/blog. Experience Nov 2017-Present Principal Software Engineer, SpotX, Belfast, UK. Senior Software Engineer, SpotX, Belfast, UK. Developed RESTful web services in Scala, using the cats/cats-effect framework and Akka HTTP. Used Apache Kafka for publishing of events, and Prometheus/Grafana for monitor- ing. Worked on a service that aimed to augment Apache Druid, a timeseries database, with features such as access control, a safer and simpler query DSL, and automatic conversion of monetary metrics to multiple currencies. Authored a Scala library for calculating the delta of any two values of a given type using Shapeless, a library for generic programming. Taught a weekly internal Scala/FP course, with the goal of preparing our engineers to be productive in Scala whilst building an intuition of how to program with functions and equational reasoning.
    [Show full text]
  • Communication-Safe Web Programming in Typescript with Routed Multiparty Session Types
    Communication-Safe Web Programming in TypeScript with Routed Multiparty Session Types Anson Miu Francisco Ferreira Imperial College London and Bloomberg Imperial College London United Kingdom United Kingdom Nobuko Yoshida Fangyi Zhou Imperial College London Imperial College London United Kingdom United Kingdom Abstract ACM Reference Format: Modern web programming involves coordinating interac- Anson Miu, Francisco Ferreira, Nobuko Yoshida, and Fangyi Zhou. tions between browser clients and a server. Typically, the 2021. Communication-Safe Web Programming in TypeScript with Routed Multiparty Session Types. In Proceedings of the 30th ACM interactions in web-based distributed systems are informally SIGPLAN International Conference on Compiler Construction (CC ’21), described, making it hard to ensure correctness, especially March 2–3, 2021, Virtual, USA. ACM, New York, NY, USA, 27 pages. communication safety, i.e. all endpoints progress without https://doi.org/10.1145/3446804.3446854 type errors or deadlocks, conforming to a specified protocol. We present STScript, a toolchain that generates TypeScript 1 Introduction APIs for communication-safe web development over Web- Web technology advancements have changed the way peo- Sockets, and RouST, a new session type theory that supports ple use computers. Many services that required standalone multiparty communications with routing mechanisms. applications, such as email, chat, video conferences, or even STScript provides developers with TypeScript APIs gen- games, are now provided in a browser. While the Hypertext erated from a communication protocol specification based Transfer Protocol (HTTP) is widely used for serving web on RouST. The generated APIs build upon TypeScript con- pages, its Request-Response model limits the communication currency practices, complement the event-driven style of patterns — the server may not send data to a client without programming in full-stack web development, and are com- the client first making a request.
    [Show full text]
  • Tom Sydney Kerckhove [email protected] Technical Leader, Engineering Manager, Speaker
    Tom Sydney Kerckhove [email protected] Technical Leader, Engineering Manager, Speaker https://cs-syd.eu Disclaimer is CV is designed to be read by recruiters, headhunters and non-technical parties. ere is also technical CV at https://cs-syd.eu/cv. Keywords and Technologies So ware, Development, Safety, Security, Back-end, Haskell, Reliability, Robustness AWS EC2, AWS S3, AWS SNS, Android, Arduino, Assembly, Azure, BLAS, Beamer, Bitbucket, C, C++, CSS, Cassius, Eifel, Emacs, FORTRAN, GPG, Git, Github, Gitlab, Go, HTML, Hadoop MapReduce, Hakyll, Hamlet, Haskell, Hledger, Hydra, Java, Javascript, Julius, Keycloak, Kubernetes, LAPACK, LaTeX, Lisp, Lua, Matlab, MySQL, Nginx, Nix, NixOps, NixOs, Octave, PHP, Pandoc, PostgreSQL, Prolog, Purescript, Python, ickCheck, ickSpec, R, Ruby, Rust, SBV, SQL, SQLite, Scala, Scikit-learn, Selenium, Servant, Shell, Spacemacs, Tamarin, Terraform, VB.Net, Vim, Yesod, Z3 Experience Technical Leader and Engineering Manager — FP Complete Remote, Zuerich, CH 2017-09 - present Founder and Consultant — CS Kerckhove Remote 2016-12 - present External examinator: OpenAPI and Stripe — HSR Rapperswil, CH 2020-02 - 2020-06 Technical Writer — Human Readable Magazine Remote 2019-12 - 2020-02 External examinator: Codepanorama — HSR Rapperswil, CH 2019-11 - 2020-01 Mentor — Google Summer of Code (volunteer) Remote, Zuerich, CH 2018-04 - 2018-08 Research Assistant; Functional Programming — ETH Zuerich Zuerich, CH 2017-06 - 2017-09 Teaching Assistant: Functional Programming — ETH Zuerich Zuerich, CH 2017-02 - 2017-04 So ware Engineering
    [Show full text]
  • Haskell-Like S-Expression-Based Language Designed for an IDE
    Department of Computing Imperial College London MEng Individual Project Haskell-Like S-Expression-Based Language Designed for an IDE Author: Supervisor: Michal Srb Prof. Susan Eisenbach June 2015 Abstract The state of the programmers’ toolbox is abysmal. Although substantial effort is put into the development of powerful integrated development environments (IDEs), their features often lack capabilities desired by programmers and target primarily classical object oriented languages. This report documents the results of designing a modern programming language with its IDE in mind. We introduce a new statically typed functional language with strong metaprogramming capabilities, targeting JavaScript, the most popular runtime of today; and its accompanying browser-based IDE. We demonstrate the advantages resulting from designing both the language and its IDE at the same time and evaluate the resulting environment by employing it to solve a variety of nontrivial programming tasks. Our results demonstrate that programmers can greatly benefit from the combined application of modern approaches to programming tools. I would like to express my sincere gratitude to Susan, Sophia and Tristan for their invaluable feedback on this project, my family, my parents Michal and Jana and my grandmothers Hana and Jaroslava for supporting me throughout my studies, and to all my friends, especially to Harry whom I met at the interview day and seem to not be able to get rid of ever since. ii Contents Abstract i Contents iii 1 Introduction 1 1.1 Objectives ........................................ 2 1.2 Challenges ........................................ 3 1.3 Contributions ...................................... 4 2 State of the Art 6 2.1 Languages ........................................ 6 2.1.1 Haskell ....................................
    [Show full text]
  • Top Functional Programming Languages Based on Sentiment Analysis 2021 11
    POWERED BY: TOP FUNCTIONAL PROGRAMMING LANGUAGES BASED ON SENTIMENT ANALYSIS 2021 Functional Programming helps companies build software that is scalable, and less prone to bugs, which means that software is more reliable and future-proof. It gives developers the opportunity to write code that is clean, elegant, and powerful. Functional Programming is used in demanding industries like eCommerce or streaming services in companies such as Zalando, Netflix, or Airbnb. Developers that work with Functional Programming languages are among the highest paid in the business. I personally fell in love with Functional Programming in Scala, and that’s why Scalac was born. I wanted to encourage both companies, and developers to expect more from their applications, and Scala was the perfect answer, especially for Big Data, Blockchain, and FinTech solutions. I’m glad that my marketing and tech team picked this topic, to prepare the report that is focused on sentiment - because that is what really drives people. All of us want to build effective applications that will help businesses succeed - but still... We want to have some fun along the way, and I believe that the Functional Programming paradigm gives developers exactly that - fun, and a chance to clearly express themselves solving complex challenges in an elegant code. LUKASZ KUCZERA, CEO AT SCALAC 01 Table of contents Introduction 03 What Is Functional Programming? 04 Big Data and the WHY behind the idea of functional programming. 04 Functional Programming Languages Ranking 05 Methodology 06 Brand24
    [Show full text]
  • Research Assistant Associate JD.Pdf
    Job Description Job Title: Research Assistant / Associate Department/Division/Faculty: Department of Computing, Faculty of Engineering Campus location: South Kensington Job Family/Level: Research, Research Assistant / Associate Responsible to: Professor Nobuko Yoshida Internal staff and students in the Department of Computing at Key Working Relationships Imperial college and in particular the Theory of Computational (internal): Systems Group based at the South Kensington Campus. Contract type: Full-time, Fixed-term appointment to start ASAP for 36 months Purpose of the Post The Research Assistant / Associate will work under the EPSRC funded projects, Turtles: Protocol-Based Foundations for Distributed Multiagent Systems, Border Patrol: Improving Smart Device Security through Type-Aware Systems Design, Stardust: Session Types for Reliable Distributed Systems and AppControl: Enforcing Application Behaviour through Type-Based Constraints, and POST: Protocols, Observabilities and Session Types. The projects have a particular emphasis on putting theory into practice, by embedding session types in a range of programming languages or applying them to realistic case studies. The purpose of the role of the Research Assistant / Associate is to be responsible for one/two of the following topics; • Verifying correctness of concurrent, parallel and distributed programming languages such as, e.g. Go, Rust, Scala, F#, F*, Java, Python, TypeScript, PureScript, Haskell, OCaml or MPI. • Extending the programming languages based on session types. • Investigating
    [Show full text]
  • A Formal Methodology for Deriving Purely Functional Programs from Z Specifications Via the Intermediate Specification Language Funz
    Louisiana State University LSU Digital Commons LSU Historical Dissertations and Theses Graduate School 1995 A Formal Methodology for Deriving Purely Functional Programs From Z Specifications via the Intermediate Specification Language FunZ. Linda Bostwick Sherrell Louisiana State University and Agricultural & Mechanical College Follow this and additional works at: https://digitalcommons.lsu.edu/gradschool_disstheses Recommended Citation Sherrell, Linda Bostwick, "A Formal Methodology for Deriving Purely Functional Programs From Z Specifications via the Intermediate Specification Language FunZ." (1995). LSU Historical Dissertations and Theses. 5981. https://digitalcommons.lsu.edu/gradschool_disstheses/5981 This Dissertation is brought to you for free and open access by the Graduate School at LSU Digital Commons. It has been accepted for inclusion in LSU Historical Dissertations and Theses by an authorized administrator of LSU Digital Commons. For more information, please contact [email protected]. INFORMATION TO USERS This manuscript has been reproduced from the microfilm master. UMI films the text directly from the original or copy submitted. Thus, some thesis and dissertation copies are in typewriter face, while others may be from any type of computer printer. H ie quality of this reproduction is dependent upon the quality of the copy submitted. Broken or indistinct print, colored or poor quality illustrations and photographs, print bleedthrough, substandardm argins, and improper alignment can adversely affect reproduction. In the unlikely, event that the author did not send UMI a complete manuscript and there are missing pages, these will be noted. Also, if unauthorized copyright material had to be removed, a note will indicate the deletion. Oversize materials (e.g., maps, drawings, charts) are reproduced by sectioning the original, beginning at the upper left-hand comer and continuing from left to right in equal sections with small overlaps.
    [Show full text]
  • The Logic of Demand in Haskell
    Under consideration for publication in J. Functional Programming 1 The Logic of Demand in Haskell WILLIAM L. HARRISON Department of Computer Science University of Missouri Columbia, Missouri RICHARD B. KIEBURTZ Pacific Software Research Center OGI School of Science & Engineering Oregon Health & Science University Abstract Haskell is a functional programming language whose evaluation is lazy by default. However, Haskell also provides pattern matching facilities which add a modicum of eagerness to its otherwise lazy default evaluation. This mixed or “non-strict” semantics can be quite difficult to reason with. This paper introduces a programming logic, P-logic, which neatly formalizes the mixed evaluation in Haskell pattern-matching as a logic, thereby simplifying the task of specifying and verifying Haskell programs. In P-logic, aspects of demand are reflected or represented within both the predicate language and its model theory, allowing for expressive and comprehensible program verification. 1 Introduction Although Haskell is known as a lazy functional language because of its default eval- uation strategy, it contains a number of language constructs that force exceptions to that strategy. Among these features are pattern-matching, data type strictness annotations and the seq primitive. The semantics of pattern-matching are further enriched by irrefutable pattern annotations, which may be embedded within pat- terns. The interaction between Haskell’s default lazy evaluation and its pattern- matching is surprisingly complicated. Although it offers the programmer a facility for fine control of demand (Harrison et al., 2002), it is perhaps the aspect of the Haskell language least well understood by its community of users. In this paper, we characterize the control of demand first in a denotational semantics and then in a verification logic called “P-logic”.
    [Show full text]