Changes between Version 12 and Version 13 of Status/Oct13


Ignore:
Timestamp:
Oct 18, 2013 10:22:54 AM (6 months ago)
Author:
simonpj
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Status/Oct13

    v12 v13  
    1111== Source language and Type System == 
    1212 
    13  * **Type natural solver** - Iavor Diatchki implemented a basic constraint solver for the type naturals extension, meaning that GHC can now infer and understand basic identities such as `(x + 2) ~ 5`, which implies `x = 3`. 
     13 * **Type natural solver** - Iavor Diatchki implemented a basic constraint solver for the type naturals extension, meaning that GHC can now infer and understand basic identities such as `(x + 2) ~ 5`, which implies `x = 3`.  The constraint solver does only basic things for now; there is more to come. 
    1414 
    15  * **Closed type families** - Richard Eisenberg & co. have implemented support for ''closed'' type families in GHC, allowing you to write a type family where no instances can be made beyond the ones in the definition. This allows a host of new programs to be expressed, as we now know certain invariants can hold. For example, we may now write: 
     15 * **Closed type families** - Richard Eisenberg & co. have implemented support for ''closed'' type families in GHC, allowing you to write a type family where no instances can be made beyond the ones in the definition (wiki page [CTF-wiki] and paper [CTF-paper]). This allows a host of new programs to be expressed, as we now know certain invariants can hold. For example, we may now write: 
    1616{{{ 
    1717type family Flip p :: * 
     
    2222  to express that `Flip` may have no more instances written, meaning nefarious users can no longer write silly instances like `Flip Bool = Int`. 
    2323 
    24  * **Role support** - Richard Eisenberg implemented support for ''role checking'' in GHC, fixing a long standing bug where `GeneralizedNewtypeDeriving` could be used to derive unsafe instances for a `newtype`.  
     24 * **Role support** - Richard Eisenberg implemented support for ''role checking'' in GHC, fixing a long standing bug where `GeneralizedNewtypeDeriving` could be used to derive unsafe instances for a `newtype` (wiki [Roles-wiki] and paper [[http://research.microsoft.com/en-us/um/people/simonpj/papers/ext-f/ Roles-paper]]). 
    2525 
    2626 * **New and improved I/O manager** - Earlier this year, Andreas Voellmy and Kazu Yamamoto worked on a host of improvements to our I/O manager, making it scale significantly better on multicore machines. Since then, it's seen some other performance tweaks, and many bugfixes. As a result, the new I/O manager should scale linearly up to about 40 cores. Andreas reports their !McNettle Software-defined-network (SDN) implementation can now achieve over ''twenty million connections per second'', making it the fastest SDN implementation around - an incredible feat! 
     
    5858 * **Dynamic-by-default** - In 7.8, we're hoping to make GHCi use the system linker by default on supported platforms, eliminating a host of bugs in the current home-grown linker. Eventually we hope to remove the old linker completely. Until then, GHC now supports compiling files statically and dynamically at the same time (with the `-dynamic-too flag`,) meaning you can switch between static/dynamic builds much more easily. 
    5959 
    60  * **Compiler hooks** - Luite Stegeman and Edsko de Vries did a significant amount of work to improve ''hooking'' support in the GHC API. This new API makes it possible for users to plug in their own pipeline machinery to the compiler, suitable for implementing new frontend features (like QuasiQuoting hooks) or new backends (like a JavaScript target, as part of the new GHCJS.) 
     60 * **Compiler hooks** - Luite Stegeman and Edsko de Vries did a significant amount of work to improve ''hooking'' support in the GHC API. This new API makes it possible for users to plug in their own pipeline machinery to the compiler, suitable for implementing new frontend features (like !QuasiQuoting hooks) or new backends (like a !JavaScript target, as part of the new GHCJS.) 
    6161 
    6262 * **Parallel --make** - as part of the haskell.org 2013 GSoC, Patrick Palka implemented a new parallel compilation driver, a long-requested feature. This allows GHC to build multiple modules in parallel when using `--make` by adding a `-j` flag, while having almost no overhead in the single-threaded case. 
     
    8080 * **Pattern synonyms** - Gergo Erdi worked on an implementation of pattern synonyms for GHC, which will finally give us the power to abstract over patterns and give them names. While the design is not final (see the wiki for details[PS]), the results look promising, and hopefully fix a long-standing 'abstraction hole' in the term language for Haskell. 
    8181 
    82  * **Explicit Type Application** - Stephanie Weirich, Richard Eisenburg and Hamidhasan Ahmed have been working on adding explicit type applications to GHC. This allows the programmer to specify the *types* that should be instantiated for arguments to a function application, where normally they would be inferred. While this capability already exists in FC-pro (indeed, every FC-pro program has function application with explicitly applied types,) it has not been available in Haskell itself. While a lot of the syntax and design is not quite final, there are some details about the design available on the wiki[TA]. 
     82 * **Explicit Type Application** - Stephanie Weirich, Richard Eisenburg and Hamidhasan Ahmed have been working on adding explicit type applications to GHC. This allows the programmer to specify the ''types'' that should be instantiated for arguments to a function application, where normally they would be inferred. While this capability already exists in GHC's internal language, System FC -- indeed, every FC-pro program has function application with explicitly applied types -- it has not been available in Haskell itself. While a lot of the syntax and design is not quite final, there are some details about the design available on the wiki [TA]. 
    8383 
    8484 * **Git management changes** - For a long time, GHC has used a loosely coupled set of repositories during development. However, as we've added more contributors, this practice has become increasingly problematic, preventing us from using useful tools like `git bisect` to track down bugs. Our plans after the 7.8 release are to sort this out, and hopefully have stable, reproducible GHC builds for all. 
     
    108108= References = 
    109109 
     110[CTF-wiki] Closed type families with overlapping equations - http://ghc.haskell.org/trac/ghc/wiki/NewAxioms 
     111[CTF-paper] Closed type families with overlapping equations, Richard Eisenberg, Dimitrios Vytiniotis, Simon Peyton Jones, Stephanie Weirich, POPL 2014 - http://research.microsoft.com/en-us/um/people/simonpj/papers/ext-f/ 
     112[KD] Kinds without Data - http://ghc.haskell.org/trac/ghc/wiki/GhcKinds/KindsWithoutData [[br]] 
    110113[NewTH1] Runtime codegen with typed Template Haskell - http://gmainland.blogspot.com/2013/05/type-safe-runtime-code-generation-with.html [[br]] 
    111114[NewTH2] Major proposed Template Haskell revision - http://ghc.haskell.org/trac/ghc/wiki/TemplateHaskell/BlogPostChanges [[br]] 
    112115[PrimBool] New comparison primitives - http://ghc.haskell.org/trac/ghc/wiki/PrimBool [[br]] 
    113 [KD] Kinds without Data - http://ghc.haskell.org/trac/ghc/wiki/GhcKinds/KindsWithoutData [[br]] 
    114116[ORF] Overloaded record fields - http://ghc.haskell.org/trac/ghc/wiki/Records/OverloadedRecordFields/Plan [[br]] 
    115117[PS] Pattern synonyms - http://ghc.haskell.org/trac/ghc/wiki/PatternSynonyms [[br]] 
     118[Roles-wiki] Roles - http://ghc.haskell.org/trac/ghc/wiki/Roles 
     119[Roles-paper] Generative Type Abstraction and Type-level Computation, Stephanie Wirich, Dimitrios Vytiniotis, Simon Peyton Jones, and Steve Zdancewic, POPL 2011 - http://research.microsoft.com/en-us/um/people/simonpj/papers/ext-f/ 
    116120[TA] Explicit type application - http://ghc.haskell.org/trac/ghc/wiki/ExplicitTypeApplication [[br]]