The Λ Abroad a Functional Approach to Software Components

Total Page:16

File Type:pdf, Size:1020Kb

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 ....................... 20 2.5 Procedure declarations .......................... 21 2.6 Mapping for types ............................ 22 2.7 Marshaling ................................ 25 2.8 Type declarations ............................. 28 2.9 The inverse mapping ........................... 32 2.10 Future work ................................ 33 2.11 Conclusions ................................ 33 3 COM components in Haskell 35 3.1 Introduction ................................ 35 3.2 Components ................................ 37 3.3 COM .................................... 37 3.3.1 Creating a COM component .................. 38 3.3.2 Interfaces ............................. 39 3.3.3 Getting other interfaces ..................... 40 3.3.4 Reference counting ........................ 40 3.3.5 Describing interfaces ....................... 41 3.3.6 Example in C++ and Haskell .................. 42 3.4 Polymorphism expresses inheritance .................. 44 3.5 Marshaling COM components to Haskell ................ 46 3.6 Encapsulating Haskell as a COM component ............. 49 3.6.1 The programmer's eye view ................... 49 3.6.2 The generated proxy module .................. 51 Contents v 3.6.3 The Com library .......................... 55 3.6.4 The IUnknown interface ..................... 55 3.7 Related work ............................... 56 3.8 Conclusions ................................ 57 4 Functional programming in an imperative world 59 4.1 Introduction ................................ 59 4.2 Running `hello world' .......................... 61 4.3 Abstraction ................................ 62 4.3.1 Extending the characters' repertoire .............. 62 4.4 Agent combinators ............................ 65 4.4.1 Bags ................................ 67 4.4.2 Unordered computations ..................... 68 4.4.3 Requests .............................. 69 4.4.4 A ¯rst implementation ...................... 71 4.4.5 Associativity ........................... 73 4.4.6 Commutativity .......................... 73 4.5 AgentScript ................................ 78 4.6 Summary ................................. 79 4.7 Appendix: animation implementation ................. 80 5 Database queries 83 5.1 Introduction ................................ 83 5.2 A crash course in relational algebra ................... 85 5.2.1 SQL ................................ 87 vi Contents 5.2.2 Connecting to the database ................... 87 5.2.3 Putting it all together ...................... 88 5.3 Query embedding ............................. 90 5.4 Formula embedding ........................... 91 5.4.1 Step 1: Abstract syntax ..................... 92 5.4.2 Step 2: Abstract Syntax embedding .............. 93 5.4.3 Step 3: Type embedding ..................... 94 5.5 Relational algebra ............................ 95 5.5.1 Functions ............................. 95 5.5.2 Relations ............................. 96 5.5.3 Relational expressions ...................... 97 5.5.4 Restriction ............................ 98 5.5.5 Union,Di®erence and Cartesian product ............ 99 5.6 Embedding queries ............................ 99 5.6.1 Step 1: Abstract syntax ..................... 99 5.6.2 Step 2: Abstract syntax embedding .............. 103 5.6.3 Step 3: Type embedding ..................... 110 5.7 Exam marks ................................ 117 5.7.1 Visual Basic ............................ 117 5.7.2 Haskell .............................. 118 5.8 Status and conclusions .......................... 120 6 The Lazy Virtual Machine 121 6.1 Introduction ................................ 121 Contents vii 6.2 An overview ................................ 123 6.3 The abstract machine .......................... 127 6.3.1 Basic instructions ........................ 128 6.3.2 Local de¯nitions ......................... 130 6.3.3 Sharing .............................. 131 6.3.4 Recursive values ......................... 132 6.3.5 Algebraic data types ....................... 132 6.3.6 Strict evaluation ......................... 133 6.3.7 Matching ............................. 134 6.3.8 Synchronous exceptions ..................... 135 6.3.9 Blackholing ............................ 136 6.3.10 Garbage collection ........................ 137 6.4 The LVM language ............................ 139 6.4.1 Translating ¸core to ¸lvm ..................... 142 6.5 Compilation scheme ........................... 144 6.5.1 Program .............................. 144 6.5.2 Expressions ............................ 145 6.5.3 Atomic expressions ........................ 145 6.5.4 Let expressions .......................... 147 6.5.5 Matching ............................. 148 6.5.6 Optimized schemes ........................ 148 6.5.7 Resolve stack o®sets ....................... 150 6.5.8 Rewrite rules ........................... 153 6.5.9 Code generation ......................... 155 viii Contents 6.5.10 More optimization: superfluous stack movements ....... 156 6.6 Assessment ................................ 160 Bibliography 163 Samenvatting 169 Dankwoord Ik herinner mij nog goed dat ik in het 3e jaar van mijn studie voor het eerst het boek van Richard Bird en Philip Wadler, \Introduction to Functional Program- ming", onder ogen kreeg. Functioneel programmeren, gebaseerd op de zogeheten ¸-calculus, bezat een zodanige elegantie en klaarheid, dat ik onmiddellijk besloot mijn afstudeer scriptie daar aan te wijden. Niet iedereen was daarover even en- thousiast { functionele talen zouden ine±cient zijn, en niet geschikt om \echte" programma's mee te maken. Wie had toen kunnen denken dat ik nu, 7 jaar later, mijn proefschrift volledig aan dat onderwerp zou wijden! Allereerst zou ik daarom mijn leraren van het eerste uur willen bedanken. John Mountjoy die mij heeft ingewijd in de schoonheid van de ¸-calculus en puur func- tioneel programmeren, en Marcel Beemster die mij hielp om af te kunnen studeren bij Simon Peyton Jones, een van de beste wetenschappers op het gebied van fun- tionele talen. Hoewel ik toen dacht naar Glasgow te gaan, bleek Simon op sabbatical te zijn en ging ik uiteindelijk naar het Oregon Graduate Institute of Science and Technology in de VS. Op het OGI, ontmoette ik ook Erik Meijer, en terug in Nederland kon ik bij hem mijn promotie onderzoek doen aan de Universiteit Utrecht. Ik had mij de eerste jaren geen betere begeleider kunnen wensen { ik ken weinig mensen die zo inspir- erend en motiverend kunnen zijn. Erik, bedankt voor al je inzichten die je met me deelde en je niet aflatende passie voor onderzoek, die mij ook vandaag de dag nog inspireert. Aan alle goede dingen komen een eind, en helaas verliet Erik na twee jaar de Uni- versiteit Utrecht om bij Microsoft nieuwe uitdagingen aan te gaan. Na zijn vertrek heb ik toch enige tijd moeite gehad om mijn eigen richting in het onderzoek te vinden en mijn onderzoeks resultaten te bundelen. Gelukkig heb ik toen veel steun gekregen van mijn promotor Doaitse Swierstra, die mij voortdurend motiveerde om ook de minder aangename kanten van het promoveren onder ogen te zien. Zonder zijn kritische discussies en het voortdurend lettten op kwaliteit had dit proefschrift er zeker anders uitgezien. Ook wil ik alle collegae van \software technologie" bedanken voor de goede sfeer x Dankwoord en samenwerking. In het bijzonder wil ik mijn lunchgenoten Martijn Schrage en Arjan van IJzendoorn bedanken voor hun vriendschap, wereldlijke discussies en voortdurende afleiding van mijn werk. Hoewel ze eigenlijk bij een andere club hoort, heeft mijn voormalige kamergenote Silja Renooij mij enorm geholpen bij alle praktische zaken die bij het proefschrift behoren. I would also like to thank Sigbjorn Finne and Mark Shields for being good friends and scienti¯c colleagues { with fond memories of skiijngMount Hood
Recommended publications
  • 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 © 2009­2020 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.
    [Show full text]
  • 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 .
    [Show full text]
  • 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
    [Show full text]
  • Rapid Prototyping for Virtual Environments
    Old Dominion University ODU Digital Commons Electrical & Computer Engineering Theses & Dissertations Electrical & Computer Engineering Winter 2008 Rapid Prototyping for Virtual Environments Emre Baydogan Old Dominion University Follow this and additional works at: https://digitalcommons.odu.edu/ece_etds Part of the Computer Sciences Commons, and the Electrical and Computer Engineering Commons Recommended Citation Baydogan, Emre. "Rapid Prototyping for Virtual Environments" (2008). Doctor of Philosophy (PhD), Dissertation, Electrical & Computer Engineering, Old Dominion University, DOI: 10.25777/pb9g-mv96 https://digitalcommons.odu.edu/ece_etds/45 This Dissertation is brought to you for free and open access by the Electrical & Computer Engineering at ODU Digital Commons. It has been accepted for inclusion in Electrical & Computer Engineering Theses & Dissertations by an authorized administrator of ODU Digital Commons. For more information, please contact [email protected]. RAPID PROTOTYPING FOR VIRTUAL ENVIRONMENTS by Emre Baydogan B.S. June 1999, Marmara University, Turkey M.S. June 2001, Marmara University, Turkey A Dissertation Submitted to the Faculty of Old Dominion University in Partial Fulfillment of the Requirement for the Degree of DOCTOR OF PHILOSOPHY ELECTRICAL AND COMPUTER ENGINEERING OLD DOMINION UNIVERSITY December 2008 Lee A. Belfore, H (Director) K. Vijayan Asari Jesmca R. Crouch ABSTRACT RAPID PROTOTYPING FOR VIRTUAL ENVIRONMENTS Emre Baydogan Old Dominion University, 2008 Director: Dr. Lee A. Belfore, II Development of Virtual Environment (VE) applications is challenging where appli­ cation developers are required to have expertise in the target VE technologies along with the problem domain expertise. New VE technologies impose a significant learn­ ing curve to even the most experienced VE developer. The proposed solution relies on synthesis to automate the migration of a VE application to a new unfamiliar VE platform/technology.
    [Show full text]
  • Seaver 2001 Catalog
    GENERAL INFORMATION 1 PEPPERDINE UNIVERSITY Seaver College Catalog, 2001-2002 For More Information Requests for further information should be addressed to: Of fice of Admission, Seaver College Pe p p e r dine University Malibu, California 90263-4392 Telephone (310) 506-4392 Facsimile (310) 506-4861 General Information (310) 506-4000 ww w. p e p p e rd i n e . e d u Pe p p e r dine University, Volume Sixty-Four, Number One, March, 2001. Published by Pepperdine University, 24255 Pacific Coast Highway, Malibu, CA 90263-4392. An official publication of Pepperdine University, located at 24255 Pacific Coast Highway, Malibu, California 90263-4392. epperdine is a Christian university Pcommitted to the highest standards of academic excellence and Christian values, where students are strengthened for lives of purpose, service, and leadership. 8 As a Christian university, Pepperdine affirms: That God is That God is revealed uniquely in Christ That the educational process may not, with impunity, be divorced from the divine process That the student, as a person of infinite dignity, is the heart of the educational enterprise That the quality of student life is a valid concern of the University That truth, having nothing to fear from investigation, should be pursued relentlessly in every discipline That spiritual commitment, tolerating no excuse for mediocrity, demands the highest standards of academic excellence That freedom, whether spiritual, intellectual, or economic, is indivisible That knowledge calls, ultimately, for a life of service CONTENTS 3 CO N T E N T S Seaver College Academic Calendar. .4 Pr esident’s Message .
    [Show full text]
  • The Spineless Tagless G-Machine Version
    Implementing lazy functional languages on sto ck hardware the Spineless Tagless Gmachine Version Simon L Peyton Jones Department of Computing Science University of Glasgow G QQ simonp jdcsglasgowacuk July Abstract The Spineless Tagless Gmachine is an abstract machine designed to supp ort non strict higherorder functional languages This presentation of the machine falls into three parts Firstly we give a general discussion of the design issues involved in implementing nonstrict functional languages Next we present the STG language an austere but recognisablyfunctional language which as well as a denotational meaning has a welldened operational semantics The STG language is the abstract machine co de for the Spineless Tagless Gmachine Lastly we discuss the mapping of the STG language onto sto ck hardware The success of an abstract machine mo del dep ends largely on how ecient this mapping can b e made though this topic is often relegated to a short section Instead we give a detailed discussion of the design issues and the choices we have made Our principal target is the C language treating the C compiler as a p ortable assembler This pap er is to app ear in the Journal of Functional Programming Changes in Version large new section on comparing the STG machine with other designs Section proling material Section index Changes in Version prop er statement of the initial state of the machine Sec tion reformulation of CAF up dates Section new format for state transition rules separating the guards which govern the applicability of
    [Show full text]
  • 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.
    [Show full text]
  • 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
    [Show full text]
  • Writing Cybersecurity Job Descriptions for the Greatest Impact
    Writing Cybersecurity Job Descriptions for the Greatest Impact Keith T. Hall U.S. Department of Homeland Security Welcome Writing Cybersecurity Job Descriptions for the Greatest Impact Disclaimers and Caveats • Content Not Officially Adopted. The content of this briefing is mine personally and does not reflect any position or policy of the United States Government (USG) or of the Department of Homeland Security. • Note on Terminology. Will use USG terminology in this brief (but generally translatable towards Private Sector equivalents) • Job Description Usage. For the purposes of this presentation only, the Job Description for the Position Description (PD) is used synonymously with the Job Opportunity Announcement (JOA). Although there are potential differences, it is not material to the concepts presented today. 3 Key Definitions and Concepts (1 of 2) • What do you want the person to do? • Major Duties and Responsibilities. “A statement of the important, regular, and recurring duties and responsibilities assigned to the position” SOURCE: https://www.opm.gov/policy-data- oversight/classification-qualifications/classifying-general-schedule-positions/classifierhandbook.pdf • Major vs. Minor Duties. “Major duties are those that represent the primary reason for the position's existence, and which govern the qualification requirements. Typically, they occupy most of the employee's time. Minor duties generally occupy a small portion of time, are not the primary purpose for which the position was established, and do not determine qualification requirements” SOURCE: https://www.opm.gov/policy-data- oversight/classification-qualifications/classifying-general-schedule-positions/positionclassificationintro.pdf • Tasks. “Activities an employee performs on a regular basis in order to carry out the functions of the job.” SOURCE: https://www.opm.gov/policy-data-oversight/assessment-and-selection/job-analysis/job_analysis_presentation.pdf 4 Key Definitions and Concepts (2 of 2) • What do you want to see on resumes that qualifies them to do this work? • Competency.
    [Show full text]
  • Co-Development, Delivery and Structural Analysis of a Computer Game Course
    Otto-von-Guericke-University Magdeburg University of Otago, Dunedin Department of Computer Science Research Report Co-Development, Delivery and Structural Analysis of a Computer Game Course Lennart Nacke Supervisors: Professor Dr Maic Masuch (Otto-von-Guericke-University Magdeburg), Mr Simon McCallum (University of Otago) Nacke, Lennart: Co-Development, Delivery and Structural Analysis of a Computer Game Course Research Report, Otto-von-Guericke-University Magdeburg, June 2004. i Internship Task Computer game design is still a young, growing subject in computer science education. Due to the industry’s need for qualified personnel, who appreciate the complexities of computer game design, many new academic courses are being created. As computer game design is a new topic there is still much research required into ped- agogy and delivery. The focus of this internship is to assist in the development and delivery of an undergraduate course on computer game design. There are three phases to this internship: 1. Development This includes the research on suitable game engines, taking into account the limited budget available for the course. It also includes • the analysis of proposed lecture topics corresponding to the IGDA Curriculum Framework [IGD03] • research and study on software engineering topics, such as version control A systems like CVS and documentation with LTEX 2. Delivery Including assistance in lectures for the course as well as tutoring. To further help the students we also include: • an introduction to interactive fiction using the Inform environment and con- struction of the first assignment • the creation and maintenance of an interactive website accompanying the course, which includes a student feedback system, a forum and a maintenance system for lecture topics and textbook errata 3.
    [Show full text]
  • Deltek Costpoint MES 2.0 LA Browser Installation Guide
    Deltek Costpoint® Manufacturing Execution 2.0 Browser Installation Guide December 15, 2017 While Deltek has attempted to verify that the information in this document is accurate and complete, some typographical or technical errors may exist. The recipient of this document is solely responsible for all decisions relating to or use of the information provided herein. The information contained in this publication is effective as of the publication date below and is subject to change without notice. This publication contains proprietary information that is protected by copyright. All rights are reserved. No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, or translated into another language, without the prior written consent of Deltek, Inc. This edition published December 2017. © Deltek, Inc. Deltek’s software is also protected by copyright law and constitutes valuable confidential and proprietary information of Deltek, Inc. and its licensors. The Deltek software, and all related documentation, is provided for use only in accordance with the terms of the license agreement. Unauthorized reproduction or distribution of the program or any portion thereof could result in severe civil or criminal penalties. All trademarks are the property of their respective owners. Browser Installation Guide ii Contents About this Manual ............................................................................................................................ 1 Scope .........................................................................................................................................
    [Show full text]
  • Hardware Synthesis from a Recursive Functional Language
    Hardware Synthesis from a Recursive Functional Language Kuangya Zhai Richard Townsend Lianne Lairmore Martha A. Kim Stephen A. Edwards Columbia University, Department of Computer Science Technical Report CUCS-007-15 April 1, 2015 ABSTRACT to SystemVerilog. We use a single functional intermedi- Abstraction in hardware description languages stalled at the ate representation based on the Glasgow Haskell Compiler's register-transfer level decades ago, yet few alternatives have Core [23], allowing us to use Haskell and GHC as a source had much success, in part because they provide only mod- language. Reynolds [24] pioneered the methodology of trans- est gains in expressivity. We propose to make a much larger forming programs into successively restricted subsets, which jump: a compiler that synthesizes hardware from behav- inspired our compiler and many others [2, 15, 23]. ioral functional specifications. Our compiler translates gen- Figure 1 depicts our compiler's framework as a series of eral Haskell programs into a restricted intermediate repre- transformations yielding a hardware description. One pass sentation before applying a series of semantics-preserving eliminates polymorphism by making specialized copies of transformations, concluding with a simple syntax-directed types and functions. To implement recursion, our compiler translation to SystemVerilog. Here, we present the overall gives groups of recursive functions a stack and converts them framework for this compiler, focusing on the IRs involved into tail form. These functions are then scheduled over time and our method for translating general recursive functions by rewriting them to operate on infinite streams that model into equivalent hardware. We conclude with experimental discrete clock cycles.
    [Show full text]