Download
Ehc
Date/timestamp of current release:
20120928 15:23
Download & use (install) EHC
- The current version of all compiler versions can be downloaded as a tgz file; in the following it assumed that <dist-dir> is the top directory of the distribution.
- New versions appear whenever a stable point in the development has been reached.
- The current development version can be directly checked out from the subversion repository. Please contact me if you wish to have write access and contribute. Currently, the distribution contains prebuilt documentation in pdf format, whereas the version from svn archive does not (building the doc requires the presence of additional LaTeX? styles).
- Requires GHC6.4 and the Haskell Utrecht Tools .
- There is no such thing as a EHC installation, because EHC consists of multiple compilers. However, the tools required to build these compilers can by copied to a suitable location (e.g. /usr/local/bin). The built executables for the tools are located in <dist-dir>/bin; executables for the compilers are located in <dist-dir>/bin/<n>, where <n> is the compiler version.
- Unpack the EHC distribution, creating a directory <dist-dir> of the form <dist-date>-ehc-<dist-name>
- cd <dist-dir>
- ./configure
- (for now) check and if necessary further adapt mk/config.mk.
- Type 'make' for an explanation of what can be made, for example:
- EHC version 1 is constructed by: make bin/1/ehc
- Run regression test on .eh files from <dist-dir>/test (only when previous test results are available, included in the downloadable distribution) by: make test-regress VERSIONS="1"
- Type 'bin/<n>/ehc --help' for help on commandline invocation.
Download & install Ruler
- Ruler is part of the EHC distribution, it will be automatically build as part of the construction of any ehc. If it is necessary to build the tool separately, follow the next instructions.
- Installation:
- Unpack the EHC distribution (see above)
- cd <dist-dir>/src/ruler2
- Follow the instructions in the README file in that directory (or type 'make' for explanation)
- See the demo subdirectory for a larger example. Ruler is also used to construct a major part of EHC.
Documentation
- Ruler documentation is under construction. The unfinished version can be downloaded here, or follow the links on EHC's homepage.
- Shuffle documentation is outdated (it describes a subset of the current features), but still gives an impression of its capabilities.
- The most recent version of the PhD describing EHC.
What is currently implemented?
- Experimental features
-
- Explicit type signatures w.r.t. forall, exists and predicates
- Impredicativity (though not merged into main development trunk)
- Explicit passing of implicit parameters
- GRIN based backend
- Haskell(98 or later) implemented features
-
- Class system
- Extensible records
- Modules
- Haskell(98 or later) features, not yet fully implemented
-
- Functional dependencies for multiparameter type classes
- Foreign function interface only to make system work
- No deriving
- No default
- No type synonyms
- No data fields (update, pattern, construction)
- Patterns only for datatypes, not for literals
- No Integer, Float and Double
- No exceptions and threads
- No IO
- Haskell(98 or later) missing features, unlikely to be implemented
-
- Library, runtime and performance handicaps
-
- Backend via GRIN to C (gcc)
-
- Partial separate compilation because at some point GRIN backend performs full program analysis
- Lacking support for record update, extensible records. As these are used to build dictionaries for class instances as well, programs using classes type check but do not execute.
- Platform dependent tailcall assembly code (via configure script)
- Supported platforms:
- MacOSX 10.4 (PowerPC? )
- WinXP + Cygwin
- No proper runtime system, in particular no garbage collection, threads and exceptions
- Compiler driver does not invoke gcc/cpp
- No libraries
- No install
- Plans
-
- Fix the above
- Use GHC's libraries with minimal adaption
- Use/investigation of 3d party libraries:
- gmp (GNU multiple precision) for type Integer
- gc (Boehm's garbage collector)
- llvm (Low Level Virtual Machine) for the backend
$Id$
--
AtzeDijkstra - 19 Apr 2006