Popular Haskell Packages: Q1 2010 report

Here is some data on downloads of Haskell libraries and apps on Hackage, for the first quarter of 2010.

The Hackage dependency graph

Hackage is the central repository of open source Haskell libraries and tools. Once they install the Haskell Platform, users get more libraries from Hackage, via “cabal install”.

Headlines

March was the most popular month for Hackage ever. And we’re closing in on 2000 packages, and 2 million “cabal installs” in the next month or so.

Totals

Total cabal packages: 1976. (+ 256 in Q1).

Total contributing developers: 533

90 day moving average: 11.5 packages per day uploaded (up from 10.5).

Total downloads from Hackage 2007-present: 1.88 million (up 350k in Q1)

Downloads in March 2010: 145,752 (new monthly record)

Top of the Pops

The top 15 most popular libraries in the first quarter were:

  1. HTTP
  2. zlib
  3. parsec
  4. utf8-string
  5. binary
  6. QuickCheck
  7. network
  8. Cabal
  9. haskell-src-exts
  10. mtl
  11. regex-base
  12. uniplate
  13. regex-posix
  14. X11
  15. ghc-paths

Top 15 most popular applications in Q1:

  1. cabal-install
  2. xmonad
  3. cpphs
  4. haddock
  5. happy
  6. hscolour
  7. darcs
  8. alex
  9. pandoc
  10. hlint
  11. leksah
  12. yi
  13. agda
  14. texmath
  15. gitit

Honorable Mentions

  • The deepseq is in the top 20 packages of the year.
  • HaXml and HDBC remain the most popular xml and database libraries (though xml-light is closing in)
  • wxHaskell is rising up, as the only cabal-installable major gui library
  • vector and text are quickly rising as the preferred arrays and unicode libraries

You can read all the Q1 data for your favorite packages, and ranked by Q1 popularity.

And for non-Haskellers, how does your favourite open source community compare?

The 8 Most Important Haskell.org GSoC Projects

While at ZuriHac, Johan Tibell, David Anderson, Duncan Coutts and I discussed what the highest priority projects for the Haskell community are, in the context of the Google Summer of Code, for which Haskell.org is a mentoring organization for the 5th year.

Here’s our top 8 most important projects, that we would really like to see good applications for. Some of these have tickets already, but some don’t. If you apply to work on projects like those below, you can expect strong support from the mentors, which ultimately determines if you’ll be funded.

For details on what we think you need to consider when applying to execute a project, see this earlier post.

A Package Versioning Policy Checker

Cabal relies on package version ranges to determine what Haskell software to install on your system. Version numbers are essentially “hashes” of the API of the package, and should be computed according to the package versioning policy. However, package authors don’t have a tool to automatically determine what the version number change to their package should be, when they release a new version, leading to mistakes, and needless dependency breakages.

This project would construct a tool that would be able to compute the correct package version number, given a package and an API change. As an extension, it would warn about errors in version ranges in .cabal files.

“cabal test”

Proper test support is essential for good software quality. By improving Cabal’s test support we can test all Cabal packages on continuous build machines which should help us detect breakages earlier. Making it easier to run the tests means that more people will run them and those who already do will run the more often.

Fast text/bytestring HTML combinators

We have Data.Binary for fast serialization of data structures to byte strings to be sent over the wire. High performance web servers need fast HTML generation too, and an approach based on Text.PrettyPrint combinators for filling unicode-friendly Data.Text buffers would be a killer app for web content generation in Haskell. This might mean working on BlazeHTML.

Threadscope with custom probes

ThreadScope is an amazing new tool in the Haskell universe for monitoring executing Haskell processes. It reveals detailed information about thread and GC performance. We’d like to extend the tool with support for new kinds of event hooks. Examples would be watching for MVar locks, STM contention, IO events, and more.

Combine Threadscope with Heap Profiling Tools

ThreadScope lets us monitor thread execution. The Haskell Heap Profiler lets us monitor the Haskell heap live. HPC lets us monitor which code is execution and when. These should all be in an integrated tool for monitoring executing Haskell processes.

LLVM Performance Study

GHC has an LLVM backend. The next step is to look closely at the kind of code we’re generating to LLVM, and the optimizations LLVM performs on GHC’s code, in order to further improve performance of Haskell code.

LLVM Cross Compiler

LLVM has support for many new backends, such as ARM. The challenge is to use this ability to generate native code for other architectures to turn GHC into a cross-compiler (so we could produce, e.g. ARM executables on an x86/Linux box). This will involve linker and build system hacking.

Hackage 2.0 Web Services

Hackage is the central repository for Haskell code.  It hosts around 2000 libraries, and is growing rapidly. It can be hard to determine which packages to use. We believe social mechanisms (comments, voting, …) can be very succesful in helping to both improve the quality of Hackage, and make it easier for developers to know which library to use. This project would bring Hackage 2.0 to a deployable state, and then consider better interfaces to search and sort packages.

These are the 8 projects we felt were the most important to the community. What do you think? Are there other key projects that need to be done , that will benefit large parts of the community, or enable the use of Haskell in new areas of importance?