1 Post-Hackathon Report
This page is for listing what was done during the Hackathon. Please add a short description of what you worked on, with links to relevant blog posts, hackage packages, commits, etc.
1.1 fclabels 1.0 release
New release of the fclabels package. The new package has a lot of code and documentation cleanups, support for partial labels in the case of multi-constructor datatypes and is about 20x as fast for setting and modifying as the previous version. Thanks everyone for helping me out!
1.2 GHC and base library improvements
- Add primops for bit population count. These primops compile down to `POPCNT` instructions where available and fast fallbacks (implemented in C) otherwise.
- Add unchecked left and right bit shifts: The Data.Bits.shift method uses a branch to check if the shift amount is larger than the word size and returns 0 in these cases. This extra safety makes performance worse in bit twiddling code.
- Discussed unpacking of enums in GHC (not yet implemented).
- Discussed refactoring compiler/util/Digraph.lhs into a reusable graph combinator library, along with porting over hoopl's control-flow-graph traversals (not yet implemented).
- Optimise nested comparisons: started implementing (currently as a plugin) a new Core-to-Core pass.
1.3 Context synonym families
Started working on context synonym families and indexed context synonym families. We make this work by giving evidence the new kind Fact, and then allowing any type of kind Fact to appear on the left of a => arrow.
(Max Bolingbroke, Dominic Orchard and Nicolas Wu)
- use red text to report when we have a conflict (issue1681,patch646, Jeff Foster)
- support 'since' in English dates parser
- filter SSH output (issue845, Jeff Foster and Sebastian Korten)
- support arbitrary darcs command in darcs-test (Alexander Njemz)
- output ISO dates in darcs changes? (issue140, Alexander N, may be not a good idea)
- add a last regrets prompt to interactive patch selection (issue1920, patch655, Johannes Weiß)
- [in-progress] support removing changes in amend-record (issue1470, Johannes Weiß)
- A Snap-based web application that interacts with the COLE (see http://portal.acm.org/citation.cfm?id=1356080 and http://portal.acm.org/citation.cfm?id=1772965) framework for exploring compiler optimisation levels. The purpose of the web app is that collaborators can submit optimisation sequences to the COLE backend and retrieve the results when they are available after measuring.
- Git repository of the web application can be found at https://github.com/itkovian/hcole-server
1.7 GObject Introspection
- Work-in-progress binding generator for GObject-based libraries such as Gtk+ 3.
- Started switching to haskell-src-exts for code generation.
- Patches currently on the camhac branch on gitorious.
1.8 Snap Framework
- Snap 0.5.3 and 0.5.3.1 released!
- File upload code: replaced "openBinaryTempFile" with something less dumb (mkstemp) on unix, and fixed some iteratee cleanup problems using an MVar finalizer
- Removed the template haskell code from Data.Concurrent.HashMap in snap-server
- Some work has been done on the authentication Snaplet, including an (incomplete) HDBC backend for it. An early work-in-progress can be found here: https://github.com/norm2782/snap
- An example application which uses Snap 0.6 has been improved to use the authentication Snaplet. Another work-in-progress: https://github.com/norm2782/snap-guestbook
- Further benchmarking, bug fixing to support the UTF-8 port
- Progress can be found in the utf8 branch here
- The GSoC project is basically done, next up is writing a summary report of benchmark results and what advantages and disadvantages come with the port
- A "redneck naive" poker hand evaluator. Code is on github (https://github.com/fffej/HS-Poker). Hopefully intend to turn this into a poker bot playground for Haskell (Jeff / Sebastian)
- New version 1.1.0 uploaded to hackage, including support for more MPI implementations, bugfixes and general awesomness
- Upcoming Monad Reader would feature and article about parallel programming with MPI, written during the course of the hackathon (Dmitry Astapov)
Some work was done on setting up tests for HTTP. Additionally, some bugs were fixed, code was cleaned up, warnings removed and a start was made on improving the Network.Browser module.
1.13 EchoNest API
A very nascent API for accessing the EchoNest Music API http://developer.echonest.com/docs/v4/index.html . Coming to a GitHub server in the near future, as soon as it stops looking so ugly (Ian Knopke / Jose Calderon).
All the above packages got upgraded to the latest GHC, along with a few bug fixes (Derive now deals with singleton constructors with no fields, HLint now supports an ANSI CPP flag) (Neil Mitchell)
The current Hoogle parser for user queries is old, doesn't parse everything correctly, and in particular doesn't deal well with partial queries (when the user is still typing their search). We discussed lots of edge cases, and started implementing a new version (Jacek Generowicz, with guidance from Neil Mitchell)
The CmdArgs package lets you concisely specific command line arguments. I ported the package to GHC 7.2.1, did some cleanups, and fixed some bugs (you can now use Int64 etc). I then started working on two new features: 1) Given a CmdArgs program (such as Hoogle) you can specify you want to enter the arguments via a GUI hosted in the web browser. Currently the GUI is a simple textbox with realtime validation, but in future it will become a structured command line argument editor based on the options to your tool. 2) Adding automatic bash autocompletion - some of the work has been done, but the details are not yet finished. (Neil Mitchell)
1.17 Hackage server
Further refactoring work, simplification of HTTP basic/digest authentication code. Started work on serving package changelogs. Improvements to admin pages to make various features more discoverable (Duncan Coutts, Stefan Wehr, Ben Millwood).
Hackathon branch of the code is at (not all patches have been submitted yet):
1.18 Bittorrent DHT
Initial work on implementing BEP 0005 in Haskell. Some core data structures seem to be working (although untested) and I'm currently working on the protocol. I will probably merge this into Haskell Torrent when everything is working, but I intend to keep the library available separately as I see potential uses for the network other than Bittorrent. (Alex Horsman)
Hacked around a bit on the Haskel SSH Client. Work was started on making it able to do re-keying after the initial key exchange, but it is unfinished for now... (Bart Coppens)
1.21 Haskell Test Framework (HTF)
- New '--quiet' flag: only produces output for failing tests (FINISHED)
- Output a diff if an assertEqual fails (not yet finished)
1.22 Stack traces in GHC
I (Simon M.) was working on adding better support for source code annotations in GHC's Core language, and unifying the way we handle profiling cost centres, coverage annotations, and breakpoints in the GHCi debugger. I'm working on a new semantics for cost centre stacks, which will allow us to track call stacks at runtime. This will not only give us more accurate profiling, but also let us report stack traces on errors (e.g. head ), perhaps enabled by a compile-time option.
lots of various misc improvements: re-work records for more type safety, support for compression, initial support of version 1.2. (Vincent Hanquez)
1.24 Pattern Synonyms
Simon PJ, Simon M, and I (Lennart Augustsson) hashed out a design for pattern synonyms. I've barely begun implementation, so don't expect anything just yet.
1.25 Frequent Subgraph Algorithm
I (Stephen Lavelle) implemented the vSiGraM algorithm for searching for frequent vertex-disjoint subgraphs of large graphs. Doesn't really work for large graphs, though - 'tis quite slow right now.
Duncan Coutts and Johan Tibell reviewed my (Simon Meier) work on a lazy bytestring builder for the 'bytestring' library; based on blaze-builder. The API and implementation is now complete. Documentation is there, but needs lots of polishing. I also gave a talk on when and how to use the bytestring builder. The slides and example code are available from github.