The Intel Labs Haskell Research Compiler
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
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. -
Dynamic Extension of Typed Functional Languages
Dynamic Extension of Typed Functional Languages Don Stewart PhD Dissertation School of Computer Science and Engineering University of New South Wales 2010 Supervisor: Assoc. Prof. Manuel M. T. Chakravarty Co-supervisor: Dr. Gabriele Keller Abstract We present a solution to the problem of dynamic extension in statically typed functional languages with type erasure. The presented solution re- tains the benefits of static checking, including type safety, aggressive op- timizations, and native code compilation of components, while allowing extensibility of programs at runtime. Our approach is based on a framework for dynamic extension in a stat- ically typed setting, combining dynamic linking, runtime type checking, first class modules and code hot swapping. We show that this framework is sufficient to allow a broad class of dynamic extension capabilities in any statically typed functional language with type erasure semantics. Uniquely, we employ the full compile-time type system to perform run- time type checking of dynamic components, and emphasize the use of na- tive code extension to ensure that the performance benefits of static typing are retained in a dynamic environment. We also develop the concept of fully dynamic software architectures, where the static core is minimal and all code is hot swappable. Benefits of the approach include hot swappable code and sophisticated application extension via embedded domain specific languages. We instantiate the concepts of the framework via a full implementation in the Haskell programming language: providing rich mechanisms for dy- namic linking, loading, hot swapping, and runtime type checking in Haskell for the first time. We demonstrate the feasibility of this architecture through a number of novel applications: an extensible text editor; a plugin-based network chat bot; a simulator for polymer chemistry; and xmonad, an ex- tensible window manager. -
What I Wish I Knew When Learning Haskell
What I Wish I Knew When Learning Haskell Stephen Diehl 2 Version This is the fifth major draft of this document since 2009. All versions of this text are freely available onmywebsite: 1. HTML Version http://dev.stephendiehl.com/hask/index.html 2. PDF Version http://dev.stephendiehl.com/hask/tutorial.pdf 3. EPUB Version http://dev.stephendiehl.com/hask/tutorial.epub 4. Kindle Version http://dev.stephendiehl.com/hask/tutorial.mobi Pull requests are always accepted for fixes and additional content. The only way this document will stayupto date and accurate through the kindness of readers like you and community patches and pull requests on Github. https://github.com/sdiehl/wiwinwlh Publish Date: March 3, 2020 Git Commit: 77482103ff953a8f189a050c4271919846a56612 Author This text is authored by Stephen Diehl. 1. Web: www.stephendiehl.com 2. Twitter: https://twitter.com/smdiehl 3. Github: https://github.com/sdiehl Special thanks to Erik Aker for copyediting assistance. Copyright © 20092020 Stephen Diehl This code included in the text is dedicated to the public domain. You can copy, modify, distribute and perform thecode, even for commercial purposes, all without asking permission. You may distribute this text in its full form freely, but may not reauthor or sublicense this work. Any reproductions of major portions of the text must include attribution. The software is provided ”as is”, without warranty of any kind, express or implied, including But not limitedtothe warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authorsor copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, Arising from, out of or in connection with the software or the use or other dealings in the software. -
Commonspad Ocaml Library Programmer’S Manual
Commonspad OCaml Library Programmer’s manual Yoann Padioleau [email protected] December 29, 2009 Copyright c 2009 Yoann Padioleau. Permission is granted to copy, distribute and/or modify this doc- ument under the terms of the GNU Free Documentation License, Version 1.3. 1 Short Contents 1 Introduction 4 I Common 7 2 Overview 8 3 Basic 14 4 Basic types 31 5 Collection 46 6 Misc 61 II OCommon 66 7 Overview 67 8 Ocollection 68 9 Oset 71 10 Oassoc 73 11 Osequence 74 12 Oarray 75 13 Ograph 77 14 Odb 81 2 III Extra Common 82 15 Interface 84 16 Concurrency 89 17 Distribution 90 18 Graphic 91 19 OpenGL 92 20 GUI 93 21 ParserCombinators 94 22 Backtrace 100 23 Glimpse 101 24 Regexp 103 25 Sexp and binio 104 26 Python 105 Conclusion 106 A Indexes 107 B References 108 3 Contents 1 Introduction 4 1.1 Features . 4 1.2 Copyright . 5 1.3 Source organization . 6 1.4 API organization . 6 1.5 Acknowledgements . 6 I Common 7 2 Overview 8 3 Basic 14 3.1 Pervasive types and operators . 14 3.2 Debugging, logging . 15 3.3 Profiling . 17 3.4 Testing . 18 3.5 Persitence . 20 3.6 Counter . 21 3.7 Stringof . 21 3.8 Macro . 22 3.9 Composition and control . 22 3.10 Concurrency . 24 3.11 Error management . 24 3.12 Environment . 25 3.13 Arguments . 28 3.14 Equality . 29 4 Basic types 31 4.1 Bool . 31 4.2 Char . 31 4.3 Num . -
The Glasgow Haskell Compiler User's Guide, Version 4.08
The Glasgow Haskell Compiler User's Guide, Version 4.08 The GHC Team The Glasgow Haskell Compiler User's Guide, Version 4.08 by The GHC Team Table of Contents The Glasgow Haskell Compiler License ........................................................................................... 9 1. Introduction to GHC ....................................................................................................................10 1.1. The (batch) compilation system components.....................................................................10 1.2. What really happens when I “compile” a Haskell program? .............................................11 1.3. Meta-information: Web sites, mailing lists, etc. ................................................................11 1.4. GHC version numbering policy .........................................................................................12 1.5. Release notes for version 4.08 (July 2000) ........................................................................13 1.5.1. User-visible compiler changes...............................................................................13 1.5.2. User-visible library changes ..................................................................................14 1.5.3. Internal changes.....................................................................................................14 2. Installing from binary distributions............................................................................................16 2.1. Installing on Unix-a-likes...................................................................................................16 -
The Glorious Glasgow Haskell Compilation System User's Guide
The Glorious Glasgow Haskell Compilation System User’s Guide, Version 7.8.2 i The Glorious Glasgow Haskell Compilation System User’s Guide, Version 7.8.2 The Glorious Glasgow Haskell Compilation System User’s Guide, Version 7.8.2 ii COLLABORATORS TITLE : The Glorious Glasgow Haskell Compilation System User’s Guide, Version 7.8.2 ACTION NAME DATE SIGNATURE WRITTEN BY The GHC Team April 11, 2014 REVISION HISTORY NUMBER DATE DESCRIPTION NAME The Glorious Glasgow Haskell Compilation System User’s Guide, Version 7.8.2 iii Contents 1 Introduction to GHC 1 1.1 Obtaining GHC . .1 1.2 Meta-information: Web sites, mailing lists, etc. .1 1.3 Reporting bugs in GHC . .2 1.4 GHC version numbering policy . .2 1.5 Release notes for version 7.8.1 . .3 1.5.1 Highlights . .3 1.5.2 Full details . .5 1.5.2.1 Language . .5 1.5.2.2 Compiler . .5 1.5.2.3 GHCi . .6 1.5.2.4 Template Haskell . .6 1.5.2.5 Runtime system . .6 1.5.2.6 Build system . .6 1.5.3 Libraries . .6 1.5.3.1 array . .6 1.5.3.2 base . .7 1.5.3.3 bin-package-db . .7 1.5.3.4 binary . .7 1.5.3.5 bytestring . .7 1.5.3.6 Cabal . .8 1.5.3.7 containers . .8 1.5.3.8 deepseq . .8 1.5.3.9 directory . .8 1.5.3.10 filepath . .8 1.5.3.11 ghc-prim . .8 1.5.3.12 haskell98 . -
Freebsd Foundation February 2018 Update
FreeBSD Foundation February 2018 Update Upcoming Events Message from the Executive Director Dear FreeBSD Community Member, AsiaBSDCon 2018 Welcome to our February Newsletter! In this newsletter you’ll read about FreeBSD Developers Summit conferences we participated in to promote and teach about FreeBSD, March 8-9, 2018 software development projects we are working on, why we need Tokyo, Japan funding, upcoming events, a release engineering update, and more. AsiaBSDCon 2018 Enjoy! March 8-11, 2018 Tokyo, Japan Deb SCALE 16x March 8-11, 2018 Pasadena, CA February 2018 Development Projects FOSSASIA 2018 March 22-25, 2018 Update: The Modern FreeBSD Tool Chain: Singapore, Singapore LLVM's LLD Linker As with other BSD distributions, FreeBSD has a base system that FreeBSD Journal is developed, tested and released by a single team. Included in the base system is the tool chain, the set of programs used to build, debug and test software. FreeBSD has relied on the GNU tool chain suite for most of its history. This includes the GNU Compiler Collection (GCC) compiler, and GNU binutils which include the GNU "bfd" linker. These tools served the FreeBSD project well from 1993 until 2007, when the GNU project migrated to releasing its software under the General Public License, version 3 (GPLv3). A number of FreeBSD developers and users objected to new restrictions included in GPLv3, and the GNU tool chain became increasingly outdated. The January/February issue of the FreeBSD Journal is now available. Don't miss articles on The FreeBSD project migrated to Clang/LLVM for the compiler in Tracing ifconfig Commands, Storage FreeBSD 10, and most of GNU binutils were replaced with the ELF Tool Multipathing, and more. -
Hassling with the IDE - for Haskell
Hassling with the IDE - for Haskell This guide is for students that are new to the Haskell language and are in need for a proper Integrated Development Environment (IDE) to work on the projects of the course. This guide is intended for Windows users. It may work similarly on Linux and iOS. For more information, see: - https://www.haskell.org/platform/mac.html for iOS - https://www.haskell.org/downloads/linux/ for Linux For any errors, please contact me at [email protected]. Changelog 04/09/2019 Initial version 24/08/2020 Updated contents for the year 2020 / 2021, thanks to Bernadet for pointing it out 1. Installing Visual Studio Code Visual Studio Code (VSC) is a lightweight, but rather extensive, code editor. We’ll talk about its features throughout this guide. You can download VSC at: https://code.visualstudio.com/download Once installed, take note of the sidebar on the left. From top to bottom, it contains: - Explorer (Ctrl + Shift + E) - Search (Ctrl + Shift + F) - Source control (Ctrl + Shift + G) - Debug (Ctrl + Shift + D) - Extensions (Ctrl + Shift + X) The bold options are important to remember. They will be mentioned throughout this document. 2. Installing GHC (and stack / cabal) on Windows Download the Glasgow Haskell Compiler (GHC). This compiler is used throughout this course and any other course that uses Haskell. You can find its download instructions at: https://www.haskell.org/platform/windows.html The download link recommends you to use Chocolatey. Chocolatey is an open source project that provides developers and admins alike a better way to manage Windows software. -
Haskell Quick Syntax Reference
Haskell Quick Syntax Reference A Pocket Guide to the Language, APIs, and Library — Stefania Loredana Nita Marius Mihailescu www.allitebooks.com Haskell Quick Syntax Reference A Pocket Guide to the Language, APIs, and Library Stefania Loredana Nita Marius Mihailescu www.allitebooks.com Haskell Quick Syntax Reference: A Pocket Guide to the Language, APIs, and Library Stefania Loredana Nita Marius Mihailescu Bucharest, Romania Bucharest, Romania ISBN-13 (pbk): 978-1-4842-4506-4 ISBN-13 (electronic): 978-1-4842-4507-1 https://doi.org/10.1007/978-1-4842-4507-1 Copyright © 2019 by Stefania Loredana Nita and Marius Mihailescu This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. -
Pcl: a Robust Monadic Parser Combinator Library for Ocaml
Motivation Basic Monadic Parser Combinators Writing pcl pcl: A Robust Monadic Parser Combinator Library for OCaml Chris Casinghino [email protected] OCaml Summer Project Meeting Chris Casinghino pcl: A Robust Monadic Parser Combinator Library for OCaml Motivation Basic Monadic Parser Combinators Writing pcl Outline 1 Motivation 2 Basic Monadic Parser Combinators What Is A Parser? Building Bigger Parsers 3 Writing pcl Chris Casinghino pcl: A Robust Monadic Parser Combinator Library for OCaml Motivation Basic Monadic Parser Combinators Writing pcl Outline 1 Motivation 2 Basic Monadic Parser Combinators What Is A Parser? Building Bigger Parsers 3 Writing pcl Chris Casinghino pcl: A Robust Monadic Parser Combinator Library for OCaml Motivation Basic Monadic Parser Combinators Writing pcl Benefits of Parser Combinators Parsers are specified directly in target language. No need to learn seperate grammar specification language. Parser may be modified on the fly, no seperate building process. Parsers are typechecked. Easy to extend set of available combinators. Lexer and parser may be written with the same tool. Chris Casinghino pcl: A Robust Monadic Parser Combinator Library for OCaml Motivation Basic Monadic Parser Combinators Writing pcl Parsec: Parser Combinators for Haskell Parsec is a popular monadic parser combinator library for Haskell. Parsec has been around for years, and is widely used. Large combinator library, including parsers for lexing, expressions, etc. Expressive error reporting, efficient. pcl is, in large part, a port of Parsec -
Installing Haskell
Installing Haskell 0.1 Learning programming Throughout this course you’ll be learning to program in Haskell. One way of learning a programming language is to start with formal syntax and semantics (although very few programming languages have formal semantics). This is very different from how most people learn languages, be it natural or computer languages. A child learns the meaning of words and sentences not by analyzing their structure and looking up the definitions in Wikipedia. In fact, a child’s understanding of language is very similar to how we work in category theory. We derive the meaning of objects from the network of interactions with other objects. This is easy in mathematics, where we can say that an object is defined by the totality of its interactions with possibly infinite set of other objects (we’ll see that when we talk about the Yoneda lemma). In real life we don’t have the time to explore the infinity, so we can only approximate this process. We do this by living on credit. This is how we are going to learn Haskell. We’ll be using things, from day one, without fully understanding their meaning, thus constantly incurring a conceptual debt. Some of this debt will be paid later. Some of it will stay with us forever. The alternative would be to first learn about cartesian closed categories and domain theory, formally define simply typed lambda calculus, build its categorical model, and only then wave our hands a bit and claim that at its core Haskell approximates this model. -
The Λ Abroad a Functional Approach to Software Components
The ¸ Abroad A Functional Approach To Software Components Een functionele benadering van software componenten (met een samenvatting in het Nederlands) Proefschrift ter verkrijging van de graad van doctor aan de Universiteit Utrecht op gezag van de Rector Magni¯cus, Prof. dr W.H. Gispen, ingevolge het besluit van het College voor Promoties in het openbaar te verdedigen op dinsdag 4 november 2003 des middags te 12.45 uur door Daniel Johannes Pieter Leijen geboren op 7 Juli 1973, te Alkmaar promotor: Prof. dr S.D. Swierstra, Universiteit Utrecht. co-promotor: dr H.J.M. Meijer, Microsoft Research. The work in this thesis has been carried out under the auspices of the research school IPA (Institute for Programming research and Algorithmics), and has been ¯nanced by Ordina. Printed by Febodruk 2003. Cover illustration shows the heavily cratered surface of the planet Mercury, photographed by the mariner 10. ISBN 90-9017528-8 Contents Dankwoord ix 1 Overview 1 2 H/Direct: a binary language interface for Haskell 5 2.1 Introduction ................................ 5 2.2 Background ................................ 6 2.2.1 Using the host or foreign language ............... 7 2.2.2 Using an IDL ........................... 8 2.2.3 Overview ............................. 9 2.3 The Foreign Function Interface ..................... 12 2.3.1 Foreign static import and export ................ 12 2.3.2 Variations on the theme ..................... 13 2.3.3 Stable pointers and foreign objects ............... 14 2.3.4 Dynamic import ......................... 15 2.3.5 Dynamic export ......................... 15 2.3.6 Implementing dynamic export .................. 18 2.3.7 Related work ........................... 19 iv Contents 2.4 Translating IDL to Haskell ......................