Re: Cryptarithm solver - Haskell vs. C++
[EMAIL PROTECTED] (Marcin 'Qrczak' Kowalczyk) writes: I have to care how fast my programs run. I like writing in Haskell very much, it's my favorite general-purpose language, but one of the biggest weak points of Haskell for me is poor efficiency (at least with ghc, I don't know how fast are other compilers). I wonder whether this is the issue of Haskell itself or the compilers, I wonder if I can expect things to go better in future. I don't know what the future holds but, at least with GHC, you already have a range of options, to try to go faster. * You can profile your code and write better "standard" Haskell; * You can drop down to non-standard Haskell, and express your code with (e.g.) unboxed values, bytePrimArray#s, -- i.e. direct access to the machinery that GHC's libraries use; * You can code selected hot spots in C/whatever, and call out from Haskell to do those; if you do enough of this, you end up with the non-Haskell program you would've had to write anyway :-) * You can give your code to the GHC people for benchmarking purposes; be sure to mention, "By the way, this code runs N times faster when compiled by HBC" -- it works wonders. I think it is Very Cool that users have it within their power to claw back arbitrary "performance loss", if they want/need to. Will
Re: Question
I don't think the development tools are the real problem; it's the size of the pile of readily-available Haskell modules (and {libraries,sets} of modules) that do useful things. Nowadays, when setting out to tackle a programming problem (in any language), you kinda hope that big chunks of the code has already been written for you (as modules/libraries of some sort). The typical application is pretty high up the food chain. With Haskell, it's typically, "I'd love to write this program in Haskell, but I'd first need 6 months to write the needed infrastructure..." The great thing about "the modules problem" is that nearly anyone can contribute -- you don't have to know the innards of any Haskell implementation in order to be useful. Yes, I've said this all before... :-) Will "Mark P Jones" [EMAIL PROTECTED] writes: One of the greatest disappointments to date of the move to more liberal (i.e. free software) licenses for systems like Hugs and GHC, is that it has done almost nothing to stimulate contributions to the implementations themselves from outside the immediate (and small) group of developers concerned. ...
Re: Question
Marko Schuetz [EMAIL PROTECTED] writes: ... It has taken the Haskell community quite some time to switch to liberal licenses. IIRC only Hugs used to come with a license at all, neither hbc, ghc nor nhc used to have one for quite some time. GHC has always had a "liberal license", it just wasn't written down :-) There has never been a whisper of any other terms than "it's freely available, and we'd be delighted if you used it". I think we mostly just followed Lennart Augustsson's example with LML/HBC -- after all, we stole lots of other good ideas from those guys, why not their "licensing" :-? The need is "more libraries", not "groovier licenses". Will (ex-GHC person)
code for XML things? sysadmin things?
Hi, folks. I'm noodling around on some (Unix) sysadmin ideas, and would like to use Haskell and XML (http://www.xml.com). Does anyone have code to share that might be *vaguely* useful for XML-ish things? -- I'm mainly interested in it as a data-exchange format. Or for any sysadmin-ish purpose whatsoever? As always in these things, *don't* wait until "I can tidy it up a bit", or "this version isn't too good, wait for the next one". As Joe Armstrong used to say, "Freeze and sell!" Your "customers" will tell you if it's any good, soon enough. (Haskell really needs more code of all kinds in circulation; the Perl module people, for example, produce more in a week than we do in a year.) Should anything come of my noodling, it will be freely available in the usual way. Thanks, Will
Re: Gif writer module
"Keith S. Wansbrough" [EMAIL PROTECTED] writes: ... Having a single unified repository for Haskell modules would be a wonderful thing. Does anyone else agree? Yes, lots of people agree, most importantly Sigbjorn :-) We (Glaswegians) tried to do a "Haskell library" in the early days, but not much came of it except for Stephen Bevan's numerical code. But that's no reason not to swing 'round and try again; after all, there should be *much* more Haskell code in existence than in 1991. Will
Re: Int vs Integer
[EMAIL PROTECTED] writes: As far as I know, none of the existing implementations takes the speed of Integer seriously (ghc certainly doesn't), ... The GHC implementation has always been a thin wrapper on top of the GMP (GNU multi-precision arithmetic) library. So, while we may not have taken Integer performance too seriously, we made a point of hanging around with people who did. (Hey, Lennart made much the same choice, and he's not one to give away speed for nothing :-) Will (ex-GHC person)
[ANNOUNCE] GHC 0.28 snapshot for Linux ELF (Haskell 1.2)
A from-working-sources no-guarantees snapshot of the Glasgow Haskell compiler (GHC) for the i386-unknown-linux platform is now available from ftp://ftp.dcs.glasgow.ac.uk/pub/haskell/glasgow/ghc-0.28-platform.tar.gz. (The files ghc-0.26-docs-and-examples.tar.gz and ghc-0.26-ps-docs.tar.gz [PostScript] may also be of interest.) This is still the "old" GHC for Haskell 1.2. The 0.28 pseudo-release is solely to provide a GHC system for Linux ELF machines. We _believe_ that profiling and Concurrent Haskell work, as well as ordinary sequential execution. As 0.28 is a snapshot and not a "proper" release, it may have serious, show-stopping bugs in it. Our commonly-reported-bugs Web page, http://www.dcs.gla.ac.uk/fp/software/ghc/ghc-bugs.html, might be one place to look... GCC 2.7.x is required; GCC 2.6.x will *not* work. A file ghc-0.28-src.tar.gz includes what should be buildable source; haven't actually tried it... A particular thanks to Peter Breuer [EMAIL PROTECTED], who ELFified our Linux machine for us. Please report any bugs to [EMAIL PROTECTED] Will Partain AQUA project (slave) Dated: 96/05/21 === INSTALLATION NOTES == Ignore the installation instructions in any documentation. This is the stuff that applies for this distribution. Unpack the distribution. Move "ghc-0.28-platform" to wherever you like. Make a link to ghc-0.28-platform/ghc/driver/ghc, so that "ghc" will be in your PATH. Change the hardwired paths in ghc/driver/ghc and in ghc/utils/hscpp/hscpp to point to where things are on your system. (Also: ghc/utils/mkdependHS/mkdependHS, if you want to use it.) Notably: where "perl" is (first line of each script), where $TopPwd is (ghc script), where your gcc cpp ($OrigCpp) is (hscpp and mkdependHS scripts). *Don't* set any environment variables to do this. GHC should then work. Try "ghc -v" on something simple, to make sure it compiles and links a program correctly. If you don't want the profiling libraries (e.g., to save disk space), do: cd ghc rm runtime/*_p.a lib/*_p.a (or gzip them, temporarily) If you don't want to concurrent-Haskell libraries (e.g., same reason), do: cd ghc rm runtime/*_mc.a lib/*_mc.a (or gzip them, temporarily)
Haskell modes for Emacs
A collection of "Haskell modes" for GNU emacs are in pub/haskell/misc/haskell-modes-9512.tar.gz on ftp.dcs.gla.ac.uk. The README file is attached. You will also find the .tar.gz file under /computing/programming/languages/haskell/misc/ on sunsite.doc.ic.ac.uk. Comments, suggestions, testimonials, etc., would be welcome. Will README file = I've collected all the Haskell modes for GNU Emacs that I could lay my hands on -- there are billions. A list is attached, grouped by "family". I don't like "mode junk" myself, so I don't use any of them. I will include advertising or testimonials from happy users if they send them along... Will Partain [EMAIL PROTECTED] 95/12/05 === * "Chalmers Haskell mode family" -- "Major mode for editing Haskell", by Lars Bo Nielsen and Lennart Augustsson. chalmers/original -- the original -- version 0.1. chalmers/thiemann -- Peter Thiemann added "indentation stuff" and fontification -- version 0.2. chalmers/sof -- Sigbjorn Finne's [EMAIL PROTECTED] hacked version of Thiemann's. ... * "Glasgow Haskell mode family" -- originally written by Richard McPhee et al., at Glasgow University, as a student project, for Kevin Hammond. glasgow/original : version 1.0, now maintained by [EMAIL PROTECTED] ... * "Simon Marlow Haskell mode family" -- This is the one that comes with GHC, versions 0.16 up to at least 0.26. simonm/real : the real thing simonm/ghc : the one distributed with GHC 0.16-0.26; no particular reason to prefer this one... ... * "Yale Haskell mode family" -- Especially good for chatting to a Yale-Haskell inferior process :-) yale/original : the real thing yale/chak : "extended by Manuel M.T. Chakravarty with rudimentary editing features (including better syntax table) and support for the font-lock-mode." Via Hans Wolfgang Loidl [EMAIL PROTECTED]
Glasgow Haskell 0.25 available (for Linux only)
A binary-only from-working-sources no-guarantees snapshot of the Glasgow Haskell compiler (GHC) for Linux x86 machines is now available by FTP from ftp.dcs.glasgow.ac.uk, in pub/haskell/glasgow/ghc-0.25-linux.tar.gz. This release is the first, long-awaited "registerized" GHC for Linux, which produces code of reasonable size and speed. We use our normal technique of "stealing registers" with GCC's global-variables-in-registers facility. We "steal" six of the x86's eight general-purpose registers, including the C stack-pointer (%esp), which we use for the heap pointer (Hp). To use this GHC, you need a special version of GCC, which is also provided in the distribution (under "gcc-linux-to-linux"). Whatever you do, please do *not* report any "bugs" in this GCC to bug-gcc -- report them to *me* instead. One special thing you must watch out for: If GCC "crashes" with a message about spilling registers, it is *not* a GCC problem. It means you must get GHC to "back off" in its register "stealing". First try a -monly-4-regs flag, then -monly-3-regs, and as a last resort, -monly-2-regs. As far as we know, all Haskell code goes through GHC with a -monly-2-regs flag (but it produces substantially worse code with that flag). Profiling is not provided in this release. Please report any bugs to [EMAIL PROTECTED] Will Partain AQUA project (slave) Dated: 95/04/01 === INSTALLATION NOTES == Unpack the distribution. Move "gcc-linux-to-linux" and "ghc-0.25-linux" wherever you like. Alter the "gcc" script to point to wherever you've put "gcc-linux-to-linux", and put the "gcc" script wherever you wish in your PATH. Make a link to ghc-0.25-linux/ghc/driver/ghc, so that "ghc" will be in your PATH. Change *all* hardwired paths in ghc/driver/ghc and in ghc/utils/hscpp/hscpp to point to where things are on your system. Notably: where "perl" is (first line of each script), where $TopPwd is (ghc script), where your gcc cpp is (hscpp script). GHC should then work. Try "ghc -v" on something simple, to make sure it compiles and links a program correctly.
Re: New Haskell 1.3 I/O Definition
Kevin Hammond writes: "We have attempted ... to consider portability issues very carefully." But we may have missed something. For example, I don't think anyone has actually *seen* a "Win32 Programmer's Reference Manual" -- i.e., the programming interface for most of the world's computers :-( -- and something may have been overlooked. If you are an "expert" about some particular system, *please* give this I/O proposal a good reading! Does the proposal make sense for the system in question? Could it be sort-of-plausibly implemented? Your feedback will really help. Haskell is not just for Unix boxes! I can say this because I am as Unix-centric as they come :-) Will Disclaimer -- not taking credit for others' efforts: I did none of the Real Work on this I/O proposal.
(not the) NoFib benchmark suite available (version 0.22)
Though the NoFib Haskell benchmark suite is *still* not ready to go, we are making our current sources available. It's not much of a benchmark suite, but it's a pretty good Haskell compiler test suite :-) Two files are available on ftp.dcs.glasgow.ac.uk, in pub/haskell/glasgow: -rw-rw-r-- 1 partain 2948 Jul 27 19:50 nofib-not-0.22.README -rw-rw-r-- 1 partain 2741279 Jul 27 19:42 nofib-not-0.22.tar.gz They are mirrored on src.doc.ic.ac.uk in computing/programming/ languages/haskell/glasgow. The much higher version number than last time (from 0.00 to 0.22) does not reflect improvement so much as just using one number for two releases on the same day. Will Partain
GHC 0.21: alternate FTP site
Sorry folks, our FTP is hung, hosed, or hapless, not sure which. Happily, we are mirrored by the big archive in London, src.doc.ic.ac.uk; the relevant 0.21 files are in computing/programming/languages/haskell/glasgow/working. Please report all FTP problems at our site to [EMAIL PROTECTED] Will
Re: Haskell 1.3 [instances]
Ian Holyer writes: The current restriction that instances must be defined either in the class module or the type module is painful. LISTEN TO THIS MAN! Trying to use the module system in (what we imagined to be) a sensible way on the Glasgow Haskell compiler [which is written in Haskell] has been a nightmare. Take a pile of mutually-dependent modules, add the "instance virus" [instances go with the class or type, and you can't stop them...], and you have semi-chaos. All attempts to have export/import lists that "show what's going on" have been undermined by having to add piles of cruft to keep instancery happy. I would go for either of the following not-thought-through choices: * Instances travel with the *type*, not the class. 99% of the time, this is what we want. If your instance isn't going, add an explicit export of the type constructor. Possibly have a special case for instances of user-defined classes for Prelude types... * Make it so that imported instances whose class/type is out-of-scope may be silently ignored (i.e., an exception to the closure rule). For example, if I write "import Foo" and Foo's interface includes "instance Wibble Wobble" and none of my "imports" happen to bring "Wibble" (or "Wobble") into scope, then a compiler may drop this instance silently. It is not an error. (Of course, if you try to *use* such an instance, you will get an error downstream.) Of course, something that involves new syntax/extra machinery would also be fine. Will PS: Get rid of "default" declarations, too. No-one uses them. (Hi, Kevin!)
Glasgow Haskell, v 0.16+, slightly available for DECstations, HP workstations
I had to do an "initial boot" of Glasgow Haskell to these two machines, so I am making the binaries available. Please take account of the huge disclaimers in the attached README file. The files are on ftp.dcs.glasgow.ac.uk, in pub/haskell/glasgow/working/. Will = The ghc-0.16-{decstation,hpux}.tar.gz.?? files are a HUGE (unpacks to 30MB), UNWIELDY, LARGELY UNTESTED distribution of an *unregisterised* boot to a {DECstation running Ultrix, HP-PA machine running HP-UX}. Whatever you do, don't expect it to be wonderful. HP-UX: Note: Only seems to work with GCC as your C compiler. Furthermore, it *doesn't* seem to work with the "better" GCC stuff from jaguar.cs.utah.edu. I got a straight gcc-2.4.5, configured it in the most obvious way ("./configure hppa1.1-hp-hpux8" [don't remember exactly]) and built it. You get no -g support, but it seems to work with this Haskell system. To use it (this procedure is also untested...): Unpack into a directory {ghc-0.17,ghc-0.16+} (this isn't really 0.16...): % cat ghc-0.16-machine.tar.gz.?? | gunzip -c | tar xfv - HP-UX: If you wish, rename "ghc-0.16+" to something else: % mv ghc-0.16+ something-else Edit the driver script, ghc-num/ghc/driver/ghc, to change all the hardwired path names that point to this-and-that. It should be one simple query-replace (in Emacs terms). Oh yes, the driver ( perhaps other scripts) are invoked via #!/usr/local/bin/perl; you may need to change these. A straight driver bug you might want to fix (untested): Add a "unlink" line in ghc/driver/ghc at *about* line 1498: run_something($to_do, 'C compiler'); $PostprocessCcOutput = 0; unlink($cc_help, $cc_help_s); Put something in your PATH that "points" to the driver; e.g., % ln -s /ghc-num/ghc/driver/ghc ~/bin/hppa/ghc % rehash Give it a little spin: % cat hello.hs main _ = [AppendChan stdout "Hello, world!\n"] ^D % ghc -v -o hello hello.hs % ./hello If you're struggling for space, you can probably "strip" the ghc/compiler/hsc and ghc/parsers/hsp/hsp binaries. Documentation: I didn't include it in these "distributions"; I'd suggest you get a ghc-0.16-bin-sun4.tar.gz from any reputable Haskell archive, unpack somewhere, keep the "docs" directory, and throw the rest away. Let me know if anything doesn't work. Will Partain [EMAIL PROTECTED]
Glasgow Haskell non-release snapshot, v 0.17, available
I have dropped a current *not-overly-tested* snapshot of our current Glasgow Haskell sources on ftp.dcs.glasgow.ac.uk, in pub/haskell/glasgow/working/ghc-0.17-src-boot.tar.gz.{aa-af} [split for FTPing robustness; 5+MB in total; untars to 30MB or so]. Joe F Programmer would be well advised to stick with 0.16 (our last public release). The ONLY PEOPLE WHO SHOULD BE INTERESTED in 0.17 are: * Those who've had troubles with registers getting clobbered during "ccalls"; * Those concerned with porting the compiler. Porting situation: I've used these files to do an "initial boot" (== big, slow compiler) on a DECstation and an HP-PA box. The chance of that much success on a 32-bit Unix box is quite high. Doing the "registerising" process (to go fast) is still a black art. If you are an active porter, please keep us posted on your progress. Important note: 0.17 unpacks into your *current working directory*, not into a directory named "ghc-0.17". So you very well may want to... % mkdir ghc-0.17 % cd ghc-0.17 % cat .../ghc-0.17*.a? | gunzip -c | tar xfv - The reason this non-distribution is so big is that it includes enough intermediate C (.hc) files to be able to boot without already having a Haskell compiler. If you don't need those files, just do: % cd ghc/compiler % rm */*.hc % cd ../lib % rm */*.hc As usual, comments to glasgow-haskell-{bugs,request}@dcs.glasgow.ac.uk. Will Partain
Glasgow Haskell 0.16 documents in PostScript available
A couple of people have asked about PostScript versions of the documentation bits of GHC 0.16. I've put these in ghc-0.16-docs-in-PostScript.tar.gz (gzipped, 743KB), available by anonymous FTP from ftp.dcs.glasgow.ac.uk, in pub/haskell/glasgow/; the contents list is attached. Will Partain % gtar tfvz $ftp/haskell/glasgow/ghc-0.16-docs-in-PostScript.tar.gz -rw-rw-r-- partain 251900 Jul 26 19:30 1993 ghc-0.16/ghc/docs/papers/unboxed.ps -rw-rw-r-- partain 556116 Jul 26 19:30 1993 ghc-0.16/ghc/docs/papers/stg.ps -rw-rw-r-- partain 187470 Jul 26 19:30 1993 ghc-0.16/ghc/docs/papers/io-popl.ps -rw-rw-r-- partain 147319 Jul 26 19:30 1993 ghc-0.16/ghc/docs/papers/update.ps -rw-rw-r-- partain 168374 Jul 26 19:32 1993 ghc-0.16/ghc/docs/papers/grasp-jfit.ps -rw-rw-r-- partain 155424 Jul 26 19:30 1993 ghc-0.16/ghc/docs/papers/lazy-imperative.ps -rw-rw-r-- partain 204940 Jul 26 19:30 1993 ghc-0.16/ghc/docs/papers/strictness.ps -rw-rw-r-- partain 127001 Jul 26 19:30 1993 ghc-0.16/ghc/docs/release_notes/release.ps -rw-rw-r-- partain 248371 Jul 26 19:30 1993 ghc-0.16/ghc/docs/users_guide/user.ps -rw-rw-r-- partain 182351 Jul 26 19:30 1993 ghc-0.16/ghc/docs/install_guide/installing.ps -rw-rw-r-- partain 184154 Jul 26 19:30 1993 ghc-0.16/ghc/docs/add_to_compiler/paper.ps %
Glasgow Haskell compiler, version 0.16, available
The Glasgow Haskell Compiler -- version 0.16 The second public release of the Glasgow Haskell Compiler is now available (GHC, version 0.16). Binaries (recommended) and source are freely available by FTP; details appear below. GHC 0.16 is still alpha-quality software. This release in an interim measure, not as solid as I would prefer. However, a lot has gone in since December. The profiling system is Way Cool. The compiler now has a strictness analyser and an update analyser. Compiled programs tend to run faster. Compilation speed is worse. Bugs remain, but they tend to be work-around-able. To run this release, you need a Sun4 or Sun3, probably with 16+MB memory, and GNU C (gcc), version 2.1 or greater, and "perl". This system can be built from source using: itself (most likely to succeed), the previous GHC release (0.10) [least likely], or the Chalmers HBC compiler [in-between]. Please see the appropriate documentation for details. Please report bugs to [EMAIL PROTECTED] and direct general queries to glasgow-haskell-request@same. Will Partain (typist for the AQUA [formerly GRASP] project) Why a Haskell programmer might want to use GHC ~~ * GHC provides an extensible I/O system, based on a "monad" [1]. (The standard Haskell I/O system is built on this foundation.) * A number of significant language extensions are implemented: - Fully fledged unboxed data types [2]. - Ability to write arbitrary in-line C-language code, using the I/O monad to retain referential transparency. - Incrementally-updatable arrays, also embedded in a monad. - Mutable reference types. * A new profiling system is supplied, which enables you to find out which bits of your program are eating both *time* and the *space* [3]. * By default, the system uses a generational garbage collector which lets you run programs whose live data is significantly larger than the physical memory size before thrashing occurs. (Conventional 2-space GC starts thrashing when the live data gets to about half the physical memory size.) * Good error messages. Well, fairly good error messages. Line numbers are pretty accurate, and during type checking you get several (accurate) error reports rather than just one. * Performance: programs compiled with GHC "often" beat Chalmers-HBC-compiled ones. If you find programs where HBC wins, please report it to us, as a bug :-). Why a functional-language implementor might want to use GHC ~~~ * We have tried very hard to write the compiler in a modular and well-documented way, so that other researchers can modify and extend it. One of our goals is specifically to provide a framework to support others' work. Several people are already using it in this way. * Highly configurable runtime system. Heavy use of C macros means that you can modify much of the storage representation without telling the compiler. For example, the system comes with 4 different garbage collectors! (all working) * Internals: extensive use of the second-order lambda calculus as an intermediate code; the Spineless Tagless G-machine as evaluation model [4]. * Various performance-measurement hooks. Main shortcomings ~ * No interactive system. This is a batch compiler only. (Any volunteers?) * Compiler is greedy on resources. Going via C doesn't help here. * This system should run on any Unix box. We haven't had time to do any non-Sun ports. Help or prodding welcome. References ~~ All these papers come with the distribution [in ghc/docs/papers]. [1] "Imperative functional programming", Peyton Jones Wadler, POPL '93 [2] "Unboxed data types as first-class citizens", Peyton Jones Launchbury, FPCA '91 [3] "Profiling lazy functional languages", Sansom Peyton Jones, Glasgow workshop '92 [4] "Implementing lazy functional languages on stock hardware", Peyton Jones, Journal of Functional Programming, Apr 1992 How to get it ~ This release is available, in whole or in part, from the usual Haskell anonymous FTP sites, in the directory pub/haskell/glasgow: ftp.dcs.glasgow.ac.uk (130.209.240.50) ftp.cs.chalmers.se (129.16.225.66) nebula.cs.yale.edu (128.36.13.1) [but it may take a little time to propagate the files... -wdp] We are mirrored by src.doc.ic.ac.uk, in computing/programming/languages/haskell/glasgow, and you can get files from there by every means known to humanity. These are the available files (.Z for compressed, .gz for gzipped) -- some are `on demand', ask if you don't see them: ghc-0.16-bin-sun4.tar.{Z,gz} A binary distribu
Glasgow Haskell 0.10 available for Sun3s and porting
In the last few days, I needed to do a Sun3 (68020) port of Glasgow Haskell, version 0.10. Some of you may be interested, so I am making it available by anonymous FTP, from ftp.dcs.glasgow.ac.uk, in pub/haskell/glasgow. I have *not* tested the result thoroughly. Sun3 binary distribution [in ghc-0.10-bin-sun3.tar.Z]: Everything you need to run on a Sun3. Roughly: move the files into place, fiddle the driver script, and go. Rudimentary porting kit [in the files working/*]: I built the Sun3 version from GHC-produced intermediate C (.hc) files. I have gathered up a set of the files required (ghc-0.10-hc-files.tar.Z), over and above the standard source distribution. I've also made a set of *unofficial* diffs (vs 0.10) that reflect everything I did to get it going, including GCC ``registerization'' to make it go faster. The diffs include some new documentation about porting. It should not be *too* difficult to get an unregisterized (slow) version going on any non-small Unix machine with plenty of disk space. Also, it shouldn't be too hard to get a registerized version going on any 680x0 Unix machine. If you decide to take a porting plunge, please get in touch beforehand, so that we can avoid duplicated efforts. Reminders: Glasgow Haskell, version 0.10, was released in early December, 1992. It is best supported on Sun4s, and there is a Sun4 binary distribution available, along with the complete source. Will Partain
some haskell FAQ info (occasional posting, long)
Haskell: Current status Simon Peyton Jones, Phil Wadler, Will Partain Cordy Hall, Kevin Hammond Dept of Computing Science, Glasgow University, Glasgow G12 8QQ, Scotland. email: [EMAIL PROTECTED] (April 1991; additions, November 1991, June 1992) The Haskell language In September 1987 a meeting was held at the conference on Functional Programming Languages and Computer Architecture in Portland, Oregon, to discuss an unfortunate situation in the functional programming community: there had come into being more than a dozen non-strict, purely functional programming languages, all similar in expressive power and semantic underpinnings. There was a strong consensus at the meeting that more widespread use of this class of functional languages was being hampered by the lack of a common language. It was decided that a committee should be formed to design such a language, providing faster communication of new ideas, a stable foundation for real applications development, and a vehicle through which others would be encouraged to use functional languages. The Haskell committee released its report on 1 April 1990. A revised version (Version 1.2) appeared in SIGPLAN Notices 27(5) (May 1992), along with a tutorial on Haskell by Hudak and Fasel. Implementations of Haskell ~~ This is a frank summary of the implementations of Haskell known to us. hbc ChalmersA serious and mature compiler. Use this hbi if you want to write large Haskell programs. hbi is an interactive version. Written in LML. You need a big machine. glhc Glasgow Another serious compiler, but less mature than hbc. Intended partly as a framework for implementors. Written in Haskell, generates C. You need a big machine. Y2.0 Yale A compiler from Haskell to Lisp, built on top of Common Lisp (EuLisp and Scheme should also work). An interactive, integrated Haskell programming environment. Supports both large scale Haskell programming and educational use. Needs a moderately big machine - we expect to release a Mac and PC version soon. Supports language implementors. gofer YaleAn interpreter for a language very similar to Haskell. A "best buy" if you just want to get started. Much much faster to use than the compilers below for small programs, because it compiles and loads programs amazingly fast. Written in C, and portable; you don't need a big machine! Only implementation to work on IBM PCish things. Below appears a bit more information about each of these implementations. The Haskell mailing list There is an electronic mailing list to discuss technical issues related to Haskell. To join this list, send your request to "[EMAIL PROTECTED]" (Europe and Australasia) or "[EMAIL PROTECTED]" (rest of world) as appropriate. Standard archive sites for Haskell stuff You can use anonymous FTP (username: anonymous; password: your e-mail address) to these hosts, where you will find things in "pub/haskell" and its subdirectories. Site Host name Raw IP#s (these can change) Chalmers animal.cs.chalmers.se 129.16.225.66 Glasgow ftp.dcs.glasgow.ac.uk 130.209.240.50 Yale nebula.cs.yale.edu 128.36.13.1 DETAILS OF IMPLEMENTATIONS ~~ The Glasgow compiler The Glasgow Haskell compiler has the following attributes: * Freely available (see below). * Written in Haskell. * Generates C as its target code -- hence highly portable. * Specifically designed to act as a "motherboard" into which others can "plug in" their own strictness analyser, profiler, front end, back end, or other special pass. * Internally, it uses the second-order polymorphic lambda calculus to preserve correct type information in the face of substantial program transformations. * Back end based on the Spineless Tagless G-machine -- our abstract machine for non-strict functional languages. (Paper available.) * Plants code to gather profiling information, of two sorts. First, low-level counts of various aspects of the abstract machine model. Second, and more interesting, programmer-level space and time profiling of "cost cen
glorious Glasgow Haskell compiler, 0.06, PATCH 1
Lennart Augustsson reported a bug whereby some of your configuration instructions were ignored and the system proceeded to build 100MB of stuff! Enclosed is a shar file with a small patch to fix this. Also available from the usual archive sites. In case you missed the announcement, version 0.06 is a pre-release for hackers, porters, and enthusiasts. It is unlikely to be useful to someone just trying to get a Haskell program running. (I can recommend Lennart's HBC system for that :-) Will Partain #!/bin/sh # This is a shell archive (produced by shar 3.49) # To extract the files from this archive, save it to a file, remove # everything above the "!/bin/sh" line above, and type "sh file_name". # # made 03/30/1992 08:38 UTC by partain@tegua # Source directory /tmp_mnt/local/fp/src # # existing files will NOT be overwritten unless -c is specified # # This shar contains: # length mode name # -- -- -- # 6257 -rw-rw-r-- ghc-0.06-patch-1 # # = ghc-0.06-patch-1 == if test -f 'ghc-0.06-patch-1' -a X"$1" != X"-c"; then echo 'x - skipping ghc-0.06-patch-1 (File already exists)' else echo 'x - extracting ghc-0.06-patch-1 (Text)' sed 's/:X//' 'SHAR_EOF' 'ghc-0.06-patch-1' 1. Apply this patch with X X % cd top-of-your-GHC-world X % patch -p0 this-patch-file X 2. Delete the file lib/split_hc. (If you've already built things Xsuccessfully, don't worry about this.) X 3. The main problem is that {lib,runtime}/Jmakefile were overriding Xthe chosen # of garbage collectors to compile for (with XJMAKE_DEFINES). So you would get a *lot* more than you bargained Xfor! X XIf you've already tried building things you only wanted the Xtwo-space collector ("std" setup), just delete all the junk Xassociated with the other collectors. Something like this will Xdo: X X % cd top-of-GHC-world X % (cd lib; rm */*_1s.o */*_du.o */*_ap.o) X % (cd runtime; rm */*_1s.sun?.o */*_du.sun?.o */*_ap.sun?.o) X X(You get the idea...) In each of those directories, also do: X X % make Makefile X % make Makefile # yes, *twice* X 4. You won't hurt anything by spinning over the whole tree, thusly: X X % cd top-of-GHC-world X % make Makefile X % make Makefiles X % make depend X % make all X diff -rc1 /local/fp2/ghc-0.06/PATCHLEVEL ./PATCHLEVEL *** /local/fp2/ghc-0.06/PATCHLEVEL Fri Feb 14 12:03:55 1992 --- ./PATCHLEVELMon Mar 30 09:17:09 1992 *** *** 1 ! The Glorious New Glasgow Haskell Compiler, version 0.06, patchlevel 0 --- 1 ! The Glorious New Glasgow Haskell Compiler, version 0.06, patchlevel 1 diff -rc1 /local/fp2/ghc-0.06/compiler/Jmakefile ./compiler/Jmakefile *** /local/fp2/ghc-0.06/compiler/Jmakefile Fri Mar 27 19:19:41 1992 --- ./compiler/JmakefileSun Mar 29 13:57:24 1992 *** *** 319,321 X HaskellCompileWithMoreHeap(deSugar/Match,500) ! HaskellCompileWithMoreHeap(main/Main,650) X HaskellCompileWithMoreHeap(prelude/AbsPrel,500) --- 319,321 X HaskellCompileWithMoreHeap(deSugar/Match,500) ! HaskellCompileWithMoreHeap(main/Main,700) X HaskellCompileWithMoreHeap(prelude/AbsPrel,500) diff -rc1 /local/fp2/ghc-0.06/lib/Jmakefile ./lib/Jmakefile *** /local/fp2/ghc-0.06/lib/Jmakefile Fri Mar 20 16:12:57 1992 --- ./lib/Jmakefile Mon Mar 30 08:47:24 1992 *** *** 32,34 X ! JMAKE_DEFINES = -DGC2s_Wanted -DGC1s_Wanted -DGCdu_Wanted -DGCap_Wanted X --- 32,34 X ! /* JMAKE_DEFINES = -DGC2s_Wanted -DGC1s_Wanted -DGCdu_Wanted -DGCap_Wanted */ X *** *** 57,58 --- 57,60 X chmod a+x $@ + + ExtraStuffToClean( ./split_hc ) X diff -rc1 /local/fp2/ghc-0.06/lib/split_hc.prl ./lib/split_hc.prl *** /local/fp2/ghc-0.06/lib/split_hc.prlFri Mar 27 08:41:49 1992 --- ./lib/split_hc.prl Sun Mar 29 14:28:33 1992 *** *** 104,105 --- 104,106 X print JMKF "\$(SRCS_HC_${f_base_fileonly}) : ${f_base}.hc\n"; + print JMKF "\t\$(RM) ${f_base}.jm \$(SRCS_HC_${f_base_fileonly})\n"; X print JMKF "\t./split_hc ${f_base}.hc\n\n"; *** *** 107,109 X # ... and the "clean" line for it... ! print JMKF "ExtraStuffToClean( \$(SRCS_HC_${f_base_fileonly}) )\n"; X --- 108,110 X # ... and the "clean" line for it... ! print JMKF "ExtraStuffToClean( \$(SRCS_HC_${f_base_fileonly}) ${f_base}.jm )\n"; X diff -rc1 /local/fp2/ghc-0.06/mkworld/AllProjects.tmpl ./mkworld/AllProjects.tmpl *** /local/fp2/ghc-0.06/mkworld/AllProjects.tmplWed Mar 25 13:04:25 1992 --- ./mkworld/AllProjects.tmpl Sun Mar 29 14:35:14 1992 *** *** 136,138 X #ifndef InstBinFlags ! #define InstBinFlags -m 0555 InstOwner InstGroup InstF
Re: Haskell library
Lennart Augustsson writes: The Haskell library seems to be contain few entries (none to be exact), so I've decided to add something. ... Actually, I've put the Haskell-y bits from Stephen Bevan's archive into the library here at Glasgow (ftp.dcs.glasgow.ac.uk:^ftp/pub/haskell/library). I'll copy Lennart's bits over sometime soon. There's a .../library/incoming directory for anyone wanting to drop something in. By some magical process, the sites at Yale, Chalmers, and Glasgow will all end up with the same library bits (eventually). Will