Scientific Programming: the Promises of Typed, Pure, and Lazy Functional Programming: Part II

Total Page:16

File Type:pdf, Size:1020Kb

Scientific Programming: the Promises of Typed, Pure, and Lazy Functional Programming: Part II Loyola University Chicago Loyola eCommons Computer Science: Faculty Publications and Other Works Faculty Publications 9-2009 Scientific Programming: The Promises of Typed, Pure, and Lazy Functional Programming: Part II Konstantin Läufer Loyola University Chicago, [email protected] George K. Thiruvathukal Loyola University Chicago, [email protected] Follow this and additional works at: https://ecommons.luc.edu/cs_facpubs Part of the Computer Sciences Commons Recommended Citation K. Laufer and G. K. Thiruvathukal, "Scientific Programming: The Promises of Typed, Pure, and Lazy Functional Programming: Part II," in Computing in Science & Engineering, vol. 11, no. 5, pp. 68-75, Sept.- Oct. 2009. doi: 10.1109/MCSE.2009.147 This Article is brought to you for free and open access by the Faculty Publications at Loyola eCommons. It has been accepted for inclusion in Computer Science: Faculty Publications and Other Works by an authorized administrator of Loyola eCommons. For more information, please contact [email protected]. This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License. Copyright © 2009 Konstantin Läufer and George K. Thiruvathuka S cieNTIFic P ROGRAMMING Editors: Konstantin Läufer, [email protected] Konrad Hinsen, [email protected] THE PROMISES OF TY P ED, PURE , AND LAZY FUNC T IONA L PROGRAMMING : PAR T II By Konstantin Läufer and George K. Thiruvathukal This second installment picks up where Konrad Hinsen’s article “The Promises of Functional Programming” from the July/August 2009 issue left off, covering static type inference and lazy evaluation in functional programming languages. n the first installment in this series first installment,1 we can create a list but we can’t prepend an element to an- on functional programming, Kon- from some elements and then prepend other element Irad Hinsen introduced the func- an element to that list: tional programming paradigm, which Integer i = new Integer(4); encourages recursion and higher-order user=> (cons 3 (list 4)) i.add(3); functional abstraction in algorithms. (3 4). In this second installment, we explore or several other aspects of the functional However, we can’t prepend an element paradigm. Using examples in the Clo- to another element List<Integer> l = new jure, Java, and Haskell languages, we Integer(4); discuss some of the benefits of static user=> (cons 3 4) l.add(3); typing with type inference and pure, java.lang. side-effect-free functional program- IllegalArgumentException: In the first case, the error message ming with lazy evaluation. In particu- Don’t know how to create ISeq is The method add(int) is un- lar, we argue that these features make from: Integer defined for the type Integer, Haskell a compelling choice for gen- while in the second case, it’s Type eral software development. The scien- because the predefined cons function mismatch: cannot convert from tific computing community, however, requires its second argument to be of a Integer to List<Integer>. Java’s will likely require better numeric li- list type. Clojure’s type system de- type system detected these errors, brary support and efficient functional tected the attempt to invoke the func- reported them while we were edit- versions of scientific algorithms before tion on an argument of the wrong type, ing or compiling the program con- accepting Haskell more widely. reported a type error, and stopped pro- taining this code, and refused to let gram execution. Clojure uses dynamic us run it. Java uses static typing: type Dynamic and Static Typing typing: type errors don’t get detected errors are detected at compile time Type systems in programming lan- until the program executes. Other lan- and programs with type errors won’t guages ensure that we correctly use guages with dynamic typing include even compile. Other languages that every program element according to its Groovy, JavaScript, Lisp, Objective- use static typing include Ada, C, C++, type—that is, according to the abstrac- C, Perl, Python, Ruby, Scheme, and C#, Fortran, Haskell, Java, ML, Pas- tion the program element represents. Smalltalk. cal, and Scala. Among those, the ones Typically, numeric values participate Now, let’s look at the behavior of that also support higher-order fea- in arithmetic operations and compari- Java’s type system. We can create a list tures such as first-class functions (C#, sons, lists participate in element access from some elements and then prepend Haskell, ML, and Scala) or first-class and concatenation, and so on. an element to that list objects (Ada, C#, Java, and Scala) are First, let’s look at type system be- called higher-order typed, or HOT. havior in Clojure, a modern LISP List<Integer> l = Arrays. Assuming a sound type system, dialect that runs on the Java Virtual asList(4); static typing represents a conservative Machine. As Hinsen showed in the l.add(3); approach: a program will be allowed to 68 Copublished by the IEEE CS and the AIP 1521-9615/09/$26.00 © 2009 IEEE COMPUTING IN SC IEN C E & ENGINEERING ON TYPECAS T ING AND In this example, we mix strings and real URL objects CO NVERSI O NS within the same collection. We then iterate through the collection and do something with the strings. We use the ven in typed languages such as C++, C#, and Java, we instanceof operator to determine which objects are Emust sometimes convert a numeric value from one strings, cast them from type Object to the more specific type to another. When going from 16-bit integer to a type String, and do something string-specific, such as 32-bit integer, for example, there’s no loss of information, creating a URL from it. If we hadn’t used the instanceof and it’s safe to just let the conversion happen implicitly. In operator, the cast would have failed as soon as the iteration the other direction, however, part of the original number reached the URL instance. might get lost and conversion should happen only if the Casts from a more general to a more specific type can programmer takes responsibility. The programmer takes fail at runtime—as, for example, when an object isn’t of this responsibility using a typecast—or simply, cast— the expected specific type or a more specific type.T here- construct. In the following Java snippet, for example, the fore, we note that only programs without casts are guaran- last line would cause a compile-time error without the cast: teed to be free of type errors at runtime. By contrast, casts in the opposite direction (from a specific to a more general int i = 25; class) can never fail, so they don’t need a runtime check. float x = i; Finally, casts between unrelated classes, such as String int k = (int) f; to Integer, can never succeed, so they always cause a compile-time type error. In contrast, Haskell provides such conversions using ex- Casting versus conversion functions was a huge sub- plicit conversion functions. In the equivalent situation, for ject of debate in the C++ community back when cycles example, we could choose from among ceiling, floor, were precious and any stealth data “transformation” (no round, and truncate. matter how trivial) could incur a substantial performance There are similar situations where programmers think overhead. (This was due to the copy-construction cascad- they know far more about a certain object’s type than the ing effect, which is no longer an issue in most modern compiler could possibly know. Such a situation might arise object-oriented languages as they typically copy refer- with heterogeneous, predefined type collections, where ences instead of values.) Today, however, casting is often a programmers are unable to define a specific common ab- liability that actually causes runtime typing errors—even in straction after the fact (another would be to define wrap- programming languages with well-founded type systems pers with a common interface for the predefined types): like Java. Worse, it’s well known (especially among seasoned C/C++ programmers such as ourselves) that not all casts List<Object> links = should be allowed. For example, there is a natural promo- new ArrayList<Object>(); tion of short -> int -> long -> long long (in C) that links.add(“http://www.computer.org/cise”); is lossless; however, the reverse transformation is unnatu- links.add(new URL(“http://cise.aip.org/”)); ral, highly error-prone, and nonportable, especially in a //... heterogeneous computing world that still features 16-, 32-, for (final Object o : links) and 64-bit processors. Using conversion functions (instead if (o instanceof String) { of casts) lets you ensure that all meaningful conversions are String s = (String) o; performed correctly (forward and backward, by making all URL link = new URL(s); down conversions explicit and precise) with only a slight // do something with the link inconvenience to the programmer (and inlining can help } alleviate most performance issues). run only if we can guarantee that it’s checker would still reject the follow- That might seem a little restrictive; free of type errors. Thus, a program ing program, even though the errone- dynamically typed languages would that passes type checking is guaran- ous code would always be skipped: have no complaints about it. But sup- teed not to fail at runtime because of pose the conditional expression is type errors (with some restrictions, as if (3 > 4) { much more complex and evaluates to we discuss in the sidebar “On Type- List<Integer> l = new true on some rare occasions as part of casting and Conversions”). Because Integer(4); some mission-critical software—such conditions aren’t evaluated until run- l.add(3); as air-traffic control, Internet routers, time, for example, the static type } and ATM machines—where every SEPTEMBER /OC TOBER 2009 69 S cieNTIFic P ROGRAMMING single line of code, reachable or not, It’s important to distinguish this from Let’s see how this works out in must be checked before it’s embedded what happens in languages like Py- Haskell (using the Glasgow Haskell and deployed on a large scale.
Recommended publications
  • CSCI 2041: Lazy Evaluation
    CSCI 2041: Lazy Evaluation Chris Kauffman Last Updated: Wed Dec 5 12:32:32 CST 2018 1 Logistics Reading Lab13: Lazy/Streams I Module Lazy on lazy Covers basics of delayed evaluation computation I Module Stream on streams A5: Calculon Lambdas/Closures I Arithmetic language Briefly discuss these as they interpreter pertain Calculon I 2X credit for assignment I 5 Required Problems 100pts Goals I 5 Option Problems 50pts I Eager Evaluation I Milestone due Wed 12/5 I Lazy Evaluation I Final submit Tue 12/11 I Streams 2 Evaluation Strategies Eager Evaluation Lazy Evaluation I Most languages employ I An alternative is lazy eager evaluation evaluation I Execute instructions as I Execute instructions only as control reaches associated expression results are needed code (call by need) I Corresponds closely to I Higher-level idea with actual machine execution advantages and disadvantages I In pure computations, evaluation strategy doesn’t matter: will produce the same results I With side-effects, when code is run matter, particular for I/O which may see different printing orders 3 Exercise: Side-Effects and Evaluation Strategy Most common place to see differences between Eager/Lazy eval is when functions are called I Eager eval: eval argument expressions, call functions with results I Lazy eval: call function with un-evaluated expressions, eval as results are needed Consider the following expression let print_it expr = printf "Printing it\n"; printf "%d\n" expr; ;; print_it (begin printf "Evaluating\n"; 5; end);; Predict results and output for both Eager and Lazy Eval strategies 4 Answers: Side-Effects and Evaluation Strategy let print_it expr = printf "Printing it\n"; printf "%d\n" expr; ;; print_it (begin printf "Evaluating\n"; 5; end);; Evaluation > ocamlc eager_v_lazy.ml > ./a.out Eager Eval # ocaml’s default Evaluating Printing it 5 Lazy Eval Printing it Evaluating 5 5 OCaml and explicit lazy Computations I OCaml’s default model is eager evaluation BUT.
    [Show full text]
  • Functional Languages
    Functional Programming Languages (FPL) 1. Definitions................................................................... 2 2. Applications ................................................................ 2 3. Examples..................................................................... 3 4. FPL Characteristics:.................................................... 3 5. Lambda calculus (LC)................................................. 4 6. Functions in FPLs ....................................................... 7 7. Modern functional languages...................................... 9 8. Scheme overview...................................................... 11 8.1. Get your own Scheme from MIT...................... 11 8.2. General overview.............................................. 11 8.3. Data Typing ...................................................... 12 8.4. Comments ......................................................... 12 8.5. Recursion Instead of Iteration........................... 13 8.6. Evaluation ......................................................... 14 8.7. Storing and using Scheme code ........................ 14 8.8. Variables ........................................................... 15 8.9. Data types.......................................................... 16 8.10. Arithmetic functions ......................................... 17 8.11. Selection functions............................................ 18 8.12. Iteration............................................................. 23 8.13. Defining functions ...........................................
    [Show full text]
  • Integrating Stream Parallelism and Task Parallelism in a Dataflow Programming Model
    RICE UNIVERSITY Integrating Stream Parallelism and Task Parallelism in a Dataflow Programming Model by Drago¸sDumitru Sb^ırlea A Thesis Submitted in Partial Fulfillment of the Requirements for the Degree Master of Science Approved, Thesis Committee: Vivek Sarkar Professor of Computer Science E.D. Butcher Chair in Engineering Keith D. Cooper L. John and Ann H. Doerr Professor of Computational Engineering Lin Zhong Associate Professor of Electrical and Computer Engineering Jun Shirako Research Scientist Computer Science Department Houston, Texas September 3rd, 2011 ABSTRACT Integrating Stream Parallelism and Task Parallelism in a Dataflow Programming Model by Drago¸sDumitru Sb^ırlea As multicore computing becomes the norm, exploiting parallelism in applications becomes a requirement for all software. Many applications exhibit different kinds of parallelism, but most parallel programming languages are biased towards a specific paradigm, of which two common ones are task and streaming parallelism. This results in a dilemma for programmers who would prefer to use the same language to exploit different paradigms for different applications. Our thesis is an integration of stream- parallel and task-parallel paradigms can be achieved in a single language with high programmability and high resource efficiency, when a general dataflow programming model is used as the foundation. The dataflow model used in this thesis is Intel's Concurrent Collections (CnC). While CnC is general enough to express both task-parallel and stream-parallel paradigms, all current implementations of CnC use task-based runtime systems that do not de- liver the resource efficiency expected from stream-parallel programs. For streaming programs, this use of a task-based runtime system is wasteful of computing cycles and makes memory management more difficult than it needs to be.
    [Show full text]
  • The Machine That Builds Itself: How the Strengths of Lisp Family
    Khomtchouk et al. OPINION NOTE The Machine that Builds Itself: How the Strengths of Lisp Family Languages Facilitate Building Complex and Flexible Bioinformatic Models Bohdan B. Khomtchouk1*, Edmund Weitz2 and Claes Wahlestedt1 *Correspondence: [email protected] Abstract 1Center for Therapeutic Innovation and Department of We address the need for expanding the presence of the Lisp family of Psychiatry and Behavioral programming languages in bioinformatics and computational biology research. Sciences, University of Miami Languages of this family, like Common Lisp, Scheme, or Clojure, facilitate the Miller School of Medicine, 1120 NW 14th ST, Miami, FL, USA creation of powerful and flexible software models that are required for complex 33136 and rapidly evolving domains like biology. We will point out several important key Full list of author information is features that distinguish languages of the Lisp family from other programming available at the end of the article languages and we will explain how these features can aid researchers in becoming more productive and creating better code. We will also show how these features make these languages ideal tools for artificial intelligence and machine learning applications. We will specifically stress the advantages of domain-specific languages (DSL): languages which are specialized to a particular area and thus not only facilitate easier research problem formulation, but also aid in the establishment of standards and best programming practices as applied to the specific research field at hand. DSLs are particularly easy to build in Common Lisp, the most comprehensive Lisp dialect, which is commonly referred to as the “programmable programming language.” We are convinced that Lisp grants programmers unprecedented power to build increasingly sophisticated artificial intelligence systems that may ultimately transform machine learning and AI research in bioinformatics and computational biology.
    [Show full text]
  • Functional Programming Laboratory 1 Programming Paradigms
    Intro 1 Functional Programming Laboratory C. Beeri 1 Programming Paradigms A programming paradigm is an approach to programming: what is a program, how are programs designed and written, and how are the goals of programs achieved by their execution. A paradigm is an idea in pure form; it is realized in a language by a set of constructs and by methodologies for using them. Languages sometimes combine several paradigms. The notion of paradigm provides a useful guide to understanding programming languages. The imperative paradigm underlies languages such as Pascal and C. The object-oriented paradigm is embodied in Smalltalk, C++ and Java. These are probably the paradigms known to the students taking this lab. We introduce functional programming by comparing it to them. 1.1 Imperative and object-oriented programming Imperative programming is based on a simple construct: A cell is a container of data, whose contents can be changed. A cell is an abstraction of a memory location. It can store data, such as integers or real numbers, or addresses of other cells. The abstraction hides the size bounds that apply to real memory, as well as the physical address space details. The variables of Pascal and C denote cells. The programming construct that allows to change the contents of a cell is assignment. In the imperative paradigm a program has, at each point of its execution, a state represented by a collection of cells and their contents. This state changes as the program executes; assignment statements change the contents of cells, other statements create and destroy cells. Yet others, such as conditional and loop statements allow the programmer to direct the control flow of the program.
    [Show full text]
  • Functional and Imperative Object-Oriented Programming in Theory and Practice
    Uppsala universitet Inst. för informatik och media Functional and Imperative Object-Oriented Programming in Theory and Practice A Study of Online Discussions in the Programming Community Per Jernlund & Martin Stenberg Kurs: Examensarbete Nivå: C Termin: VT-19 Datum: 14-06-2019 Abstract Functional programming (FP) has progressively become more prevalent and techniques from the FP paradigm has been implemented in many different Imperative object-oriented programming (OOP) languages. However, there is no indication that OOP is going out of style. Nevertheless the increased popularity in FP has sparked new discussions across the Internet between the FP and OOP communities regarding a multitude of related aspects. These discussions could provide insights into the questions and challenges faced by programmers today. This thesis investigates these online discussions in a small and contemporary scale in order to identify the most discussed aspect of FP and OOP. Once identified the statements and claims made by various discussion participants were selected and compared to literature relating to the aspects and the theory behind the paradigms in order to determine whether there was any discrepancies between practitioners and theory. It was done in order to investigate whether the practitioners had different ideas in the form of best practices that could influence theories. The most discussed aspect within FP and OOP was immutability and state relating primarily to the aspects of concurrency and performance. ​ ​ ​ ​ ​ ​ This thesis presents a selection of representative quotes that illustrate the different points of view held by groups in the community and then addresses those claims by investigating what is said in literature.
    [Show full text]
  • Functional Javascript
    www.it-ebooks.info www.it-ebooks.info Functional JavaScript Michael Fogus www.it-ebooks.info Functional JavaScript by Michael Fogus Copyright © 2013 Michael Fogus. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://my.safaribooksonline.com). For more information, contact our corporate/ institutional sales department: 800-998-9938 or [email protected]. Editor: Mary Treseler Indexer: Judith McConville Production Editor: Melanie Yarbrough Cover Designer: Karen Montgomery Copyeditor: Jasmine Kwityn Interior Designer: David Futato Proofreader: Jilly Gagnon Illustrator: Robert Romano May 2013: First Edition Revision History for the First Edition: 2013-05-24: First release See http://oreilly.com/catalog/errata.csp?isbn=9781449360726 for release details. Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’Reilly Media, Inc. Functional JavaScript, the image of an eider duck, and related trade dress are trademarks of O’Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc., was aware of a trade‐ mark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein.
    [Show full text]
  • Dataflow Programming Model for Reconfigurable Computing Laurent Gantel, Amel Khiar, Benoît Miramond, Mohamed El Amine Benkhelifa, Fabrice Lemonnier, Lounis Kessal
    Dataflow Programming Model For Reconfigurable Computing Laurent Gantel, Amel Khiar, Benoît Miramond, Mohamed El Amine Benkhelifa, Fabrice Lemonnier, Lounis Kessal To cite this version: Laurent Gantel, Amel Khiar, Benoît Miramond, Mohamed El Amine Benkhelifa, Fabrice Lemonnier, et al.. Dataflow Programming Model For Reconfigurable Computing. 6th International Workshop on Reconfigurable Communication-centric Systems-on-Chip (ReCoSoC), Jun 2011, Montpellier, France. pp.1-8, 10.1109/ReCoSoC.2011.5981505. hal-00623674 HAL Id: hal-00623674 https://hal.archives-ouvertes.fr/hal-00623674 Submitted on 14 Sep 2011 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. Dataflow Programming Model For Reconfigurable Computing L. Gantel∗† and A. Khiar∗ and B. Miramond∗ and A. Benkhelifa∗ and F. Lemonnier† and L. Kessal∗ ∗ ETIS Laboratory – UMR CNRS 8051 † Embedded System Lab Universityof Cergy-Pontoise/ ENSEA Thales Research and Technology 6,avenueduPonceau 1,avenueAugustinFresnel 95014 Cergy-Pontoise, FRANCE 91767 Palaiseau, FRANCE Email {firstname.name}@ensea.fr Email {firstname.name}@thalesgroup.com Abstract—This paper addresses the problem of image process- system, such as sockets. ing algorithms implementation onto dynamically and reconfig- It reduces significantly the work of application programmers urable architectures. Today, these Systems-on-Chip (SoC), offer by relieving them of tedious and error-prone programming.
    [Show full text]
  • Machine Learning with Multiscale Dataflow Computing for High Energy Physics
    Machine Learning with Multiscale Dataflow Computing for High Energy Physics 10.7.2019 Outline • Dataflow Concept and Maxeler • Dataflow for ML and Use Cases • Dataflow Programming Introduction • Hands-on Example 2 Dataflow Concept and Maxeler 10.7.2019 Programmable Spectrum Control-flow processors Dataflow processor GK110 Single-Core CPU Multi-Core Several-Cores Many-Cores Dataflow Increasing Parallelism (#cores) Increasing Core Complexity ( Hardware Clock Frequency ) GPU (NVIDIA, AMD) Intel, AMD Tilera, XMOS etc... Maxeler Hybrid e.g. AMD Fusion, IBM Cell 4 Maxeler Dataflow Engines (DFEs) • Largest Reconfigurable DataflowLMEM Engine (DFE) (Large Memory) Chip 4-96GB MaxRing • O(1k) multipliers High bandwidth memory link Interconnect • O(100k) logic cells Reconfigurable compute fabric • O(10MB) of on-chip SRAM MaxRing Dataflow cores & * links FMEM (fast • O(10GB) of on-card DRAM memory) • DFE-to-DFE interconnect Link to main data network * approaching 128GB on a ¾, single slot PCIe card 5 5 Maxeler Dataflow Engines (DFEs) CPU DFE (Dataflow Engine) 6 Control Flow versus Data Flow • Control Flow: • It is all about how instructions “move” • Data may move along with instructions (secondary issue) • Order of computation is the key • Data Flow: • It is about how data moves through a set of “instructions” in 2D space • Data moves will trigger control • Data availability, transformations and operation latencies are the key 7 Area Utilisation of Modern Chips AMD Bulldozer CPU Nvidia Tesla V100 GPU 8 DFE Area Utilisation 9 Dataflow Computing • A custom chip for a specific application • No instructions ➝ no instruction decode logic • No branches ➝ no branch prediction • Explicit parallelism ➝ no out-of-order scheduling • Data streamed onto-chip ➝ no multi-level caches Memory (Lots (Lots of) Rest of the My Dataflow world Engine 10 Dataflow Computing • Single worker builds a single • Each component is added to bicycle from a group of parts the bicycle in a production line.
    [Show full text]
  • Graceful Language Extensions and Interfaces
    Graceful Language Extensions and Interfaces by Michael Homer A thesis submitted to the Victoria University of Wellington in fulfilment of the requirements for the degree of Doctor of Philosophy Victoria University of Wellington 2014 Abstract Grace is a programming language under development aimed at ed- ucation. Grace is object-oriented, imperative, and block-structured, and intended for use in first- and second-year object-oriented programming courses. We present a number of language features we have designed for Grace and implemented in our self-hosted compiler. We describe the design of a pattern-matching system with object-oriented structure and minimal extension to the language. We give a design for an object-based module system, which we use to build dialects, a means of extending and restricting the language available to the programmer, and of implementing domain-specific languages. We show a visual programming interface that melds visual editing (à la Scratch) with textual editing, and that uses our dialect system, and we give the results of a user experiment we performed to evaluate the usability of our interface. ii ii Acknowledgments The author wishes to acknowledge: • James Noble and David Pearce, his supervisors; • Andrew P. Black and Kim B. Bruce, the other designers of Grace; • Timothy Jones, a coauthor on a paper forming part of this thesis and contributor to Minigrace; • Amy Ruskin, Richard Yannow, and Jameson McCowan, coauthors on other papers; • Daniel Gibbs, Jan Larres, Scott Weston, Bart Jacobs, Charlie Paucard, and Alex Sandilands, other contributors to Minigrace; • Gilad Bracha, Matthias Felleisen, and the other (anonymous) review- ers of papers forming part of this thesis; • the participants in his user study; • David Streader, John Grundy, and Laurence Tratt, examiners of the thesis; • and Alexandra Donnison, Amy Chard, Juanri Barnard, Roma Kla- paukh, and Timothy Jones, for providing feedback on drafts of this thesis.
    [Show full text]
  • Graceful Language Extensions and Interfaces
    Graceful Language Extensions and Interfaces by Michael Homer A thesis submitted to the Victoria University of Wellington in fulfilment of the requirements for the degree of Doctor of Philosophy Victoria University of Wellington 2014 Abstract Grace is a programming language under development aimed at ed- ucation. Grace is object-oriented, imperative, and block-structured, and intended for use in first- and second-year object-oriented programming courses. We present a number of language features we have designed for Grace and implemented in our self-hosted compiler. We describe the design of a pattern-matching system with object-oriented structure and minimal extension to the language. We give a design for an object-based module system, which we use to build dialects, a means of extending and restricting the language available to the programmer, and of implementing domain-specific languages. We show a visual programming interface that melds visual editing (à la Scratch) with textual editing, and that uses our dialect system, and we give the results of a user experiment we performed to evaluate the usability of our interface. ii ii Acknowledgments The author wishes to acknowledge: • James Noble and David Pearce, his supervisors; • Andrew P. Black and Kim B. Bruce, the other designers of Grace; • Timothy Jones, a coauthor on a paper forming part of this thesis and contributor to Minigrace; • Amy Ruskin, Richard Yannow, and Jameson McCowan, coauthors on other papers; • Daniel Gibbs, Jan Larres, Scott Weston, Bart Jacobs, Charlie Paucard, and Alex Sandilands, other contributors to Minigrace; • Gilad Bracha, Matthias Felleisen, and the other (anonymous) review- ers of papers forming part of this thesis; • the participants in his user study; • and Roma Klapaukh, Juanri Barnard, Alexandra Donnison, Amy Chard, and Timothy Jones for providing feedback on drafts of this thesis.
    [Show full text]
  • Proceedings of the 8Th European Lisp Symposium Goldsmiths, University of London, April 20-21, 2015 Julian Padget (Ed.) Sponsors
    Proceedings of the 8th European Lisp Symposium Goldsmiths, University of London, April 20-21, 2015 Julian Padget (ed.) Sponsors We gratefully acknowledge the support given to the 8th European Lisp Symposium by the following sponsors: WWWLISPWORKSCOM i Organization Programme Committee Julian Padget – University of Bath, UK (chair) Giuseppe Attardi — University of Pisa, Italy Sacha Chua — Toronto, Canada Stephen Eglen — University of Cambridge, UK Marc Feeley — University of Montreal, Canada Matthew Flatt — University of Utah, USA Rainer Joswig — Hamburg, Germany Nick Levine — RavenPack, Spain Henry Lieberman — MIT, USA Christian Queinnec — University Pierre et Marie Curie, Paris 6, France Robert Strandh — University of Bordeaux, France Edmund Weitz — University of Applied Sciences, Hamburg, Germany Local Organization Christophe Rhodes – Goldsmiths, University of London, UK (chair) Richard Lewis – Goldsmiths, University of London, UK Shivi Hotwani – Goldsmiths, University of London, UK Didier Verna – EPITA Research and Development Laboratory, France ii Contents Acknowledgments i Messages from the chairs v Invited contributions Quicklisp: On Beyond Beta 2 Zach Beane µKanren: Running the Little Things Backwards 3 Bodil Stokke Escaping the Heap 4 Ahmon Dancy Unwanted Memory Retention 5 Martin Cracauer Peer-reviewed papers Efficient Applicative Programming Environments for Computer Vision Applications 7 Benjamin Seppke and Leonie Dreschler-Fischer Keyboard? How quaint. Visual Dataflow Implemented in Lisp 15 Donald Fisk P2R: Implementation of
    [Show full text]