Potential GSoC proposal: Reduce the speed gap between 'ghc -c' and 'ghc --make'

2012-04-02 Thread Mikhail Glushenkov
Hi all,

[Hoping it's not too late.]

During my work on parallelising 'ghc --make' [1] I encountered a
stumbling block: running 'ghc --make' can be often much faster than
using separate compile ('ghc -c') and link stages, which means that
any parallel build tool built on top of 'ghc -c' will be significantly
handicapped [2]. As far as I understand, this is mainly due to the
effects of interface file caching - 'ghc --make' only needs to parse
and load them once. One potential improvement (suggested by Duncan
Coutts [3]) is to produce whole-package interface files and load them
in using mmap().

Questions:

Would implementing this optimisation be a worthwhile/realistic GSoC project?
What are other potential ways to bring 'ghc -c' performance up to par
with 'ghc --make'?


[1] https://github.com/23Skidoo/ghc-parmake
[2] https://gist.github.com/1360470
[3] 
http://www.reddit.com/r/haskell/comments/qwj5j/the_cabal_of_my_dreams/c41a5gx

-- 
()  ascii ribbon campaign - against html e-mail
/\  www.asciiribbon.org   - against proprietary attachments

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Potential GSoC proposal: Reduce the speed gap between 'ghc -c' and 'ghc --make'

2012-04-02 Thread Evan Laforge
 Questions:

 Would implementing this optimisation be a worthwhile/realistic GSoC project?
 What are other potential ways to bring 'ghc -c' performance up to par
 with 'ghc --make'?

I implemented a ghc server that runs several persistent ghcs, and
distributes compiles among them.  It seemed to work, but the speed
gains weren't what I'd hoped for.  But perhaps I was doing something
dumb that hurt performance.  I'd be happy to upload the source if
you're interested.

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


What do the following numbers mean?

2012-04-02 Thread Jurriaan Hage

Dear all,

I ran a small example program, and this is what I got from using the -s flag:

486,550,118,368 bytes allocated in the heap
323,749,418,440 bytes copied during GC
  1,842,979,344 bytes maximum residency (219 sample(s))
204,653,688 bytes maximum slop
   4451 MB total memory in use (0 MB lost due to fragmentation)

 Generation 0: 924208 collections, 0 parallel, 1861.17s, 1866.05s elapsed
 Generation 1:   219 collections, 0 parallel, 283.44s, 284.01s elapsed

 INIT  time0.00s  (  0.00s elapsed)
 MUT   time  740.61s  (745.45s elapsed)
 GCtime  2144.61s  (2150.06s elapsed)
 EXIT  time0.00s  (  0.00s elapsed)
 Total time  2885.23s  (2895.51s elapsed)

 %GC time  74.3%  (74.3% elapsed)

 Alloc rate656,953,176 bytes per MUT second


Can anyone tell me what the exact difference is between
  1,842,979,344 bytes maximum residency (219 sample(s))
and
   4451 MB total memory in use (0 MB lost due to fragmentation)

I could not find this information in the docs anywhere, but I may have missed 
it.

best,
Jur

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: [Haskell-cafe] A Modest Records Proposal

2012-04-02 Thread Alp Mestanogullari
Lesson learned: for next year, write a Haskell program that tells if a
given -cafe thread or reddit discussion is a April Fool's joke or not.

On Sun, Apr 1, 2012 at 7:10 PM, Christopher Done
chrisd...@googlemail.comwrote:

 I actually read the first couple paragraphs and thought “sounds
 interesting I'll read it later”. After reading it properly, I lol'd.

  After some initial feedback, I'm going to create a page for the
  Homotopy Extensional Records Proposal (HERP) on trac. There are really
  only a few remaining questions. 1) Having introduced homotopies, why
  not go all the way and introduce dependent records? In fact, are HERP
  and Dependent Extensional Records Proposal (DERP) already isomorphic?
  My suspicion is that HERP is isomorphic, but DERP is not.

 ___
 Haskell-Cafe mailing list
 haskell-c...@haskell.org
 http://www.haskell.org/mailman/listinfo/haskell-cafe




-- 
Alp Mestanogullari
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: [Haskell-cafe] A Modest Records Proposal

2012-04-02 Thread Christopher Done
On 2 April 2012 14:41, Michael Snoyman mich...@snoyman.com wrote:
 import Data.Time

 main = do
    now - getCurrentTime
    let (_, month, day) = toGregorian $ utctDay now
    putStrLn $
        if month == 4  day == 1
            then It's a joke
            else It's real

import Data.Time
main = do
   now - getCurrentTime
   let (_, month, day) = toGregorian $ utctDay now
   putStrLn $
   if month == 4  day == 1
   then It's a joke
   else It's real. (This output is not a joke. But run this
program again to be sure.)

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: cabal install version selection

2012-04-02 Thread Christian Hoener zu Siederdissen
Thanks,

that was a rather curious problem then. With more version annotations,
hackage compiled everything.

Thanks for for testing!

Gruss,
Christian

* Albert Y. C. Lai tre...@vex.net [31.03.2012 03:58]:
 On 12-03-30 06:37 PM, Christian Höner zu Siederdissen wrote:
 I fail to remember or re-google the package version selection for cabal,
 if no version constraints are given.
 
 If I depend on iteratee, and there are no constraints, does it take
 the lowest version?
 
 It takes the highest version.
 
 To verify, I fetched RNAFold.cabal of 1.99.1.0 and tried:
 
 cabal install --dry-run
 
 Its answer:
 
 Resolving dependencies...
 In order, the following would be installed (use -v for more details):
 ListLike-3.1.4
 MonadCatchIO-transformers-0.2.2.3
 OneTuple-0.2.1
 PrimitiveArray-0.2.1.1
 ADPfusion-0.0.1.0
 bytestring-lexing-0.4.0
 cmdargs-0.9.5
 csv-0.1.2
 file-embed-0.0.4.1
 iteratee-0.8.8.1
 ...
 
 It chooses the newest iteratee alright.
 
 I don't know what is going on with hackage's build bot. And I can't
 control it anyway.
 
 
 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


pgpKciJD4zPci.pgp
Description: PGP signature
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Potential GSoC proposal: Reduce the speed gap between 'ghc -c' and 'ghc --make'

2012-04-02 Thread Johan Tibell
I for one think this would make a good GSoC project. Make sure you get
your application in in time though.

-- Johan

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: [Haskell-cafe] A Modest Records Proposal

2012-04-02 Thread Evan Laforge
On Mon, Apr 2, 2012 at 5:41 AM, Michael Snoyman mich...@snoyman.com wrote:
 On Mon, Apr 2, 2012 at 3:38 PM, Alp Mestanogullari alpmes...@gmail.com 
 wrote:
 Lesson learned: for next year, write a Haskell program that tells if a given
 -cafe thread or reddit discussion is a April Fool's joke or not.

 import Data.Time

 main = do
    now - getCurrentTime
    let (_, month, day) = toGregorian $ utctDay now
    putStrLn $
        if month == 4  day == 1
            then It's a joke
            else It's real

My strategy next year will be to not read any email on the 1st.  I'll
just wait until the 2nd to read it all.  Foolproof!

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: A Modest Records Proposal

2012-04-02 Thread Ben Franksen
ROTFL!

Ben

Gershom B wrote:
 The records discussion has been really complicated and confusing. But
 I have a suggestion that should provide a great deal of power to
 records, while being mostly[1] backwards-compatible with Haskell 2010.
 Consider this example:
 
 data A a = A{a:a, aa::a, aaa :: a - A (a - a)}
 data B a = B{aaa :: a - A (a - a), a :: A}
 
 Now what is the type of this?
 
  a a aa = a{a = a, aaa = aa}
 
 Using standard Haskell typeclasses this is a difficult question to
 answer. The types of  for A and B do not unify in an obvious way.
 However, while they are intensionally quite distinct, they unify
 trivially extensionally. The obvious thing to do is then to extend the
 type system with extensional equality on record functions.
 
 Back when Haskell was invented, extensional equality was thought to be
 hard. But purity was thought to be hard too, and so were Monads. Now,
 we know that function existentionality is easy. In fact, if we add the
 Univalence Axiom to GHC[2], then this is enough to get function
 existensionality. This is a well-known result of Homotopy Type
 Theory[3], which is a well-explored approach that has existed for at
 least a few years and produced more than one paper[4]. Homotopy Type
 Theory is so sound and well understood that it has even been
 formalized in Coq.
 
 Once we extend GHC with homotopies, it turns out that records reduce
 to mere syntactic sugar, and there is a natural proof of their
 soundness (Appendix A). Furthermore, there is a canonical projection
 for any group of fields (Appendix B). Even better, we can make .
 into the identity path operator, unifying its uses in composition and
 projection. In fact, with extended (parenthesis-free) section rules,
 . can also be used to terminate expressions, making Haskell friendly
 not only to programmers coming from Java, but also to those coming
 from Prolog!
 
 After some initial feedback, I'm going to create a page for the
 Homotopy Extensional Records Proposal (HERP) on trac. There are really
 only a few remaining questions. 1) Having introduced homotopies, why
 not go all the way and introduce dependent records? In fact, are HERP
 and Dependent Extensional Records Proposal (DERP) already isomorphic?
 My suspicion is that HERP is isomorphic, but DERP is not. However, I
 can only get away with my proof using Scott-free semantics. 2) Which
 trac should I post this too? Given how well understood homotopy type
 theory is, I'm tempted to bypass GHC entirely and propose this for
 haskell-prime. 3) What syntax should we use to represent homotopies?
 See extend discussion in Appendix C.
 
 HTH HAND,
 Gershom
 
 [1] To be precise, 100% of Haskell 2010 programs should, usually, be
 able to be rewritten to work with this proposal with a minimal set of
 changes[1a].
 
 [1a] A minimal set of changes is defined as the smallest set of
 changes necessary to make to a Haskell 2010 program such that it works
 with this proposal. We can arrive at these changes by the following
 procedure: 1) Pick a change[1b]. 2) Is it minimal? If so keep it. 3)
 are we done? If not, make another change.
 
 [1b] To do this constructively, we need an order. I suggest the lo
 mein, since noodles give rise to a free soda.
 
 [2] I haven't looked at the source, but I would suggest putting it in
 the file Axioms.hs.
 
 [3] http://homotopytypetheory.org/
 
 [4] http://arxiv.org/
 
 
 *Appendix A: A Natural Proof of the Soundness of HERP
 
 Take the category of all types in HERP, with functions as morphisms.
 Call it C. Take the category of all sound expressions in HERP, with
 functions as morphisms. Call it D. Define a full functor from C to D.
 Call it F. Define a faithful functor on C and D. Call it G. Draw the
 following diagram.
 
 F(X)F(Y)
 |  |
 |  |
 |  |
 G(X)G(Y)
 
 Define the arrows such that everything commutes.
 
 
 *Appendix B: Construction of a Canonical Projection for Any Group of
 Fields.
 
 1) Take the fields along the homotopy to an n-ball.
 2) Pack them loosely with newspaper and gunpowder.
 3) Project them from a cannon.
 
 In an intuitionistic logic, the following simplification is possible:
 
 1) Use your intuition.
 
 
 *Appendix C: Homotopy Syntax
 
 Given that we already are using the full unicode set, what syntax
 should we use to distinguish paths and homotopies? At first, I thought
 we could avoid providing any syntax for homotopies at all. Haskell is
 a language with type inference, so we should just be able to infer
 paths and homotopies behind the scenes by adding homotopies to the
 type system. That's a very nice answer in theory. But in the real
 world, when we're writing code that solves actual problems,
 theoretical niceties break down. What if a user wants to use a
 nonstandard homotopy?
 
 Why should we stop them just because we're too lazy to come up with a
 good syntax? I then realized that we keep running out of syntax
 because we've limited 

Re: What do the following numbers mean?

2012-04-02 Thread Ben Lippmeier

On 02/04/2012, at 10:10 PM, Jurriaan Hage wrote:
 Can anyone tell me what the exact difference is between
  1,842,979,344 bytes maximum residency (219 sample(s))
 and
   4451 MB total memory in use (0 MB lost due to fragmentation)
 
 I could not find this information in the docs anywhere, but I may have missed 
 it.

The maximum residency is the peak amount of live data in the heap. The total 
memory in use is the peak amount that the GHC runtime requested from the 
operating system. Because the runtime system ensures that the heap is always 
bigger than the size of the live data, the second number will be larger.

The maximum residency is determined by performing a garbage collection, which 
traces out the graph of live objects. This means that the number reported may 
not be the exact peak memory use of the program, because objects could be 
allocated and then become unreachable before the next sample. If you want a 
more accurate number then increase the frequency of the heap sampling with the 
-isec RTS flag.

Ben.


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users