= Suggestions for projects related to GHC =
Here are some suggestions for projects related to GHC that could be undertaken by an intern or undergraduate project student. There are also lots of ideas in
* GHC's [query:"status!=closed&type=task&order=priority" task list]
* GHC's [query:"status!=closed&type=feature request&order=priority" feature request list]
-------------
== Projects that should be within reach of a good undergraduate ==
* '''Implement overlap and exhaustiveness checking for pattern matching'''. GHC's current overlap and exhaustiveness checker is old and inadequate. Furthermore, it takes no account of GADTs and type families. See #595 and #2395. There's an excellent selection of background material:
* [http://pauillac.inria.fr/~maranget/papers/warn/warn.pdf Warnings for pattern matching] by Luc Maranget (JFP 17(3), 2007)
* [http://www.cs.cmu.edu/~neelk/pattern-popl09.pdf Focusing on pattern matching] by Neelakantan Krishnaswami (POPL 2009)
* [http://pauillac.inria.fr/~maranget/papers/ml05e-maranget.pdf Compiling pattern matching to good decision trees] by Luc Maranget, ML Workshop 2008
* '''Improve parallel profiling tools'''. Starting with [http://research.microsoft.com/en-us/projects/threadscope/ ThreadScope], incorporate performance-counter events, visualise more runtime events, include source-code information in the profile.
* '''Implement some low-level C-- optimisations'''. During 2011 we expect to have the new C-- code generation route in place, and that will open up new opportunities for doing classic compiler-course optimisations on the imperative C-- code. There is more than routine stuff here, because we can use our [http://research.microsoft.com/~simonpj/papers/c-- generic dataflow framework] to do the heavy lifting. Here are some [wiki:BackEndNotes particular ideas for optimisations] we'd like to implement.
-------------
== More ambitious or less-well-defined projects (PhD students / Interns) ==
=== Programming environment and tools ===
* Maintaining an explicit call stack [wiki:ExplicitCallStack]
=== Turning GHC into a platform ===
Projects aimed at making GHC into a user-extensible plug-in platform, and less of a monolithic compiler.
* '''Allow much finer and more modular control over the way in which rewrite rules and inlining directives are ordered'''. See this [http://www.haskell.org/pipermail/haskell-cafe/2008-January/038196.html email thread]
=== Types ===
* '''Allow unboxed tuples as function arguments'''. Currently unboxed tuples are second class; fixing this would be a nice simplification.
* '''Extend kinds beyond * and k1->k2'''. With GADTs etc we clearly want to have kinds like `Nat`, so that advanced hackery at the type level can be done in a typed language; currently it's all effectively untyped. A neat approach would be to re-use any data type declaration as a kind declaration.
* '''Extensible constraint domains'''. Andrew Kennedy shows how to incorporate [http://research.microsoft.com/~akenn/units/index.html dimensional analysis] into an ML-like type system. Maybe we could do an extensible version of this, so that it wasn't restricted to dimensions. Integer arithmetic is another obvious domain.
* [[TicketQuery(id=788|0)]]
* [[TicketQuery(id=1872|0)]]
=== Runtime system ===
* Incremental or concurrent GC, for reducing pause-times. Perhaps via implementing mark-region GC in the old generation.
=== Packages ===
* A package API tool.
* fixed package ABIs for binary-upgradable packages.
-------------
= Just Hacking =
Projects for people who want a decent-sized hacking project, with less research content.
== Compiler ==
* [[TicketQuery(id=602|0)]]
* Whole-program dead-code detection (with {{{--make}}}).
* Whole-program overloading elimination (with {{{--make}}}).
* Evolve a better ordering for the optimisation passes using [http://www.coyotegulch.com/products/acovea/ Acovea].
* [[TicketQuery(id=1341|0)]]
* [[TicketQuery(id=2979|0)]]
* [[TicketQuery(id=1884|0)]]
* [[TicketQuery(id=910|0)]]
* [[TicketQuery(id=4929|0)]]
== Build system ==
* [[TicketQuery(id=989|0)]]
== Runtime system ==
* [[TicketQuery(id=599|0)]]
* [[TicketQuery(id=603|0)]]
== Tools ==
* Update/improve [http://www.haskell.org/visualhaskell Visual Haskell] to use the (free) [http://msdn2.microsoft.com/en-us/vsx2008/products/bb933751.aspx Visual Studio Shell].