Re: GHCi can't see 'atexit', can't load module
I just checked it seems not to be possible to load any module in GHCi that uses FFI to wrap the standard C function 'atexit'. (...) A simple workaround is to just compile the module. (...) If I build a package (using cabal etc.) and try to load such package with 'ghci -package name' the problem persists. But, of course, there are many workarounds. Since I don't see this problem with other functions, and I see no reason for this to happen, I imagine this is a small bug. If it's not, I'll just remove 'atexit' from packages I have on hackage. Thanks, Maurício ___ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Re: Plans for GHC 6.12.1: release candidate 14 September 2009
On Fri, Aug 21, 2009 at 04:34:24PM -0400, Ravi Nanavati wrote: Hypothetically speaking (since I haven't made the call yet), if I wanted to be an early adopter of 6.12.1 when it is released, would now would be the time to start grabbing HEAD and playing with it There are currently some known problems with make install, so I would recommend waiting for the RC to be announced. Thanks Ian ___ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Libraries in the repo
Simon and I have been chatting about how we accommodate libraries in the GHC repository. After previous discussion on this list, GHC has been gradually migrating towards having snapshots of libraries kept as tarballs in the repo (currently only time falls into this category), but I don't think we really evaluated the alternatives properly. Here's an attempt to do that, and to my mind the outcome is different: we really want to stick to having all libraries as separate repositories. Background: * Scope: libraries that are needed to build GHC itself (aka boot libraries) * Boot libraries are of several kinds: - INDEPENDENT: Independently maintained (e.g. time, haskeline) - COUPLED: Tightly coupled to GHC, but used by others (base) - SPECIFIC: Totally specific to GHC (e.g. template-haskell, DPH) * Most boot libraries are INDEPENDENT. INDEPENDENT libraries have a master repository somewhere separate from the GHC repositories. * We need a branch of INDEPENDENT libraries, so that GHC builds don't break when the upstream package is modified. * Sometimes we want to make local modifications to INDEPENDENT libraries: - when GHC adds a new warning, we need to fix instances of the warning in the library to keep the GHC build warning-free. - to check that the changes work, before pushing upstream Choices for how we deal with libraries in the GHC repository: (+) is a pro, (-) is a con. (1) Check out the library from a separate repo, using the darcs-all script. The repo may either be a GHC-specific branch [INDEPENDENT], or the master copy of the package [SPECIFIC/COUPLED]. (+) we can treat every library this way, which gives a consistent story. Consistency is good for developers. (+) [INDEPENDENT] makes it easy to push changes upstream and sync with the upstream repo (unless upstream is using a different VCS). (-) [INDEPENDENT] we have to be careful not to let our branches get too far out of sync with upstream, and we must sync before releasing GHC. (2) Put a snapshot tarball of the library in libraries/tarballs, but allow you to checkout the darcs repo instead. (-) [SPECIFIC/COUPLED] this approach doesn't really make sense, because we expect to be modifying the library often. (-) updating the snapshot is awkward (-) workflow for making a change to the library is awkward: - checkout the darcs repo - make the change, validate it - push the change upstream (bump version?) - make a new snapshot tarball - commit the new snapshot to the GHC repo. (-) having tarballs in the repository is ugly (-) we have no revision history of the library (3) The GHC repo *itself* contains every library unpacked in the tree. You are allowed to check out the darcs repo instead. (+) atomic commits to both the library and GHC. (+) doing this consistently would allow us to remove darcs-all, giving a nice easy development workflow (-) [INDEPENDENT/COUPLED] still need a separate darcs repo. (-) [INDEPENDENT/COUPLED] pushing changes upstream is hard (-) [INDEPENDENT/COUPLED] manual syncing with upstream (-) [COUPLED] (particularly base) syncing with upstream would be painful. (3) works best for SPECIFIC libraries, whereas (1) works best for INDEPENDENT/COUPLED libraries. If we want to treat all libraries the same, then the only real option is (1). Experience with Cabal and bytestring has shown that (1) can work for INDPENDENT libraries, but only if we're careful not to get too out-of-sync (as we did with bytestring). In the case of Cabal, we never have local changes in our branch that aren't in Cabal HEAD, and that works well. Comments/thoughts? Cheers, Simon ___ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Re: Libraries in the repo
On Wed, Aug 26, 2009 at 9:15 AM, Simon Marlowmarlo...@gmail.com wrote: Simon and I have been chatting about how we accommodate libraries in the GHC repository. After previous discussion on this list, GHC has been gradually migrating towards having snapshots of libraries kept as tarballs in the repo (currently only time falls into this category), but I don't think we really evaluated the alternatives properly. Here's an attempt to do that, and to my mind the outcome is different: we really want to stick to having all libraries as separate repositories. Background: * Scope: libraries that are needed to build GHC itself (aka boot libraries) * Boot libraries are of several kinds: - INDEPENDENT: Independently maintained (e.g. time, haskeline) - COUPLED: Tightly coupled to GHC, but used by others (base) - SPECIFIC: Totally specific to GHC (e.g. template-haskell, DPH) Choices for how we deal with libraries in the GHC repository: (+) is a pro, (-) is a con. (1) Check out the library from a separate repo, using the darcs-all script. The repo may either be a GHC-specific branch [INDEPENDENT], or the master copy of the package [SPECIFIC/COUPLED]. (2) Put a snapshot tarball of the library in libraries/tarballs, but allow you to checkout the darcs repo instead. (3) The GHC repo *itself* contains every library unpacked in the tree. You are allowed to check out the darcs repo instead. (3) works best for SPECIFIC libraries, whereas (1) works best for INDEPENDENT/COUPLED libraries. If we want to treat all libraries the same, then the only real option is (1). Agreed. Also, it seems odd to have template-haskell be built-in yet something so fundamental as base be a separate repo. Experience with Cabal and bytestring has shown that (1) can work for INDPENDENT libraries, but only if we're careful not to get too out-of-sync (as we did with bytestring). In the case of Cabal, we never have local changes in our branch that aren't in Cabal HEAD, and that works well. Comments/thoughts? I also would rather stay with (1). Although using a DVCS allows greater freedom for developers, it also creates the need for more explicit rules of process. So I propose codifying on the wiki that for certain libraries, the local ghc repo - Never has patches which are not in the library's HEAD - Pulls patches sparingly, and usually only after a tagged release of the library. (the darcs-all script could help double-check that the former is being obeyed.) We package admins would need to agree to be responsive to patch submissions from GHC devels (or grant push access to them). Thanks for your very helpful analysis, -Judah ___ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Re: Libraries in the repo
On Wed, 2009-08-26 at 17:15 +0100, Simon Marlow wrote: * Sometimes we want to make local modifications to INDEPENDENT libraries: - when GHC adds a new warning, we need to fix instances of the warning in the library to keep the GHC build warning-free. I have to say I think this one is rather dubious. What is wrong with just allowing warnings in these independent libs until they get fixed upstream? I know ghc's build system sets -Werror on them, but I don't see that as essential, especially for new warnings added in ghc head. Experience with Cabal and bytestring has shown that (1) can work for INDPENDENT libraries, but only if we're careful not to get too out-of-sync (as we did with bytestring). In the case of Cabal, we never have local changes in our branch that aren't in Cabal HEAD, and that works well. It requires an attentive maintainer to notice when people forget to push upstream (as they inevitably do on occasion). If it goes unnoticed for too long then ghc ends up with a forked repo that cannot sanely be synced from the upstream repo (like bytestring). I suggest if we stick with the independent repo approach that we have some automation to check that changes are indeed getting pushed upstream. Duncan ___ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Re: Libraries in the repo
marlowsd: Simon and I have been chatting about how we accommodate libraries in the GHC repository. After previous discussion on this list, GHC has been gradually migrating towards having snapshots of libraries kept as tarballs in the repo (currently only time falls into this category), but I don't think we really evaluated the alternatives properly. Here's an attempt to do that, and to my mind the outcome is different: we really want to stick to having all libraries as separate repositories. Background: * Scope: libraries that are needed to build GHC itself (aka boot libraries) * Boot libraries are of several kinds: - INDEPENDENT: Independently maintained (e.g. time, haskeline) - COUPLED: Tightly coupled to GHC, but used by others (base) - SPECIFIC: Totally specific to GHC (e.g. template-haskell, DPH) * Most boot libraries are INDEPENDENT. INDEPENDENT libraries have a master repository somewhere separate from the GHC repositories. * We need a branch of INDEPENDENT libraries, so that GHC builds don't break when the upstream package is modified. * Sometimes we want to make local modifications to INDEPENDENT libraries: - when GHC adds a new warning, we need to fix instances of the warning in the library to keep the GHC build warning-free. - to check that the changes work, before pushing upstream Choices for how we deal with libraries in the GHC repository: (+) is a pro, (-) is a con. (1) Check out the library from a separate repo, using the darcs-all script. The repo may either be a GHC-specific branch [INDEPENDENT], or the master copy of the package [SPECIFIC/COUPLED]. (+) we can treat every library this way, which gives a consistent story. Consistency is good for developers. (+) [INDEPENDENT] makes it easy to push changes upstream and sync with the upstream repo (unless upstream is using a different VCS). (-) [INDEPENDENT] we have to be careful not to let our branches get too far out of sync with upstream, and we must sync before releasing GHC. (2) Put a snapshot tarball of the library in libraries/tarballs, but allow you to checkout the darcs repo instead. (-) [SPECIFIC/COUPLED] this approach doesn't really make sense, because we expect to be modifying the library often. (-) updating the snapshot is awkward (-) workflow for making a change to the library is awkward: - checkout the darcs repo - make the change, validate it - push the change upstream (bump version?) - make a new snapshot tarball - commit the new snapshot to the GHC repo. (-) having tarballs in the repository is ugly (-) we have no revision history of the library (3) The GHC repo *itself* contains every library unpacked in the tree. You are allowed to check out the darcs repo instead. (+) atomic commits to both the library and GHC. (+) doing this consistently would allow us to remove darcs-all, giving a nice easy development workflow (-) [INDEPENDENT/COUPLED] still need a separate darcs repo. (-) [INDEPENDENT/COUPLED] pushing changes upstream is hard (-) [INDEPENDENT/COUPLED] manual syncing with upstream (-) [COUPLED] (particularly base) syncing with upstream would be painful. (3) works best for SPECIFIC libraries, whereas (1) works best for INDEPENDENT/COUPLED libraries. If we want to treat all libraries the same, then the only real option is (1). Experience with Cabal and bytestring has shown that (1) can work for INDPENDENT libraries, but only if we're careful not to get too out-of-sync (as we did with bytestring). In the case of Cabal, we never have local changes in our branch that aren't in Cabal HEAD, and that works well. Comments/thoughts? As author of bytestring, I'd prefer it if GHC used a released version direct from Hackage. I.e. GHC could snapshot a Hackage release, and get out of the business of cloning repos. Same for other INDPENDENTs. -- Don ___ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users