Changes between Version 7 and Version 8 of Status/May13


Ignore:
Timestamp:
Apr 15, 2013 3:03:33 AM (12 months ago)
Author:
simonmar
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Status/May13

    v7 v8  
    2222  * overlapping type families ['''Richard Eisenberg'''] 
    2323 
    24   * the new code generator ['''Simon Marlow'''] 
     24  * '''The new code generator.''' [entry copied from Oct 2012 status report] Several years since this project was started, the new code generator is finally working  [14], and is now switched on by default in `master`.  It will be in GHC 7.8.1.  From a user's perspective there should be very little difference, though some programs will be faster. 
     25 
     26 There are three important improvements in the generated code.  One is that `let-no-escape` functions are now compiled much more efficiently: a recursive `let-no-escape` now turns into a real loop in C--.  The second improvement is that global registers (R1, R2, etc.) are now available for the register allocator to use within a function, provided they aren't in use for argument passing.  This means that there are more registers available for complex code sequences.  The third improvement is that we have a new sinking pass that replaces the old "mini-inliner" from the native code generator, and is capable of optimisations that the old pass couldn't do. 
     27 
     28 Hand-written C-- code can now be written in a higher-level style with real function calls, and most of the hand-written C-- code in the RTS has been converted into the new style.  High-level C-- does not mention global registers such as R1 explicitly, nor does it manipulate the stack; all this is handled by the C-- code generator in GHC.  This is more robust and simpler, and means that we no longer need a special calling-convention for primops - they now use the same calling convention as ordinary Haskell functions. 
     29 
     30 We're interested in hearing about both performance improvements and regressions due to the new code generator. 
    2531 
    2632  * support for vector (SSE/AVX) instructions ['''Geoffrey Mainland'''] 
    2733 
    28   * Scheduler changes to the RTS to improve latency ['''Simon Marlow'''] 
     34  * The new parallel I/O manager ['''Andreas Voellmy'''] 
    2935 
    3036  * '''Dynamic ghci.''' Ian Lynagh has changed GHCi to use dynamic libraries rather than static libraries. This means that we are now able to use the system linker to load packages, rather than having to implement our own linker. From the user's point of view, that means that a number of long-standing bugs in GHCi will be fixed, and it also reduces the amount of work needed to get a fully functional GHC port to a new platform. Currently, on Windows GHCi still uses static libraries, but we hope to have dynamic libraries working on Windows too by the time we release.