Generation-Friendly Eq Hash Tables

Total Page:16

File Type:pdf, Size:1020Kb

Generation-Friendly Eq Hash Tables Generation-Friendly Eq Hash Tables Abdulaziz Ghuloum and R. Kent Dybvig Department of Computer Science, Indiana University, Bloomington, IN 47408 {aghuloum,dyb}@cs.indiana.edu Abstract k, h(k) must be the same every time h(k) is computed. Efficient Eq hash tables, which support arbitrary objects as keys, distinguish hashing (i.e., O(1) cost for lookup and update operations) relies on keys via pointer comparison and often employ hash functions that the ability of the hashing function to produce uniformly distributed utilize the address of the object. When compacting garbage collec- values. tors move garbage collected objects, the addresses of such objects Hash tables can be characterized by the predicates used to dis- may change, thus invalidating the hash function computation. A tinguish keys. Eq hash tables, which support arbitrary objects as common solution is to rehash all of the entries in an eq hash ta- keys, distinguish keys via pointer comparison, e.g,. Scheme’s eq? ble on the first access to the table after a collection. For a simple predicate or C’s == operator. Because keys are distinguished by stop-and-copy garbage collector, which moves every element of a their address in memory, the most effective eq hash functions are hash table, the rehashing overhead is proportional to the amount based on those addresses, since the address of an object is different of work done by the collector and so the cost of rehashing adds from that of every other object and the addresses are already scat- only constant overhead. Generational copying collectors, however, tered in memory. Hash functions based on objects’ addresses are may move a few or none of the entries, so rehashing a large table also the most efficient, since no traversal of the objects’ sub-parts is may cost considerably more than the garbage collection run that required. Unfortunately, compacting garbage collectors, which are caused the rehash. In other words, such rehashing is not “genera- used by many implementations, can change the address of an object tion friendly.” at any time—in particular, between the time it is entered into an eq In this paper, we describe an efficient, generation-friendly hash table and the time it is retrieved. An attempted retrieval based mechanism for implementing eq hash tables. The amount of work on the new address is likely not to succeed. A common solution to required for rehashing is proportional to the work performed by the this problem is to rehash all of the entries in an eq hash tables on collector as only objects that actually move during a collection are the first access of the table since the last garbage collection run. For rehashed. The collector supports eq hash tables and their variants simple copying collectors, which touch every element of a table in via a simple new type of object, a transport link cell, the handling shifting it from old to new space, the rehashing overhead is pro- of which by the collector is nearly trivial. portional to the amount of work done by the collector and so adds only constant overhead. Generational copying collectors, however, Categories and Subject Descriptors D.3.3 [Programming Lan- may move none or only some of the entries. Rehashing a large table guages]: Language Constructs and Features—data structures; D.3.4 may cost considerably more than the cost of the garbage collection [Programming Languages]: Processors—memory management, run that caused the rehash. In other words, such rehashing is not runtime environments “generation friendly.” In this paper, we describe an efficient, generation-friendly General Terms Languages mechanism for implementing eq hash tables. The amount of work Keywords Scheme, hash tables, generational garbage collection, required for rehashing objects that move during garbage collection generation-friendliness is at most proportional to the work performed by the collector. Con- sequently, the cost of rehashing is O(1) amortized over the lifetime of the hash table. Furthermore, the mechanism adds no overhead 1. Introduction to programs that do not make use of hash tables. In addition, none A hash table (Dumey 1956; Knuth 1998; Cormen et al. 2001) of the common hash-table operations require synchronization with associates a set of keys with a corresponding set of values. A the collector, i.e., disabling the collector during the operation. The hash table employs a hashing function h that maps keys from the mechanism is also flexible in that it allows eq hash tables, and universe of possible keys to a limited range of integer values, which variants such as weak eq hash tables or hash tables based only are used as indices into the table. Proper hashing depends on the partly on object address, to be created by the user. The collector property that h is a function in the mathematical sense: for every supports eq hash tables and their variants via a simple new type of object, the transport link cell, which are inspired by transport guardians (Dybvig et al. 1993). Transport link cells are simple to implement efficiently within the collector and thus contribute al- most nothing to the complexity of the implementation or the cost of a collection run. The rest of this paper is organized as follows: Section 2 gives brief background information about hash tables and compacting generational garbage collection techniques. Section 3 describes three existing implementation techniques of hash table that are Proceedings of the 2007 Workshop on Scheme and Functional Programming found in practice and how each fails to meet our performance cri- Universite´ Laval Technical Report DIUL-RT-0701 teria. Section 4 presents a prototype solution of implementing eq Scheme and Functional Programming 2007 27 The set of required operations on hash tables varies among pro- descriptor buckets gramming languages and their implementations. At a minimum, a usage : int hash table implementation must supports the following operations: table : ptr length : int • (hash-table-put! ht k v): associates the value v with the key k in the hash table ht. • (hash-table-get ht k d): retrieves the value associated with the key k in the hash table ht. If k does not exist in the table, the default value d is returned. • (hash-table-delete ht k): removes any association of the key k in the hash table ht. chain link To find the value associated with a key in a hash table, the index key : ptr of the bucket containing the key is obtained by computing an index val : ptr idx = h(k) mod length(ht). The chain stored at that bucket idx next : ptr is then searched sequentially by comparing the key of each chain link to the key requested. Many programming languages (e.g., Common LISP (American National Standards Institute and Information Technology Industry Council 1996), Perl (Wall et al. 1996), Python (Rossum 1992), Figure 1. Chained Hash Tables: A hash table is represented as a Scheme (Sperber et al. 2007), etc.) require additional operations descriptor holding (a) a counter indicating the number of key/value on hash tables such as: pairs stored in the table, (b) a pointer to a vector of buckets, and (c) the number of buckets in the vector. A (possibly empty) linked list • (hash-table-member? ht k): returns a boolean value indi- of key/value pairs is stored in each bucket. cating whether the hash table ht contains a binding for the key k. • (hash-table-keys ht): returns the list of keys stored in the hash tables using transport guardians. Section 5 presents our final hash table. solution based on transport link cells and describes their implemen- • (hash-table-map ht p): applies the procedure p to every tation within the collector. Section 6 analyzes the performance of key/value pair in the hash table. our implementation. To illustrate the flexibility of our approach, Section 7 presents some possible user-space extensions to the ba- 2.2 Compacting garbage collectors sic hash-table mechanism that employ the same transport link cell Implementations of programming languages that support automatic mechanism. Finally, section 8 presents our conclusions and discus- memory management often use garbage collection to reclaim un- sions future research directions. used heap space (Wilson 1992). A large contiguous block of mem- ory is pre-allocated to serve as an allocation heap from which indi- vidual objects are allocated. Exhaustion of the allocation area trig- 2. Background gers the garbage collection routine which moves all live objects This section gives a brief overview of chained hash tables, gen- (e.g., objects that are reachable through the transitive closure of the erational garbage collection, and the problems associated with the program roots including the registers and the stack) to another area interaction of the two subsystems. Readers who are familiar with in memory, and thus freeing the old allocation area. these topics can skip this section without loss of continuity. Generational garbage collectors separate heap objects into gen- erations based on their age (Lieberman and Hewitt 1983; Sansom 2.1 Chained hash tables and Jones 1993; Appel 1989; Dybvig et al. 1994). Memory is di- vided into a (typically fixed) number of generations. Objects in A chained hash table (see figure 1) is a data structure with the younger generations are collected more frequently than those in following components: older generations. New objects are allocated sequentially into the youngest generation (a.k.a. the nursery). Once the nursery is ex- • Hash table descriptor: The descriptor contains information hausted, the garbage collector is invoked to clean up the nursery about the hash table such as the number of elements contained by moving the surviving young objects to the first generation.
Recommended publications
  • MELT a Translated Domain Specific Language Embedded in the GCC
    MELT a Translated Domain Specific Language Embedded in the GCC Compiler Basile STARYNKEVITCH CEA, LIST Software Safety Laboratory, boˆıte courrier 94, 91191 GIF/YVETTE CEDEX, France [email protected] [email protected] The GCC free compiler is a very large software, compiling source in several languages for many targets on various systems. It can be extended by plugins, which may take advantage of its power to provide extra specific functionality (warnings, optimizations, source refactoring or navigation) by processing various GCC internal representations (Gimple, Tree, ...). Writing plugins in C is a complex and time-consuming task, but customizing GCC by using an existing scripting language inside is impractical. We describe MELT, a specific Lisp-like DSL which fits well into existing GCC technology and offers high-level features (functional, object or reflexive programming, pattern matching). MELT is translated to C fitted for GCC internals and provides various features to facilitate this. This work shows that even huge, legacy, software can be a posteriori extended by specifically tailored and translated high-level DSLs. 1 Introduction GCC1 is an industrial-strength free compiler for many source languages (C, C++, Ada, Objective C, Fortran, Go, ...), targetting about 30 different machine architectures, and supported on many operating systems. Its source code size is huge (4.296MLOC2 for GCC 4.6.0), heterogenous, and still increasing by 6% annually 3. It has no single main architect and hundreds of (mostly full-time) contributors, who follow strict social rules 4. 1.1 The powerful GCC legacy The several GCC [8] front-ends (parsing C, C++, Go .
    [Show full text]
  • The Evolution of Lisp
    1 The Evolution of Lisp Guy L. Steele Jr. Richard P. Gabriel Thinking Machines Corporation Lucid, Inc. 245 First Street 707 Laurel Street Cambridge, Massachusetts 02142 Menlo Park, California 94025 Phone: (617) 234-2860 Phone: (415) 329-8400 FAX: (617) 243-4444 FAX: (415) 329-8480 E-mail: [email protected] E-mail: [email protected] Abstract Lisp is the world’s greatest programming language—or so its proponents think. The structure of Lisp makes it easy to extend the language or even to implement entirely new dialects without starting from scratch. Overall, the evolution of Lisp has been guided more by institutional rivalry, one-upsmanship, and the glee born of technical cleverness that is characteristic of the “hacker culture” than by sober assessments of technical requirements. Nevertheless this process has eventually produced both an industrial- strength programming language, messy but powerful, and a technically pure dialect, small but powerful, that is suitable for use by programming-language theoreticians. We pick up where McCarthy’s paper in the first HOPL conference left off. We trace the development chronologically from the era of the PDP-6, through the heyday of Interlisp and MacLisp, past the ascension and decline of special purpose Lisp machines, to the present era of standardization activities. We then examine the technical evolution of a few representative language features, including both some notable successes and some notable failures, that illuminate design issues that distinguish Lisp from other programming languages. We also discuss the use of Lisp as a laboratory for designing other programming languages. We conclude with some reflections on the forces that have driven the evolution of Lisp.
    [Show full text]
  • Latexsample-Thesis
    INTEGRAL ESTIMATION IN QUANTUM PHYSICS by Jane Doe A dissertation submitted to the faculty of The University of Utah in partial fulfillment of the requirements for the degree of Doctor of Philosophy Department of Mathematics The University of Utah May 2016 Copyright c Jane Doe 2016 All Rights Reserved The University of Utah Graduate School STATEMENT OF DISSERTATION APPROVAL The dissertation of Jane Doe has been approved by the following supervisory committee members: Cornelius L´anczos , Chair(s) 17 Feb 2016 Date Approved Hans Bethe , Member 17 Feb 2016 Date Approved Niels Bohr , Member 17 Feb 2016 Date Approved Max Born , Member 17 Feb 2016 Date Approved Paul A. M. Dirac , Member 17 Feb 2016 Date Approved by Petrus Marcus Aurelius Featherstone-Hough , Chair/Dean of the Department/College/School of Mathematics and by Alice B. Toklas , Dean of The Graduate School. ABSTRACT Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah.
    [Show full text]
  • Pipenightdreams Osgcal-Doc Mumudvb Mpg123-Alsa Tbb
    pipenightdreams osgcal-doc mumudvb mpg123-alsa tbb-examples libgammu4-dbg gcc-4.1-doc snort-rules-default davical cutmp3 libevolution5.0-cil aspell-am python-gobject-doc openoffice.org-l10n-mn libc6-xen xserver-xorg trophy-data t38modem pioneers-console libnb-platform10-java libgtkglext1-ruby libboost-wave1.39-dev drgenius bfbtester libchromexvmcpro1 isdnutils-xtools ubuntuone-client openoffice.org2-math openoffice.org-l10n-lt lsb-cxx-ia32 kdeartwork-emoticons-kde4 wmpuzzle trafshow python-plplot lx-gdb link-monitor-applet libscm-dev liblog-agent-logger-perl libccrtp-doc libclass-throwable-perl kde-i18n-csb jack-jconv hamradio-menus coinor-libvol-doc msx-emulator bitbake nabi language-pack-gnome-zh libpaperg popularity-contest xracer-tools xfont-nexus opendrim-lmp-baseserver libvorbisfile-ruby liblinebreak-doc libgfcui-2.0-0c2a-dbg libblacs-mpi-dev dict-freedict-spa-eng blender-ogrexml aspell-da x11-apps openoffice.org-l10n-lv openoffice.org-l10n-nl pnmtopng libodbcinstq1 libhsqldb-java-doc libmono-addins-gui0.2-cil sg3-utils linux-backports-modules-alsa-2.6.31-19-generic yorick-yeti-gsl python-pymssql plasma-widget-cpuload mcpp gpsim-lcd cl-csv libhtml-clean-perl asterisk-dbg apt-dater-dbg libgnome-mag1-dev language-pack-gnome-yo python-crypto svn-autoreleasedeb sugar-terminal-activity mii-diag maria-doc libplexus-component-api-java-doc libhugs-hgl-bundled libchipcard-libgwenhywfar47-plugins libghc6-random-dev freefem3d ezmlm cakephp-scripts aspell-ar ara-byte not+sparc openoffice.org-l10n-nn linux-backports-modules-karmic-generic-pae
    [Show full text]
  • Lisping Copyleft: a Close Reading of the Lisp LGPL 15
    Lisping Copyleft: A Close Reading of the Lisp LGPL 15 Lisping Copyleft: A Close Reading of the Lisp LGPL Eli Greenbaum a (a) Attorney, Yigal Arnon & Co. Jerusalem DOI: 10.5033/ifosslr.v5i1.75 Abstract: The idioms of both the General Public License (the “GPL”) and the Lesser General Public License (the “LGPL”) seem to be grounded in the C programming language. This article analyses the Lisp Lesser General Public License (colloquially and here referred to as the “LLGPL”), a specific attempt to apply the LGPL to a language with a programming paradigm and method of building and distributing programs that traditionally differs substantially from the approach of C. In addition, this article attempts to understand whether the LLGPL actually succeeds in its stated goal of translating the LGPL to the Lisp context or whether the LLGPL changes the requirements and philosophical moorings of the LGPL. Keywords: Law; information technology; Free and Open Source Software; copyleft, copyright; derivation; compilation; Lisp; LGPL; Introduction The idioms of both the General Public License (the “GPL”) and the Lesser General Public License 1 (the “LGPL”) seem to be grounded in the C programming language. The licenses refer to “compiling”, “linking” and “header files”, features of the C programming languages which may not be present in other languages that are not traditionally compiled. Similarly, the licenses do not expressly include provisions relating to features of object-oriented programming languages.2 Do the GNU licenses work as intended when applied in these other contexts? 3 This article analyses the Lisp 1 The LLGPL license is drafted as a preamble to version 2.1 of the LGPL.
    [Show full text]
  • Platform Freedom for a Graphical Lisp Application Through Armed Bear Common Lisp
    CARMA: Platform Freedom for a Graphical Lisp Application through Armed Bear Common Lisp John D. Hastings Alexandre V. Latchininsky Dept. of Computer Science Dept. of Renewable Resources University of Nebraska-Kearney University of Wyoming Kearney, NE, USA Laramie, WY, USA [email protected] [email protected] Abstract 1. Introduction CARMA is an advisory system that uses artificially- CARMA is an advisory system for grasshopper infesta- intelligent techniques including case-based reasoning tions that has been successfully used since 1996 (Hast- to provide advice about the most environmentally and ings, Branting, & Lockwood 2002). CARMA, short economically effective responses to grasshopper infes- for CAse-based Rangeland Management Advisor, em- tations. CARMA’s core AI reasoner was initially writ- ploys a variety of artificially-intelligent (AI) techniques ten in Common Lisp and integrated with an Allegro to provide advice about the most environmentally and Common Lisp for Windows graphical user interface economically effective responses to grasshopper infes- (GUI). CARMA went public in 1996 and has been tations. In the process, CARMA demonstrates an ap- used successfully since. Recently, CARMA’s architec- proach to providing advice concerning the behavior of ture was reworked in order to avoid periodic develop- a complex biological system by exploiting multiple, in- ment and deployment fees, and to produce a platform- dividually incomplete, knowledge sources (Hastings, independent system by following a philosophy called Branting, & Lockwood 1996) including utilization of a platform freedom which emphasizes freedom from technique known as approximate-model-based adapta- both platform dependence and software costs. The im- tion which integrates case-based reasoning with model- plementation also demonstrates an approach to creating based reasoning for the purposes of prediction within a Lisp application with an appealing GUI which is web complex physical systems.
    [Show full text]
  • Integral Estimation in Quantum Physics
    INTEGRAL ESTIMATION IN QUANTUM PHYSICS by Jane Doe A dissertation submitted to the faculty of The University of Utah in partial fulfillment of the requirements for the degree of Doctor of Philosophy in Mathematical Physics Department of Mathematics The University of Utah May 2016 Copyright c Jane Doe 2016 All Rights Reserved The University of Utah Graduate School STATEMENT OF DISSERTATION APPROVAL The dissertation of Jane Doe has been approved by the following supervisory committee members: Cornelius L´anczos , Chair(s) 17 Feb 2016 Date Approved Hans Bethe , Member 17 Feb 2016 Date Approved Niels Bohr , Member 17 Feb 2016 Date Approved Max Born , Member 17 Feb 2016 Date Approved Paul A. M. Dirac , Member 17 Feb 2016 Date Approved by Petrus Marcus Aurelius Featherstone-Hough , Chair/Dean of the Department/College/School of Mathematics and by Alice B. Toklas , Dean of The Graduate School. ABSTRACT Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah.
    [Show full text]
  • Weak References Data Structures and Implementation
    Weak References Data Structures and Implementation Bruno Haible ILOG GmbH 24 April 2005 What is a Weak Pointer? ● Garbage collection preserves all objects that are reachable from the root set. ● A weak pointer holds its object without causing it to be reachable. What is a Weak Hashtable? ● A weak hash-table holds its key-value pairs without causing them to be reachable. ● Four kinds: – :key – :value – :key-and-value – :key-or-value A Strong Feature ● Adding extra info to sealed objects. ● Memoizing prior results. ● Uniquification. ● Hash consing. ● Avoiding attach/detach protocols. ● Global garbage collection. Caveats ● Extra time spent in GC (for W weak pointers: – O(W²) in some implementations, – O(W) in other implementations) Weak Datastructures ● Weak pointer ● Weak “and” relation ● Weak “or” relation ● Weak association (= weak mapping) ● Weak “and” mapping ● Weak “or” mapping ● Weak association list ● Weak hash-table Primitive Weak Datastructures ● Weak pointers ● Weak :key mappings ● Weak hash-tables The others can be emulated. Levels of Support 1.Support for weak pointers. 2.Support for weak :key mappings or weak hash-tables, with “key not in value” restriction. 3.Support for weak :key mappings or weak hash-tables, without restriction. 4.Scalable support for weak :key mappings or weak hash-tables. Implementations of Level 1 ● Common Lisp: GNU clisp 2.33.80, OpenMCL 0.14.1, Allegro CL 6.2, LispWorks 4.3, Corman Lisp 1.1, CMUCL 19a, SBCL 0.8.20 ● Scheme: GNU guile 1.7.1, MIT Scheme 7.7.1, BBN Scheme, MzScheme 205, Scheme48 ● Other
    [Show full text]
  • Gnustep HOWTO Installing the Gnustep Developement System
    GNUstep HOWTO Installing the GNUstep developement system This document explains how to build the different components of the GNUstep core libraries. Last Update: 6 May 2021 Copyright c 1996 - 2007 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation. i Table of Contents 1 Introduction ::::::::::::::::::::::::::::::::::::: 1 2 Summary::::::::::::::::::::::::::::::::::::::::: 2 3 Compiling and Installing the packages::::::::: 5 3.1 Installing the Core Libraries :::::::::::::::::::::::::::::::::::: 5 3.1.1 Alternate Library Setup ::::::::::::::::::::::::::::::::::: 6 3.1.2 Building the Package :::::::::::::::::::::::::::::::::::::: 6 4 Additional Installation :::::::::::::::::::::::::: 7 4.1 Environment Setup ::::::::::::::::::::::::::::::::::::::::::::: 7 4.2 GNUstep Home :::::::::::::::::::::::::::::::::::::::::::::::: 7 4.3 Time Zone ::::::::::::::::::::::::::::::::::::::::::::::::::::: 8 4.4 GNUstep deamons:::::::::::::::::::::::::::::::::::::::::::::: 8 5 Test Tools and Applications :::::::::::::::::::: 9 6 Machine Specific Instructions ::::::::::::::::: 10 7 Getting Libraries via git ::::::::::::::::::::::: 11 1 1 Introduction This document explains how to build the GNUstep core libraries. The core libraries, along with associated tools and other files provide everything nec- essary for a working GNUstep system. In order to easily compile and debug GNUstep projects,
    [Show full text]
  • CLISP - Conversational LISP
    Session 25 Hardware and Software for Artificial Intelligence CLISP - Conversational LISP Warren Teitelman Xerox Palo Alto Research center Palo Alto, California 94304 Abstract CLISP is an attempt to make LISP programs The syntax for a conditional expression is easier to read and write by extending the correspondingly simple:* syntax of LISP to include infix operators, IF-THEN statements, FOR-DO-WHILE statements, Figure 2 and similar ALGOL-like constructs, without Syntax of a conditional Expression changing the structure or representation of the language. CLISP is implemented through <conditional expression> ::x LISP's error handling machinery, rather than (COND <clause> ... <clause>) by modifying the interpreter: when an <clause> :;= (<form> <form>) expression is encountered whose evaluation causes an error, the expression is scanned Note that there are no IF's, THEN's, for possible CLISP constructs, which are BEGIN's, END'S, or semi-colons. LISP avoids then converted to the equivalent LISP the problem of parsing the conditional expressions. Thus, users can freely expression, i.e., delimiting the individual intermix LISP and CLISP without having to clauses, and delimiting the predicates and distinguish which is which. Emphasis in the consequents within the clauses, by requiring design and development of CLISP has been on that each clause be a separate element in the system aspects of such a facility, with the conditional expression, namely a the goal in mind of producing a useful tool, sublist, of which the predicate is always not just another language. To this end, the first element, and the consequent the CLISP includes interactive error correction second element- As an example, let us and many 'Do-what-I-Mean* features.
    [Show full text]
  • Einführung in LISP
    Einführung in LISP Simon Lutz, Frank Preiswerk “Real Programmers don't write in LISP. Only idiots' programs contain more parenthesis than actual code.” “Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.” 04/19/06 Seminar 10 Programmiersprachen - Lisp/Scheme - Simon Lutz, Frank Preiswerk 1 Zeitlicher Überblick 1958: Lisp wurde von John McCarthy am MIT speziell für nicht-numerische Probleme designed und von Steve Russell auf einer IBM 704 Maschine implementiert. Der Name bedeutet “List Processing Language”. 1968: Erster Lisp Compiler geschrieben in Lisp von Tim Hart und Mike Levin. 1968-70: Implementation von SHRDLU mittels Lisp, berühmtes AI-System. 1970er Jahre: Performanz von bestehenden Lisp-Systemen wird zum Thema, es entstehen optimierte Lisp-Maschinen. Heute wieder verschwunden. 1980er – 1990er Jahre: Bemühungen für eine Vereinheitlichung der vielen bestehenden Lisp-Dialekte: Common Lisp entsteht. 1994: ANSI veröffentlicht Common Lisp Standard. Dies zu einem Zeitpunkt, als der Weltmarkt für Lisp viel kleiner war als in den früheren Zeiten. 04/19/06 Seminar 10 Programmiersprachen - Lisp/Scheme - Simon Lutz, Frank Preiswerk 2 Lisp heute Nach einem Rückgang in den 90er Jahren ist das Interesse seit 2000 wieder gestiegen, massgeblich im Rahmen von Open Source Implementationen von Common Lisp. 2004: Peter Seibel’s “Practical Common Lisp” ist für kurze Zeit an zweiter Stelle von Amazon’s populärsten Programmierbüchern. April 2006: Tiobe Software rankt Lisp auf Platz 14 der populärsten Programmiersprachen. Neue “Lisper” beschreiben die Sprache gerne als “eye-opening experience” und behaupten, in Lisp deutlich produktiver zu sein als in anderen Sprachen.
    [Show full text]
  • Evaluation of Music Notation Packages for an Academic Context
    EVALUATION OF MUSIC NOTATION PACKAGES FOR AN ACADEMIC CONTEXT Pauline Donachy Dept of Music University of Glasgow [email protected] Carola Boehm Dept of Music University of Glasgow [email protected] Stephen Brandon Dept of Music University of Glasgow [email protected] December 2000 EVALUATION OF MUSIC NOTATION PACKAGES FOR AN ACADEMIC CONTEXT PREFACE This notation evaluation project, based in the Music Department of the University of Glasgow, has been funded by JISC (Joint Information Systems Committee), JTAP (JISC Technology Applications Programme) and UCISA (Universities and Colleges Information Systems Association). The result of this project is a software evaluation of music notation packages that will be of benefit to the Higher Education community and to all users of music software packages, and will aid in the decision making process when matching the correct package with the correct user. Six main packages are evaluated in-depth, and various others are identified and presented for consideration. The project began in November 1999 and has been running on a part-time basis for 10 months, led by Pauline Donachy under the joint co-ordination of Carola Boehm and Stephen Brandon. We hope this evaluation will be of help for other institutions and hope to be able to update this from time to time. In this aspect we would be thankful if any corrections or information regarding notation packages, which readers might have though relevant to be added or changed in this report, could be sent to the authors. Pauline Donachy Carola Boehm Dec 2000 EVALUATION OF MUSIC NOTATION PACKAGES FOR AN ACADEMIC CONTEXT ACKNOWLEDGEMENTS In fulfillment of this project, the project team (Pauline Donachy, Carola Boehm, Stephen Brandon) would like to thank the following people, without whom completion of this project would have been impossible: William Clocksin (Calliope), Don Byrd and David Gottlieb (Nightingale), Dr Keith A.
    [Show full text]