/
ehc.html
143 lines (143 loc) · 7.71 KB
/
ehc.html
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head> <meta name="generator" content="HTML Tidy for Mac OS X (vers 12 April 2005), see www.w3.org"> <title>EHC - Essential Haskell Compiler</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><style type="text/css"><!--.style4 {font-size: xx-large}.style6 {font-size: small}--></style></head><body> <h2 class="style1">Download & use (install) EHC</h2> <ul> <li>The current version of all compiler versions can be downloaded as a <a href="current-ehc-src.tgz">tgz</a> file; in the following it assumed that <dist-dir> is the top directory of the distribution. <ul> <li>New versions appear whenever a stable point in the development has been reached.</li> <li>The current development version can be directly checked out from the <a href="https://svn.cs.uu.nl:12443/repoman/info/EHC">subversion repository</a>. Please contact [[Atze.WebHome][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).</li> <li>Requires <a href="http://www.haskell.org/ghc/">GHC6.4</a> and the <a href="http://www.cs.uu.nl/wiki/HUT/WebHome">Haskell Utrecht Tools</a> .</li> </ul> </li> <li>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. <ol> <li>Unpack the EHC distribution, creating a directory <dist-dir> of the form <dist-date>-ehc-<dist-name></li> <li>cd <dist-dir></li> <li>./configure</li> <li>(for now) check and if necessary further adapt mk/config.mk.</li> <li>Type 'make' for an explanation of what can be made, for example: <ul> <li>EHC version 1 is constructed by: make bin/1/ehc</li> <li>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"</li> </ul> </li> <li>Type 'bin/<n>/ehc --help' for help on commandline invocation.</li> </ol> </li> </ul> <h2>Download & install Ruler</h2> <ul> <li>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.</li> <li>Installation: <ol> <li>Unpack the EHC distribution (see above)</li> <li>cd <dist-dir>/src/ruler2</li> <li>Follow the instructions in the README file in that directory (or type 'make' for explanation)</li> <li>See the demo subdirectory for a larger example. Ruler is also used to construct a major part of EHC.</li> </ol> </li> </ul> <h2>Documentation</h2> <ul> <li>Ruler documentation is under construction. The unfinished version can be downloaded <a href="ruler-doc.pdf">here</a>, or follow the links on <a href="http://www.cs.uu.nl/wiki/Ehc/WebHome">EHC's homepage</a>.</li> <li><a href="shuffle-doc.pdf">Shuffle</a> documentation is outdated (it describes a subset of the current features), but still gives an impression of its capabilities.</li> <li>The <a href="ehc-book.pdf">most recent version</a> of the !PhD describing EHC.</li> </ul> <h2>What is currently implemented?</h2> <ul> <li>Experimental features</li> <li style="list-style: none"> <ul> <li>Explicit type signatures w.r.t. forall, exists and predicates</li> <li>Impredicativity (though not merged into main development trunk)</li> <li>Explicit passing of implicit parameters</li> <li><a href="http://www.cs.chalmers.se/~boquist/phd/">GRIN</a> based backend</li> </ul> </li> <li>Haskell(98 or later) implemented features</li> <li style="list-style: none"> <ul> <li>Class system</li> <li>Extensible records</li> <li>Modules</li> </ul> </li> <li>Haskell(98 or later) features, not yet fully implemented</li> <li style="list-style: none"> <ul> <li>Functional dependencies for multiparameter type classes</li> <li>Foreign function interface only to make system work</li> <li>No <tt>deriving</tt></li> <li>No <tt>default</tt></li> <li>No type synonyms</li> <li>No <tt>data</tt> fields (update, pattern, construction)</li> <li>Patterns only for datatypes, not for literals</li> <li>No <tt>Integer</tt>, <tt>Float</tt> and <tt>Double</tt></li> <li>No exceptions and threads</li> <li>No IO</li> </ul> </li> <li>Haskell(98 or later) missing features, unlikely to be implemented</li> <li style="list-style: none"> <ul> <li>n+k patterns</li> </ul> </li> <li>Library, runtime and performance handicaps</li> <li style="list-style: none"> <ul> <li>Backend via GRIN to C (gcc)</li> <li style="list-style: none"> <ul> <li>Partial separate compilation because at some point GRIN backend performs full program analysis</li> <li>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.</li> </ul> </li> <li>Platform dependent tailcall assembly code (via configure script)</li> <li>Supported platforms: <ul> <li>MacOSX 10.4 (PowerPC)</li> <li>WinXP + Cygwin</li> </ul> </li> <li>No proper runtime system, in particular no garbage collection, threads and exceptions</li> <li>Compiler driver does not invoke gcc/cpp</li> <li>No libraries</li> <li>No install</li> </ul> </li> <li>Plans</li> <li style="list-style: none"> <ul> <li>Fix the above</li> <li>Use <a href="http://www.haskell.org/ghc/">GHC</a>'s libraries with minimal adaption</li> <li>Use/investigation of 3d party libraries: <ul> <li><a href="http://www.swox.com/gmp/">gmp</a> (GNU multiple precision) for type <tt>Integer</tt></li> <li><a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">gc</a> (Boehm's garbage collector)</li> <li><a href="http://llvm.org/">llvm</a> (Low Level Virtual Machine) for the backend</li> </ul> </li> </ul> </li> </ul> <br> <hr> <pre>$Id$</pre></body></html>