Lemmih [Fri, 10 Feb 2006 09:46:01 +0000 (09:46 +0000)]
Simplify the -B handling. The interface to the ghc library has changed slightly.
simonpj@microsoft.com [Thu, 9 Feb 2006 17:53:28 +0000 (17:53 +0000)]
Fix desugaring of unboxed tuples
This patch is a slightly-unsatisfactory fix to desugaring unboxed
tuples; it fixes ds057 which has been failing for some time.
Unsatisfactory because rather ad hoc -- but that applies to lots
of the unboxed tuple stuff.
Simon Marlow [Thu, 9 Feb 2006 16:22:47 +0000 (16:22 +0000)]
x86_64: fix case of out-of-range operands to leaq
Simon Marlow [Thu, 9 Feb 2006 15:44:49 +0000 (15:44 +0000)]
Merge the smp and threaded RTS ways
Now, the threaded RTS also includes SMP support. The -smp flag is a
synonym for -threaded. The performance implications of this are small
to negligible, and it results in a code cleanup and reduces the number
of combinations we have to test.
Simon Marlow [Thu, 9 Feb 2006 15:04:20 +0000 (15:04 +0000)]
change dirty_MUT_VAR() to use recordMutableCap()
rather than recordMutableGen(), the former works better in SMP
Simon Marlow [Thu, 9 Feb 2006 12:30:56 +0000 (12:30 +0000)]
improvement to the deadlock detection
When the RTS is idle, as detected by the timer signal, instead of
prodding capabilities from the signal handler (which is not guaranteed
to work - pthread_cond_signal() can't be called from signal handlers),
create a new thread to do it.
simonpj@microsoft.com [Thu, 9 Feb 2006 12:42:08 +0000 (12:42 +0000)]
Fix typo
simonpj@microsoft.com [Thu, 9 Feb 2006 11:35:31 +0000 (11:35 +0000)]
Fix instance rules for functional dependencies
GHC 6.4 implements a rather relaxed version of the Coverage Condition
which is actually too relaxed: the compiler can get into an infinite loop
as a result.
This commit fixes the problem (see Note [Coverage condition] in FunDeps.lhs)
and documents the change.
I also took the opportunity to add documentation about functional dependencies,
taken from the Hugs manual with kind permission of Mark Jones
Simon Marlow [Thu, 9 Feb 2006 10:50:58 +0000 (10:50 +0000)]
fix for the unregisterised way
We always assign to BaseReg on return from resumeThread(), but in
cases where BaseReg is not an lvalue (eg. unreg) we need to disable
this assigment. See comments for more details.
Simon Marlow [Thu, 9 Feb 2006 10:48:15 +0000 (10:48 +0000)]
prof/smp combination probably doesn't work, disable it
Simon Marlow [Thu, 9 Feb 2006 10:25:40 +0000 (10:25 +0000)]
tiny panic msg fix
simonpj@microsoft.com [Thu, 9 Feb 2006 10:21:29 +0000 (10:21 +0000)]
Loosen the rules for instance declarations (Part 2)
Tidying up to Ross's patch, plus adding documenation for it.
Ross Paterson [Mon, 6 Feb 2006 11:16:51 +0000 (11:16 +0000)]
relaxed instance termination test
With -fglasgow-exts but not -fallow-undecidable-instances, GHC 6.4
requires that instances be of the following form:
(1) each assertion in the context must constrain distinct variables
mentioned in the head, and
(2) at least one argument of the head must be a non-variable type.
This patch replaces these rules with the requirement that each assertion
in the context satisfy
(1) no variable has more occurrences in the assertion than in the head, and
(2) the assertion has fewer constructors and variables (taken together
and counting repetitions) than the head.
This allows all instances permitted by the old rule, plus such instances as
instance C a
instance Show (s a) => Show (Sized s a)
instance (Eq a, Show b) => C2 a b
instance C2 Int a => C3 Bool [a]
instance C2 Int a => C3 [a] b
instance C4 a a => C4 [a] [a]
but still ensures that under any substitution assertions in the context
will be smaller than the head, so context reduction must terminate.
This is probably the best we can do if we consider each instance in
isolation.
simonpj@microsoft.com [Thu, 9 Feb 2006 09:37:04 +0000 (09:37 +0000)]
Fix CPP failure by adding space before hASH_TBL_SIZE
Simon Marlow [Wed, 8 Feb 2006 17:07:44 +0000 (17:07 +0000)]
an LDV profiling fix (might just fix ASSERTIONs, I'm not sure)
simonpj@microsoft.com [Wed, 8 Feb 2006 15:44:12 +0000 (15:44 +0000)]
Do type refinement in TcIface
This commit fixes a bug in 6.4.1 and the HEAD. Consider this code,
recorded **in an interface file**
\(x::a) -> case y of
MkT -> case x of { True -> ... }
(where MkT forces a=Bool)
In the "case x" we need to know x's type, because we use that
to find which module to look for "True" in. x's type comes from
the envt, so we must refine the envt.
The alternative would be to record more info with an IfaceCase,
but that would change the interface file format.
(This stuff will go away when we have proper coercions.)
simonpj@microsoft.com [Wed, 8 Feb 2006 15:43:43 +0000 (15:43 +0000)]
Add mapOccEnv
simonpj@microsoft.com [Wed, 8 Feb 2006 15:07:01 +0000 (15:07 +0000)]
A little more debug printing
simonpj@microsoft.com [Wed, 8 Feb 2006 15:03:57 +0000 (15:03 +0000)]
Show types of case result when debug is on
Simon Marlow [Wed, 8 Feb 2006 15:32:59 +0000 (15:32 +0000)]
fix installation of binary dist when the PS docs aren't present
Fixes #660
Simon Marlow [Wed, 8 Feb 2006 14:54:51 +0000 (14:54 +0000)]
fix a bug in closure_sizeW_()
Simon Marlow [Wed, 8 Feb 2006 14:33:48 +0000 (14:33 +0000)]
make the smp way RTS-only, normal libraries now work with -smp
We had to bite the bullet here and add an extra word to every thunk,
to enable running ordinary libraries on SMP. Otherwise, we would have
needed to ship an extra set of libraries with GHC 6.6 in addition to
the two sets we already ship (normal + profiled), and all Cabal
packages would have to be compiled for SMP too. We decided it best
just to take the hit now, making SMP easily accessible to everyone in
GHC 6.6.
Incedentally, although this increases allocation by around 12% on
average, the performance hit is around 5%, and much less if your inner
loop doesn't use any laziness.
Simon Marlow [Wed, 8 Feb 2006 13:10:18 +0000 (13:10 +0000)]
add -dfaststring-stats to dump some stats about the FastString hash table
Simon Marlow [Tue, 7 Feb 2006 13:23:23 +0000 (13:23 +0000)]
fix a warning
Simon Marlow [Tue, 7 Feb 2006 11:11:11 +0000 (11:11 +0000)]
catch up with changes to Distribution.ParseUtils.ParseResult
simonpj@microsoft.com [Tue, 7 Feb 2006 17:12:54 +0000 (17:12 +0000)]
Wibble to type signature
simonpj@microsoft.com [Tue, 7 Feb 2006 08:51:37 +0000 (08:51 +0000)]
Empty forall should disable implicit quantification
simonpj@microsoft.com [Mon, 6 Feb 2006 11:20:31 +0000 (11:20 +0000)]
Remove unused constructor in SourceTypeCtxt
Simon Marlow [Mon, 6 Feb 2006 12:26:54 +0000 (12:26 +0000)]
Basic completion in GHCi
This patch adds completion support to GHCi when readline is being
used. Completion of identifiers (in scope only, but including
qualified identifiers) in expressions is provided. Also, completion
of commands (:cmd), and special completion for certain commands
(eg. module names for the :module command) are also provided.
simonpj@microsoft.com [Mon, 6 Feb 2006 10:17:30 +0000 (10:17 +0000)]
Improve error report for pattern guards
simonpj@microsoft.com [Fri, 3 Feb 2006 17:51:08 +0000 (17:51 +0000)]
Add bang patterns
This commit adds bang-patterns,
enabled by -fglasgow-exts or -fbang-patterns
diabled by -fno-bang-patterns
The idea is described here
http://haskell.galois.com/cgi-bin/haskell-prime/trac.cgi/wiki/BangPatterns
simonpj@microsoft.com [Fri, 3 Feb 2006 17:46:27 +0000 (17:46 +0000)]
Add Bag.anyBag (analogous to List.any)
simonpj@microsoft.com [Thu, 2 Feb 2006 13:04:09 +0000 (13:04 +0000)]
Deal correctly with lazy patterns and GADTs
simonpj@microsoft.com [Thu, 2 Feb 2006 12:44:05 +0000 (12:44 +0000)]
Record the type in TuplePat (necessary for GADTs)
We must record the type of a TuplePat after typechecking, just like a ConPatOut,
so that desugaring works correctly for GADTs. See comments with the declaration
of HsPat.TuplePat, and test gadt15
simonpj@microsoft.com [Thu, 2 Feb 2006 12:43:27 +0000 (12:43 +0000)]
Improve error reporting in Core Lint
Simon Marlow [Thu, 2 Feb 2006 12:43:59 +0000 (12:43 +0000)]
don't clean ghc-inplace when cleaning stages other than 1
simonpj@microsoft.com [Wed, 1 Feb 2006 17:03:32 +0000 (17:03 +0000)]
Improve error reporting in typechecker
simonpj@microsoft.com [Wed, 1 Feb 2006 17:02:48 +0000 (17:02 +0000)]
Trim imports
simonpj@microsoft.com [Wed, 1 Feb 2006 10:55:44 +0000 (10:55 +0000)]
Yet another fix to an old hi-boot-6 file
simonpj@microsoft.com [Tue, 31 Jan 2006 17:57:30 +0000 (17:57 +0000)]
Kinding wibble in TH brackets
Duncan Coutts [Wed, 7 Dec 2005 10:56:54 +0000 (10:56 +0000)]
Use extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibraries
Also extend the parser.
Simon Marlow [Tue, 31 Jan 2006 16:15:30 +0000 (16:15 +0000)]
combine libraries/.darcs-boring and .darcs-boring
simonpj@microsoft.com [Tue, 31 Jan 2006 15:32:47 +0000 (15:32 +0000)]
Fix long-standing bug in CPR analysis
MERGE TO STABLE
For a long time (2002!) the CPR analysis done by
dmdAnalTopRhs has been bogus. In particular, it's possible
for a newtype constructor to look CPR-ish when it simply isn't.
This fixes it. Test is stranal/newtype
simonpj@microsoft.com [Tue, 31 Jan 2006 13:09:26 +0000 (13:09 +0000)]
More hi-boot-6 updates
simonpj@microsoft.com [Tue, 31 Jan 2006 12:24:20 +0000 (12:24 +0000)]
Fix TcUnify.subFunTys in AppTy case
subFunTys wasn't dealing correctly with the case where the type
to be split was of form (a ty1), where a is a type variable.
This shows up when compiling
Control.Arrow.Transformer.Stream
in package arrows.
This commit fixes it.
simonpj@microsoft.com [Mon, 30 Jan 2006 16:36:51 +0000 (16:36 +0000)]
Error message wibble
simonpj@microsoft.com [Mon, 30 Jan 2006 13:12:31 +0000 (13:12 +0000)]
Add mkHsCoerce to avoid junk in typechecked code
Avoiding identity coercions is a Good Thing generally, but
it turns out that the desugarer has trouble recognising
'otherwise' and 'True' guards if they are wrapped in an
identity coercion; and that leads to bogus overlap warnings.
simonpj@microsoft.com [Mon, 30 Jan 2006 13:11:33 +0000 (13:11 +0000)]
Improve error messsage when argument count varies
Simon Marlow [Mon, 30 Jan 2006 11:53:01 +0000 (11:53 +0000)]
fix bug #664 in printSample()
printSample() was attempting to round the fractional part of the time,
but not propagated to the non-fractional part. It's probably better not
to attempt to round the time at all.
simonpj@microsoft.com [Fri, 27 Jan 2006 17:50:40 +0000 (17:50 +0000)]
Fix hi-boot file for earlier versions of GHC
simonpj@microsoft.com [Fri, 27 Jan 2006 17:45:36 +0000 (17:45 +0000)]
Fix typo in boxy matching
Simon Marlow [Fri, 27 Jan 2006 10:47:15 +0000 (10:47 +0000)]
fix one case where -q wasn't honoured
wolfgang.thaller@gmx.net [Thu, 26 Jan 2006 07:15:04 +0000 (07:15 +0000)]
Check for GMP.framework on all Darwin platforms, not just PPC
simonpj@microsoft.com [Wed, 25 Jan 2006 16:28:32 +0000 (16:28 +0000)]
Simon's big boxy-type commit
This very large commit adds impredicativity to GHC, plus
numerous other small things.
*** WARNING: I have compiled all the libraries, and
*** a stage-2 compiler, and everything seems
*** fine. But don't grab this patch if you
*** can't tolerate a hiccup if something is
*** broken.
The big picture is this:
a) GHC handles impredicative polymorphism, as described in the
"Boxy types: type inference for higher-rank types and
impredicativity" paper
b) GHC handles GADTs in the new simplified (and very sligtly less
epxrssive) way described in the
"Simple unification-based type inference for GADTs" paper
But there are lots of smaller changes, and since it was pre-Darcs
they are not individually recorded.
Some things to watch out for:
c) The story on lexically-scoped type variables has changed, as per
my email. I append the story below for completeness, but I
am still not happy with it, and it may change again. In particular,
the new story does not allow a pattern-bound scoped type variable
to be wobbly, so (\(x::[a]) -> ...) is usually rejected. This is
more restrictive than before, and we might loosen up again.
d) A consequence of adding impredicativity is that GHC is a bit less
gung ho about converting automatically between
(ty1 -> forall a. ty2) and (forall a. ty1 -> ty2)
In particular, you may need to eta-expand some functions to make
typechecking work again.
Furthermore, functions are now invariant in their argument types,
rather than being contravariant. Again, the main consequence is
that you may occasionally need to eta-expand function arguments when
using higher-rank polymorphism.
Please test, and let me know of any hiccups
Scoped type variables in GHC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
January 2006
0) Terminology.
A *pattern binding* is of the form
pat = rhs
A *function binding* is of the form
f pat1 .. patn = rhs
A binding of the formm
var = rhs
is treated as a (degenerate) *function binding*.
A *declaration type signature* is a separate type signature for a
let-bound or where-bound variable:
f :: Int -> Int
A *pattern type signature* is a signature in a pattern:
\(x::a) -> x
f (x::a) = x
A *result type signature* is a signature on the result of a
function definition:
f :: forall a. [a] -> a
head (x:xs) :: a = x
The form
x :: a = rhs
is treated as a (degnerate) function binding with a result
type signature, not as a pattern binding.
1) The main invariants:
A) A lexically-scoped type variable always names a (rigid)
type variable (not an arbitrary type). THIS IS A CHANGE.
Previously, a scoped type variable named an arbitrary *type*.
B) A type signature always describes a rigid type (since
its free (scoped) type variables name rigid type variables).
This is also a change, a consequence of (A).
C) Distinct lexically-scoped type variables name distinct
rigid type variables. This choice is open;
2) Scoping
2(a) If a declaration type signature has an explicit forall, those type
variables are brought into scope in the right hand side of the
corresponding binding (plus, for function bindings, the patterns on
the LHS).
f :: forall a. a -> [a]
f (x::a) = [x :: a, x]
Both occurences of 'a' in the second line are bound by
the 'forall a' in the first line
A declaration type signature *without* an explicit top-level forall
is implicitly quantified over all the type variables that are
mentioned in the type but not already in scope. GHC's current
rule is that this implicit quantification does *not* bring into scope
any new scoped type variables.
f :: a -> a
f x = ...('a' is not in scope here)...
This gives compatibility with Haskell 98
2(b) A pattern type signature implicitly brings into scope any type
variables mentioned in the type that are not already into scope.
These are called *pattern-bound type variables*.
g :: a -> a -> [a]
g (x::a) (y::a) = [y :: a, x]
The pattern type signature (x::a) brings 'a' into scope.
The 'a' in the pattern (y::a) is bound, as is the occurrence on
the RHS.
A pattern type siganture is the only way you can bring existentials
into scope.
data T where
MkT :: forall a. a -> (a->Int) -> T
f x = case x of
MkT (x::a) f -> f (x::a)
2a) QUESTION
class C a where
op :: forall b. b->a->a
instance C (T p q) where
op = <rhs>
Clearly p,q are in scope in <rhs>, but is 'b'? Not at the moment.
Nor can you add a type signature for op in the instance decl.
You'd have to say this:
instance C (T p q) where
op = let op' :: forall b. ...
op' = <rhs>
in op'
3) A pattern-bound type variable is allowed only if the pattern's
expected type is rigid. Otherwise we don't know exactly *which*
skolem the scoped type variable should be bound to, and that means
we can't do GADT refinement. This is invariant (A), and it is a
big change from the current situation.
f (x::a) = x -- NO; pattern type is wobbly
g1 :: b -> b
g1 (x::b) = x -- YES, because the pattern type is rigid
g2 :: b -> b
g2 (x::c) = x -- YES, same reason
h :: forall b. b -> b
h (x::b) = x -- YES, but the inner b is bound
k :: forall b. b -> b
k (x::c) = x -- NO, it can't be both b and c
3a) You cannot give different names for the same type variable in the same scope
(Invariant (C)):
f1 :: p -> p -> p -- NO; because 'a' and 'b' would be
f1 (x::a) (y::b) = (x::a) -- bound to the same type variable
f2 :: p -> p -> p -- OK; 'a' is bound to the type variable
f2 (x::a) (y::a) = (x::a) -- over which f2 is quantified
-- NB: 'p' is not lexically scoped
f3 :: forall p. p -> p -> p -- NO: 'p' is now scoped, and is bound to
f3 (x::a) (y::a) = (x::a) -- to the same type varialble as 'a'
f4 :: forall p. p -> p -> p -- OK: 'p' is now scoped, and its occurences
f4 (x::p) (y::p) = (x::p) -- in the patterns are bound by the forall
3b) You can give a different name to the same type variable in different
disjoint scopes, just as you can (if you want) give diferent names to
the same value parameter
g :: a -> Bool -> Maybe a
g (x::p) True = Just x :: Maybe p
g (y::q) False = Nothing :: Maybe q
3c) Scoped type variables respect alpha renaming. For example,
function f2 from (3a) above could also be written:
f2' :: p -> p -> p
f2' (x::b) (y::b) = x::b
where the scoped type variable is called 'b' instead of 'a'.
4) Result type signatures obey the same rules as pattern types signatures.
In particular, they can bind a type variable only if the result type is rigid
f x :: a = x -- NO
g :: b -> b
g x :: b = x -- YES; binds b in rhs
5) A *pattern type signature* in a *pattern binding* cannot bind a
scoped type variable
(x::a, y) = ... -- Legal only if 'a' is already in scope
Reason: in type checking, the "expected type" of the LHS pattern is
always wobbly, so we can't bind a rigid type variable. (The exception
would be for an existential type variable, but existentials are not
allowed in pattern bindings either.)
Even this is illegal
f :: forall a. a -> a
f x = let ((y::b)::a, z) = ...
in
Here it looks as if 'b' might get a rigid binding; but you can't bind
it to the same skolem as a.
6) Explicitly-forall'd type variables in the *declaration type signature(s)*
for a *pattern binding* do not scope AT ALL.
x :: forall a. a->a -- NO; the forall a does
Just (x::a->a) = Just id -- not scope at all
y :: forall a. a->a
Just y = Just (id :: a->a) -- NO; same reason
THIS IS A CHANGE, but one I bet that very few people will notice.
Here's why:
strange :: forall b. (b->b,b->b)
strange = (id,id)
x1 :: forall a. a->a
y1 :: forall b. b->b
(x1,y1) = strange
This is legal Haskell 98 (modulo the forall). If both 'a' and 'b'
both scoped over the RHS, they'd get unified and so cannot stand
for distinct type variables. One could *imagine* allowing this:
x2 :: forall a. a->a
y2 :: forall a. a->a
(x2,y2) = strange
using the very same type variable 'a' in both signatures, so that
a single 'a' scopes over the RHS. That seems defensible, but odd,
because though there are two type signatures, they introduce just
*one* scoped type variable, a.
7) Possible extension. We might consider allowing
\(x :: [ _ ]) -> <expr>
where "_" is a wild card, to mean "x has type list of something", without
naming the something.
Simon Marlow [Wed, 25 Jan 2006 13:55:01 +0000 (13:55 +0000)]
add double colon and double arrow symbols (-fglasgow-exts)
simonpj@microsoft.com [Wed, 25 Jan 2006 09:09:57 +0000 (09:09 +0000)]
Fix conDeclFVs for GADTs, to fix bogus unused-import warning
Simon Marlow [Tue, 24 Jan 2006 16:25:21 +0000 (16:25 +0000)]
make the par# primop actually do something
Simon Marlow [Tue, 24 Jan 2006 15:47:32 +0000 (15:47 +0000)]
Update Cachegrind support for changes to the Valgrind CLI
Simon Marlow [Tue, 24 Jan 2006 14:55:51 +0000 (14:55 +0000)]
send usage info to stdout, not stderr
Dinko Tenev [Sun, 22 Jan 2006 22:24:46 +0000 (22:24 +0000)]
primop-docs
Simon Marlow [Fri, 20 Jan 2006 15:13:22 +0000 (15:13 +0000)]
remove old CVS stuff, replace with darcs
Simon Marlow [Mon, 23 Jan 2006 16:49:30 +0000 (16:49 +0000)]
implement clean/dirty TSOs
Along the lines of the clean/dirty arrays and IORefs implemented
recently, now threads are marked clean or dirty depending on whether
they need to be scanned during a minor GC or not. This should speed
up GC when there are lots of threads, especially if most of them are
idle.
simonpj@microsoft.com [Mon, 23 Jan 2006 14:28:38 +0000 (14:28 +0000)]
Better error message for Template Haskell pattern brackets
Simon Marlow [Mon, 23 Jan 2006 14:05:30 +0000 (14:05 +0000)]
remove old comment
Lemmih [Mon, 23 Jan 2006 11:06:25 +0000 (11:06 +0000)]
Fix for feature request #655 (Loading the GHC library from GHCi.)
Moved the utility functions out of hschooks, avoided
linking the GHC library with hschooks.o and
added a couple of symbols to the linkers export list.
Duncan Coutts [Sun, 22 Jan 2006 01:18:31 +0000 (01:18 +0000)]
Make hsc2hs emit the full path name in {-# LINE #-} pagmas.
For one thing this is the right thing to do anyway, it's what other tools do.
Secondly it allows haddock to produce accurate source code links.
Simon Marlow [Mon, 23 Jan 2006 09:48:37 +0000 (09:48 +0000)]
MFLAGS += -f Makefile
merged from CVS, because Tailor isn't merging the libraries subdir
Simon Marlow [Sun, 22 Jan 2006 17:58:17 +0000 (17:58 +0000)]
undo accidental commit of snapshot version
simonmar [Thu, 19 Jan 2006 16:15:58 +0000 (16:15 +0000)]
[project @ 2006-01-19 16:15:58 by simonmar]
omit the Main module from libHSghc.a
simonmar [Thu, 19 Jan 2006 16:11:04 +0000 (16:11 +0000)]
[project @ 2006-01-19 16:11:04 by simonmar]
exposed-modules should include Config
sof [Thu, 19 Jan 2006 02:15:38 +0000 (02:15 +0000)]
[project @ 2006-01-19 02:15:38 by sof]
tryPutMVarzh_fast: make it work in the non-full case.
Merge to STABLE.
Simon Marlow [Thu, 19 Jan 2006 16:41:55 +0000 (16:41 +0000)]
test
Simon Marlow [Thu, 19 Jan 2006 09:57:59 +0000 (09:57 +0000)]
respect the -q switch in this script
Ian Lynagh [Fri, 13 Jan 2006 23:12:49 +0000 (23:12 +0000)]
Hack around whatsnew failing if there are no changes
Ian Lynagh [Fri, 13 Jan 2006 21:24:20 +0000 (21:24 +0000)]
Pass anything through to darcs and let it do the failing on bad commands
simonpj [Wed, 18 Jan 2006 12:16:06 +0000 (12:16 +0000)]
[project @ 2006-01-18 12:16:06 by simonpj]
Check for constructors in type signatures
simonpj [Wed, 18 Jan 2006 12:15:37 +0000 (12:15 +0000)]
[project @ 2006-01-18 12:15:37 by simonpj]
Expunge all mention of CCallable/CReturnable
simonpj [Wed, 18 Jan 2006 11:13:06 +0000 (11:13 +0000)]
[project @ 2006-01-18 11:13:06 by simonpj]
Ghci wibble; weaken assert
simonmar [Wed, 18 Jan 2006 11:00:35 +0000 (11:00 +0000)]
[project @ 2006-01-18 11:00:35 by simonmar]
Remove dead code
simonmar [Wed, 18 Jan 2006 10:59:54 +0000 (10:59 +0000)]
[project @ 2006-01-18 10:59:54 by simonmar]
Remove dead panic
simonmar [Wed, 18 Jan 2006 10:58:15 +0000 (10:58 +0000)]
[project @ 2006-01-18 10:58:15 by simonmar]
Remove dead error
(darcs patch from Ian Lynagh)
simonmar [Wed, 18 Jan 2006 10:49:32 +0000 (10:49 +0000)]
[project @ 2006-01-18 10:49:32 by simonmar]
Implement :main (see ticket #662)
Patch from Volker Stolz, minor mods by me
When matching commands, we now look for (a) an exact match, and (b)
the first prefix match we find in the list. This is so that :module
can still be abbreviated by :m, to avoid surprise.
Docs still to do.
simonmar [Wed, 18 Jan 2006 10:40:46 +0000 (10:40 +0000)]
[project @ 2006-01-18 10:40:46 by simonmar]
add a couple of missing symbols
simonmar [Wed, 18 Jan 2006 10:31:50 +0000 (10:31 +0000)]
[project @ 2006-01-18 10:31:50 by simonmar]
- fix a mixup in Capability.c regarding signals: signals_pending() is not
used in THREADED_RTS
- some cleanups and warning removal while I'm here
simonmar [Wed, 18 Jan 2006 10:06:36 +0000 (10:06 +0000)]
[project @ 2006-01-18 10:06:36 by simonmar]
Fix build on 5.04.x again
simonmar [Tue, 17 Jan 2006 16:13:18 +0000 (16:13 +0000)]
[project @ 2006-01-17 16:13:18 by simonmar]
Improve the GC behaviour of IORefs (see Ticket #650).
This is a small change to the way IORefs interact with the GC, which
should improve GC performance for programs with plenty of IORefs.
Previously we had a single closure type for mutable variables,
MUT_VAR. Mutable variables were *always* on the mutable list in older
generations, and always traversed on every GC.
Now, we have two closure types: MUT_VAR_CLEAN and MUT_VAR_DIRTY. The
latter is on the mutable list, but the former is not. (NB. this
differs from MUT_ARR_PTRS_CLEAN and MUT_ARR_PTRS_DIRTY, both of which
are on the mutable list). writeMutVar# now implements a write
barrier, by calling dirty_MUT_VAR() in the runtime, that does the
necessary modification of MUT_VAR_CLEAN into MUT_VAR_DIRY, and adding
to the mutable list if necessary.
This results in some pretty dramatic speedups for GHC itself. I've
just measureed a 30% overall speedup compiling a 31-module program
(anna) with the default heap settings :-D
simonmar [Tue, 17 Jan 2006 16:03:47 +0000 (16:03 +0000)]
[project @ 2006-01-17 16:03:47 by simonmar]
Improve the GC behaviour of IOArrays/STArrays
See Ticket #650
This is a small change to the way mutable arrays interact with the GC,
that can have a dramatic effect on performance, and make tricks with
unsafeThaw/unsafeFreeze redundant. Data.HashTable should be faster
now (I haven't measured it yet).
We now have two mutable array closure types, MUT_ARR_PTRS_CLEAN and
MUT_ARR_PTRS_DIRTY. Both are on the mutable list if the array is in
an old generation. writeArray# sets the type to MUT_ARR_PTRS_DIRTY.
The garbage collector can set the type to MUT_ARR_PTRS_CLEAN if it
finds that no element of the array points into a younger generation
(discovering this required a small addition to evacuate(), but rough
tests indicate that it doesn't measurably affect performance).
NOTE: none of this affects unboxed arrays (IOUArray/STUArray), only
boxed arrays (IOArray/STArray).
We could go further and extend the DIRTY bit to be per-block rather
than for the whole array, but for now this is an easy improvement.
simonmar [Tue, 17 Jan 2006 13:50:06 +0000 (13:50 +0000)]
[project @ 2006-01-17 13:50:06 by simonmar]
statDescribeGens: count large blocks in the "live" figure
simonmar [Tue, 17 Jan 2006 13:28:01 +0000 (13:28 +0000)]
[project @ 2006-01-17 13:28:01 by simonmar]
take into account unscavenged copied words in +RTS -t stats.
wolfgang [Tue, 17 Jan 2006 02:13:16 +0000 (02:13 +0000)]
[project @ 2006-01-17 02:13:16 by wolfgang]
Linux/PPC64: remove some dead code that accidentally slipped in.
MERGE TO STABLE
wolfgang [Tue, 17 Jan 2006 01:51:56 +0000 (01:51 +0000)]
[project @ 2006-01-17 01:51:56 by wolfgang]
Darwin/PPC:
Make StgRunIsImplementedInAssembler non-static; gcc has recently acquired
a habit of dead-stripping it.
MERGE TO STABLE
simonmar [Mon, 16 Jan 2006 16:38:25 +0000 (16:38 +0000)]
[project @ 2006-01-16 16:38:24 by simonmar]
Default signal handlers weren't being installed; amazing that this has
been broken ever since I rearranged the signal handling code.
Simon Marlow [Fri, 13 Jan 2006 16:32:07 +0000 (16:32 +0000)]
improvements to darcs-all
- get from the same repo as the main GHC repo, if that was a local filesystem
- allow darcs whatsnew
- use --repodir if possible
Simon Marlow [Fri, 13 Jan 2006 15:05:05 +0000 (15:05 +0000)]
Add infrastructure for multiple library packages
The ./darcs-all script at the top level is an easier way to do darcs
pull/push/get on the whole tree (it should probably allow more
commands; I'll fix that later).
libraries/default-packages is a list of darcs repositories with which
to populate the libraries tree.
Simon Marlow [Fri, 13 Jan 2006 13:19:49 +0000 (13:19 +0000)]
Add a skeleton libraries directory
Adding files from libraries that aren't in the other
packages sub-repos. I haven't bothered to try to keep
history for these files, for history go back to the CVS
repo.
simonmar [Thu, 12 Jan 2006 16:16:28 +0000 (16:16 +0000)]
[project @ 2006-01-12 16:16:28 by simonmar]
GHC.runStmt: run the statement in a new thread to insulate the
environment from bad things that the user code might do, such as fork
a thread to send an exception back at a later time. In order to do
this, we had to keep track of which thread the ^C exception should go
to in a global variable.
Also, bullet-proof the top-level exception handler in GHCi a bit;
there was a small window where an exception could get through, so if
you lean on ^C for a while then press enter you could cause GHCi to
exit.
simonmar [Thu, 12 Jan 2006 14:42:25 +0000 (14:42 +0000)]
[project @ 2006-01-12 14:42:25 by simonmar]
+RTS -S: replace "collected" with "copied", which is more useful.
+RTS -Dg: print size of mutable list, and breakdown by type of closure
(MUT_VAR, MUT_ARR, others).
simonmar [Thu, 12 Jan 2006 13:49:24 +0000 (13:49 +0000)]
[project @ 2006-01-12 13:49:24 by simonmar]
fix calculation of copied bytes, we had a words/bytes mismatch when
adding the size of the mutable list
simonmar [Thu, 12 Jan 2006 12:41:03 +0000 (12:41 +0000)]
[project @ 2006-01-12 12:41:03 by simonmar]
time_str:
- use ctime_r if available
- avoid use of strcpy on overlapping regions
Ticket #480 (patch modified by me)
simonmar [Thu, 12 Jan 2006 12:40:01 +0000 (12:40 +0000)]
[project @ 2006-01-12 12:40:01 by simonmar]
check for ctime_r