Commit 1fb1ab5d authored by simonpj's avatar simonpj

[project @ 1997-03-14 07:52:06 by simonpj]

Major update to more-or-less 2.02
parent fa6fb09e
The Glasgow Haskell Compiler -- version 2.02
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We are pleased to announce the first release of the Glasgow Haskell
Compiler (GHC, version 2.02) for *Haskell 1.4*. Sources and binaries
are freely available by anonymous FTP and on the World-Wide Web;
details below.
Haskell is "the" standard lazy functional programming language; the
current language version is 1.3, agreed in May, 1996. The Haskell
Report is online at
http://haskell.cs.yale.edu/1.4/haskell-report.html
GHC 2.02 is a beta-quality release:
* It is reliable.
It has been extensively tested against a large suite of Haskell 1.2
programs, but not so extensively tested against Haskell 1.4 programs
because we don't have a comprehensive set (Donations of Haskell 1.4
programs to our test suite are most welcome).
* It should generate good code.
All the optimisations that GHC 0.29 used to do are back in, with
the exception of specialisation. It ought to be the case that
GHC 2.02 outperforms GHC 0.29, because it has a much better
handle on cross-module inlining, but there's a good chance that
there are performance "holes" lurking. We have yet to make
a systematic comparison. (Please send us programs where 2.02
does noticeably worse than 0.29.)
* It is more expensive than it should be.
GHC 2.02 has received even less attention to its own performance.
At present it eats more space and time than GHC 0.29, especially
for very small programs. We'll work on this.
* A couple of Haskell 1.4 features are incompletely supported,
notably polymorphic strictness annotations, and Unicode.
If you want to use Haskell 1.4, this is a good moment to switch. If
you don't need the Haskell 1.4 extensions, then stay with GHC 0.29.
If you want to hack on GHC itself, then 2.02 is definitely for you.
The release notes comment further on this point.
GHC 2.02 is substantially changed from 2.01. Changes worth noting
include:
* The whole front end, which deals with the module system, has
been rewritten. The interface file format has changed.
* GHC 2.02 comes complete with Green Card, a C foreign language
interface for GHC. Green card is a pre-processor that
scans Haskell source files for Green Card directives, which
it expands into tons of "ccall" boilerplate that marshalls
your arguments to and from C.
* GHC 2.02 is available for Windows NT. From now on, Windows NT
will be a fully supported platform for GHC.
* GHC 2.02 supports full cross moudule inlining. Unlike 0.29 and
its predecessors, inlining can happen even if the inlined body
mentions a function or type that is not itself exported. This is
one place Haskell 1.4's new module system really pays off.
* Like 2.01, GHC 2.02 aborts a compilation if it decides that
nothing that the module imports *and acually uses* has changed.
This decision is now taken by the compiler itself, rather than
by a Perl script (as in 2.01) which sometimes got it wrong.
* The ghc/lib libraries are much more systematically organised.
* There's a completely new "make" system. This will mainly affect people
who want the source distribution, who will hopefully find it much, much,
easier than grappling with the old Jmakefiles. Even for binary
installation, the procedure is a little simpler, though.
Please see the release notes for a complete discussion of What's New.
To run this release, you need a machine with 16+MB memory (more if
building from sources), GNU C (`gcc'), and `perl'. We have seen GHC
2.01 work on these platforms: alpha-dec-osf2, hppa1.1-hp-hpux9,
sparc-sun-{sunos4,solaris2}, mips-sgi-irix5, and
i386-unknown-{linux,solaris2,freebsd}. Similar platforms should work
with minimal hacking effort. The installer's guide give a full
what-ports-work report.
Binaries are distributed in `bundles', e.g. a "profiling bundle" or a
"concurrency bundle" for your platform. Just grab the ones you need.
Once you have the distribution, please follow the pointers in
ghc/README to find all of the documentation about this release. NB:
preserve modification times when un-tarring the files (no `m' option
for tar, please)!
We run mailing lists for GHC users and bug reports; to subscribe, send
mail to majordomo@dcs.gla.ac.uk; the msg body should be:
subscribe glasgow-haskell-<which> Your Name <your-email@where.you.are>
Please send bug reports about GHC to glasgow-haskell-bugs@dcs.gla.ac.uk.
Simon Peyton Jones
Dated: February 1997
Relevant URLs on the World-Wide Web:
GHC home page http://www.dcs.gla.ac.uk/fp/software/ghc/
Glasgow FP group page http://www.dcs.gla.ac.uk/fp/
comp.lang.functional FAQ http://www.cs.nott.ac.uk/Department/Staff/mpj/faq.html
======================================================================
How to get GHC 2.01:
This release is available by anonymous FTP from the main Haskell
archive sites, in the directory pub/haskell/glasgow:
ftp.dcs.gla.ac.uk (130.209.240.50)
ftp.cs.chalmers.se (129.16.227.140)
haskell.cs.yale.edu (128.36.11.43)
The Glasgow site is mirrored by src.doc.ic.ac.uk (146.169.43.1), in
computing/programming/languages/haskell/glasgow.
These are the available files (.gz files are gzipped) -- some are `on
demand', ask if you don't see them:
ghc-2.01-src.tar.gz The source distribution; about 3MB.
ghc-2.01.ANNOUNCE This file.
ghc-2.01.{README,RELEASE-NOTES} From the distribution; for those who
want to peek before FTPing...
ghc-2.01-ps-docs.tar.gz Main GHC documents in PostScript format; in
case your TeX setup doesn't agree with our
DVI files...
ghc-2.01-<platform>.tar.gz Basic binary distribution for a particular
<platform>. Unpack and go: you can compile
and run Haskell programs with nothing but one
of these files. NB: does *not* include
profiling (see below).
<platform> ==> alpha-dec-osf2
hppa1.1-hp-hpux9
i386-unknown-freebsd
i386-unknown-linux
i386-unknown-solaris2
m68k-sun-sunos4
mips-sgi-irix5
sparc-sun-sunos4
sparc-sun-solaris2
ghc-2.01-<bundle>-<platform>.tar.gz
<platform> ==> as above
<bundle> ==> prof (profiling)
conc (concurrent Haskell)
par (parallel)
gran (GranSim parallel simulator)
ticky (`ticky-ticky' counts -- for implementors)
prof-conc (profiling for "conc[urrent]")
prof-ticky (ticky for "conc[urrent]")
ghc-2.01-hc-files.tar.gz Basic set of intermediate C (.hc) files for the
compiler proper, the prelude, and `Hello,
world'. Used for bootstrapping the system.
About 4MB.
ghc-2.01-<bundle>-hc-files.tar.gz Further sets of .hc files, for
building other "bundles", e.g., profiling.
ghc-2.01-hi-files-<blah>.tar.gz Sometimes it's more convenient to
use a different set of interface files than
the ones in *-src.tar.gz. (The installation
guide will advise you of this.)
#-----------------------------------------------------------------------------
# $Id: Makefile,v 1.2 1996/11/21 16:45:54 simonm Exp $
#################################################################################
#
# fptools/Makefile
#
# This is the main Makefile for fptools.
#
#################################################################################
TOP = .
SUBDIRS = glafp-utils ghc
include $(TOP)/mk/gen.mk
include $(TOP)/mk/subdir.mk
TOP=.
include $(TOP)/mk/boilerplate.mk
SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME)
line = @echo "------------------------------------------------------------------------------"
SUBDIRS = $(ProjectsToBuild)
boot ::
@echo "Bootstrapping $(PROJECTNAME)..."
$(line)
@echo "Booting glafp-utils"
$(line)
@$(MAKE) -C glafp-utils boot
#
# Files to include in fptools source distribution
#
SRC_DIST_DIRS += mk $(ProjectsToBuild)
SRC_DIST_FILES += configure.in config.guess config.sub configure README ANNOUNCE NEWS INSTALL Makefile
$(line)
@echo "Booting ghc"
$(line)
@$(MAKE) -C ghc boot
@echo "Done!"
#
# Making a binary distribution
#
BIN_DIST_TMPDIR=$(shell pwd)
BIN_DIST_NAME=fptools
#
# list of toplevel `projects' to include in binary distrib.
#
BIN_DIST_DIRS=ghc
binary-dist:: binary-dist-pre
BIN_DIST_TOP= distrib/Makefile-bin.in \
distrib/configure-bin.in \
distrib/README \
distrib/INSTALL \
distrib/ANNOUNCE
binary-dist::
@for i in $(BIN_DIST_TOP); do \
@echo cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME) \
cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME) \
done;
#
# Creating and copying the documentation into the bin-dist tree.
#
binary-dist::
$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html
$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi
$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info
@echo "Making html documentation.."
$(MAKE) -C docs --no-print-directory $(MFLAGS) html
cp docs/html/* $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html
@echo "Making dvi files.."
$(MAKE) -C docs --no-print-directory $(MFLAGS) dvi
cp docs/*.dvi $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi
@echo "Making info files.."
$(MAKE) -C docs --no-print-directory $(MFLAGS) info
cp docs/*.info* $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info
dist :: dist-pre
include $(TOP)/mk/target.mk
dist :: dist-post
#
# Automatically remake update configuration files
# (from autoconf manual)
#
configure: configure.in
autoconf
#
# autoheader might not change config.h.in, so touch a stamp file.
#
mk/config.h.in: mk/stamp-h.in
mk/stamp-h.in: configure.in
autoheader
echo timestamp > mk/stamp-h.in
mk/config.h: mk/stamp-h
mk/stamp-h: mk/config.h.in config.status
./config.status
config.status: configure
./config.status --recheck
.PHONY: config
config: config.status
@:
This diff is collapsed.
# Instructions for configuring an fptools package.
#
# There are two ways you can get started with an fptools package, either
# by using the unpacked distribution tree in-situ or by installing the
# package.
#
# Using the package directly is easy, just do `make config', i.e.,
# the distribution will *not* work out-of-the-box, you'll have to do
# this first.
#
# To install the package, you'll have to set one or more of the
# following variables:
#
# * bindir
# path to directory of where you want the executables
# to be installed.
# * libdir
# where you want the library archives to go.
# Note, if you specify /usr/foo/lib for libdir,
# the library files for your fptools package will be
# installed in /usr/foo/lib/<package>-<version>, i.e.,
# /usr/foo/lib/ghc-2.02. If you don't want the package/version
# directory appended, you'll have to modify $(real_libdir)
# below.
#
# * datadir
# path to where the platform-independent files will go.
# As for libdir, the effective path for the platform-indep
# stuff is $(datadir)/<package>-<version>. If you want
# complete control, see $(real_libdir)
#
# * platform
# the platform you're installing for. The configure
# makes an educated guess what it, so you will only
# have to set this if it clashes with your reality.
#
# * infodir
# where to install the Emacs info files
# * htmldir
# where to install the documentation HTML files.
# * dvidir
# where to install the DVI files.
#
# Installing the documentation is not via the `install' rule, but
# via the rules: `install-docs', `install-html', `install-dvi'
# and `install-info'.
#
# For more complete instructions, consult the INSTALL file
# that came with the bundle, and/or consult the installation
# documentation in one of the document directories.
#
bindir = @bindir@
libdir = @libdir@
datadir = @datadir@
platform = @platform@
infodir = @infodir@
htmldir = @htmldir@
dvidir = @dvidir@
#
# Putting the package stuff in package-specific
# directories:
#
real_libdir = $(libdir)/$(package)-$(version)
real_datadir = $(datadir)/$(package)-$(version)
package = ghc
version = 2.02
PERL = @PerlCmd@
.PHONY: config install install-dirs
config:
@echo Configuring $(package), version $(version), on $(platform)
@RM `pwd`/bin/$(platform)/$(package)-$(version)/$(package)-$(version)
@RM `pwd`/bin/$(platform)/$(package)-$(version)/$(package)
@echo $(PerlCmd) > `pwd`/bin/$(platform)/$(package)
@echo "$""bindir='"`pwd`"/bin/$(platform)/$(package)-$(version)';" >> `pwd`/bin/$(platform)/$(package)-$(version)/$(package)
@echo "$""libdir='"`pwd`"/lib/$(platform)/$(package)-$(version)';" >> `pwd`/bin/$(platform)/$(package)-$(version)/$(package)
@echo "$""datadir='"`pwd`"/share/$(platform)/$(package)-$(version)';" >> `pwd`/bin/$(platform)/$(package)-$(version)/$(package)
@cat `pwd`/bin/$(platform)/$(package)-$(version)/$(package).prl';" >> `pwd`/bin/$(platform)/$(package)-$(version)/$(package)
@(cd `pwd`/bin/$(platform)/$(package)-$(version); $(LN_S) $(package) $(package)-$(version) )
@echo Finished..to use, add `pwd`/bin/$(platform)/$(package)-$(version) to your PATH.
libdirs = . imports include
datadirs = . include
install-dirs:
$(MKDIRHIER) $(bindir)
@for i in $(libdirs) ; do \
echo (MKDIRHIER) $(real_libdir)/$$i; \
(MKDIRHIER) $(real_libdir)/$$i; \
done;
@for i in $(datadirs) ; do \
echo (MKDIRHIER) $(real_datadir)/$$i; \
(MKDIRHIER) $(real_datadir)/$$i; \
done;
install : install-dirs
install :
$(INSTALL_PROGRAM) `pwd`/bin/$(platform)/$(package)-$(version)/* $(bindir)
@for i in $(libdirs); do \
echo $(INSTALL) `pwd`/lib/$(platform)/$(package)-$(version)/$$i/* $(real_libdir)/$$i; \
$(INSTALL) `pwd`/lib/$(platform)/$(package)-$(version)/$$i/* $(real_libdir)/$$i; \
done;
@for i in $(datadirs); do \
echo $(INSTALL) `pwd`/share/$(package)-$(version)/$$i/* $(real_datadir)/$$i; \
$(INSTALL) `pwd`/share/$(package)-$(version)/$$i/* $(real_datadir)/$$i; \
done;
install-docs : install-info install-html install-dvi
install-dirs-html:
$(MKDIRHIER) $(htmldir)
install-dirs-info:
$(MKDIRHIER) $(infodir)
install-dirs-dvi:
$(MKDIRHIER) $(dvidir)
install-docs : install-html install-info install-dvi
install-dvi: install-dirs-dvi
$(INSTALL) `pwd`/dvi/$(package)-$(version)/* $(dvidir)
install-info: install-dirs-info
$(INSTALL) `pwd`/info/$(package)-$(version)/* $(infodir)
install-html: install-dirs-html
$(INSTALL) `pwd`/html/$(package)-$(version)/* $(htmldir)
dnl
dnl Binary distribution configure script
dnl
#!/bin/sh
#
AC_INIT(Makefile.in)
#
# First off, what system are we running under?
#
AC_CANONICAL_SYSTEM
dnl ** canonicalize platform names
# Canonicali[sz]e the platform name
TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
#
# The following will be more difficult when we *are* cross-compiling.
# Suitable names to slam in *_CPP are in platform.h.in.
# We also record the architecture, vendor, and operating system (OS)
# separately.
case $HostPlatform in
alpha-dec-osf[[1234]]*)
TargetPlatform=alpha-dec-osf1;;
hppa1.1-hp-hpux*)
TargetPlatform=hppa1.1-hp-hpux;;
i[[3456]]86-*-linuxaout*)
TargetPlatform=i386-unknown-linuxaout;;
i[[3456]]86-*-linux*)
TargetPlatform=i386-unknown-linux;;
i[[3456]]86-*-freebsd*)
TargetPlatform=i386-unknown-freebsd;;
i[[3456]]86-*-netbsd*)
TargetPlatform=i386-unknown-netbsd;;
i[[3456]]86-*-solaris2*)
TargetPlatform=i386-unknown-solaris2;;
i[[3456]]86-*-cygwin32*)
TargetPlatform=i386-unknown-cygwin32;;
m68k-next-nextstep2)
TargetPlatform=m68k-next-nextstep2;;
m68k-next-nextstep3)
TargetPlatform=m68k-next-nextstep3;;
i[[3456]]86-next-nextstep3)
TargetPlatform=i386-next-nextstep3
m68k-sun-sunos4*)
TargetPlatform=m68k-sun-sunos4 #hack
mips-dec-ultrix*)
TargetPlaformP=mips-dec-ultrix;;
mips-sgi-irix*)
TargetPlatform=mips-sgi-irix;;
powerpc-ibm-aix*)
TargetPlatform=powerpc-ibm-aix;;
sparc-sun-sunos4*)
TargetPlatform=sparc-sun-sunos4;;
sparc-sun-solaris2*)
TargetPlatform=sparc-sun-solaris2;;
*)
echo "Unrecognised platform: $TargetPlatform"
exit 1
;;
esac
echo "Which we'll canonicalise into: $TargetPlatform"
platform=$TargetPlatform
AC_SUBST(platform)
AC_CHECK_PROG(PerlCmd,perl,$ac_dir/$ac_word)
if test -z "$PerlCmd"; then
echo "You must install perl before you can continue"
echo "Perhaps it is already installed, but not in your PATH?"
exit 1
else
$PerlCmd -v >conftest.out 2>&1
if egrep "version 4" conftest.out >/dev/null 2>&1; then
if egrep "Patch level: 35" conftest.out >/dev/null 2>&1; then
echo "
************************************************************************
Uh-oh...looks like you have Perl 4.035.
Perl version 4.035 has a bug to do with recursion that will bite if
you run the lit2texi script, when making Info files from
literate files of various sorts. Either use the current version
(4.036), an older version (e.g., perl 4.019) or apply the patch in
glafp-utils/perl-4.035-fixes to your 4.035 perl.
************************************************************************
"
fi
else
if egrep "version 5" conftest.out >/dev/null 2>&1; then
:
else
echo "I'm not sure if your version of perl will work,"
echo "but it's worth a shot, eh?"
fi
fi
rm -fr conftest*
fi
#
dnl ** does #!.../perl work? (sometimes it's too long...)
echo "checking if \`#!$PerlCmd' works in shell scripts"
echo "#!$PerlCmd"'
exit $1;
' > conftest
chmod u+x conftest
(SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
if test $? -ne 69; then
echo "It does!"
else
echo "It doesn't! Perhaps \`#!$PerlCmd' is too long (often 32 characters max)"
exit 1
fi
rm -f conftest
#
dnl ** check if perl library is properly installed
# (by seeing if a "do 'getopts.pl'" works...
if $PerlCmd -e 'do "getopts.pl" || exit(1); exit(0);' > /dev/null 2>&1 ; then
:
else
echo "I think your perl library is misinstalled."
echo "The following script did not work:"
echo ' do "getopts.pl" || exit(1); exit(0);'
exit 1
fi
dnl ** figure out how to do a BSD-ish install
#
AC_PROG_INSTALL
#
AC_OUTPUT(Makefile)
TOP = ..
include $(TOP)/mk/boilerplate.mk
DOC_SRCS = installing.lit release.lit
SRC_TEXI2HTML_OPTS += -number -monolithic -invisible xbm
include $(TOP)/mk/target.mk
This diff is collapsed.
This directory contains contributed software/bits related to the
Glasgow Haskell compiler.
fptags Denis Howe <dbh@doc.ic.ac.uk>
Bourne-shell script.
Create an emacs TAGS file for one or more functional programs.
haskell-modes/ A collection of all known "Haskell modes" for GNU Emacs.
haskel.gif Provided by Lennart Augustsson <augustss@cs.chalmers.se>
haskell_poem Speaks for itself.
mira2hs Denis Howe <dbh@doc.ic.ac.uk>
Bourne-shell script.
Convert Miranda code to Haskell, more-or-less.
pphs Pretty-print Haskell code in LaTeX documents. Written by
Andrew Preece while a student at Glasgow.
#!/bin/sh
#fptags - Create an emacs tags file for functional programs
#Please send me a copy of any modifications you make.
#Denis Howe <dbh@doc.ic.ac.uk>
#0.00 20-Sep-1991 created
#0.01 09-Apr-1992 don't count ==, <=, >= as definition
#0.02 09-Feb-1994 fix bug in fix 0.01. Add /=.
# partain: got it from wombat.doc.ic.ac.uk:pub
#The algorithm for spotting identifiers is crude to the point of
#vulgarity. Any line containing an = is assumed to define an
#identifier. If there are no non-white characters before the = then