Skip to content
Snippets Groups Projects
Commit 98c314db authored by Simon Marlow's avatar Simon Marlow
Browse files

[project @ 1999-07-14 11:33:10 by simonmar]

- add 4.04 release notes
- several other docfixes and markup fixes.
parent 94edb050
No related merge requests found
<sect1>Release notes for version~4.04---7/99
<label id="release-4-04">
<p>
<itemize>
<item> <tt/Weak/ library changes:
<itemize>
<item> Finalise is now spelt finalize in all function names.
<item> <tt/finalize/ now runs the finalizer immediately, and
waits for it to complete before returning.
<item> <tt/mkWeak/ now takes a <tt/Maybe (IO ())/ for the finalizer,
and <tt/mkWeakNoFinalizer/ is removed.
<item> A weak pointer whose key is itself a weak pointer will now do
the right thing.
</itemize>
<item> Changed representation of <tt/Integer/ type to speed up
computations on small integers. The performance of <tt/Integer/ is now
only slightly slower than <tt/Int/ for values between <tt/minBound::Int/
and <tt/maxBound::Int/.
<item> On Win32 platforms, added support for using (and producing) dynamic
link libraries (DLLs) containing ghc-compiled code.
<item> Added @-funbox-strict-fields@ for unboxing/unpacking strict
constructor fields.
<item> GHC now has a license! Check out <tt>fptools/ghc/LICENSE/</tt>.
<item> Added CPR analysis, which reduces allocation by unboxing
function results (thanks to Kevin Glynn <tt>&lt;keving@@cs.mu.OZ.AU&gt;</tt>).
<item> UsageSP analysis added, but not yet functional.
<item> Added a simple common sub-expression analysis pass.
<item> Implemented update-in-place for certain very restricted cases.
<item> Replaced GHC's old and worn yacc/lex parser with a new one
based on Happy. Fixed several Haskell 98 non-conformance issues in
the process.
<item> Added <tt>Concurrent.yield :: IO ()</tt>.
<item> Added RULES pragms - transformation rules for Haskell source.
This is used for list fusion: now intermediate lists between map,
foldr, list comprehensions are removed automatically.
<item> Unregisterised/unmangled builds now work.
<item> Much performance tuning: GHC 4.04 produces faster code than all
previous compilers.
<item> GHC now defines <tt/__HASKELL98__/ when compiling files with
<tt/-cpp/.
<item> <tt/hppa1.1-hp-hpux/ port reinstated.
<item> New operations for unsafely thawing byte arrays:
<tt/unsafeThaw{Byte,ST,IO}Array/.
<item> <tt/mkdependHS/ now lives in GHC's lib directory, not the
binary directory. It isn't intended to be run standalone, only via
<tt/ghc -M/.
<item> Asynchronous exceptions are now supported (see Section <ref name="The Concurrent Library" id="concurrent-interface">). New operations:
<itemize> <item> <tt/Exception.killThread/ now raises an exception
(<tt/AsyncException.KilledThread/) in the killed thread.
<item> <tt/Exception.raiseInThread/ allows a thread to raise an
exception in another thread.
<item> <tt/Concurrent.myThreadId/ returns the <tt/ThreadId/ of the
calling thread.
<item> Stack overflow results in <tt/AsyncException.StackOverflow/
being raised in the offending thread.
</itemize>
<item> Assertion failures now raise an <tt/AssertionFailed/ exception.
<item> Added simple high-level interface to the Regex library, see
Section <ref name="The RegexString Library" id="RegexString">.
<item> <tt/forkIO/ now handles any uncaught exceptions cleanly.
<item> <tt/integer2Int#/ isn't sign preserving any longer, but modulo
<tt/(maxBound::Int + 1) * 2/.
<item> <tt/-ddump-rdr/ is now called <tt/-ddump-parsed/.
<item> Signal handling with the <tt/Posix/ library now works.
<item> Many, many bugs fixed.
</itemize>
%
% $Id: glasgow_exts.vsgml,v 1.11 1999/05/18 15:41:32 simonpj Exp $
% $Id: glasgow_exts.vsgml,v 1.12 1999/07/14 11:33:10 simonmar Exp $
%
% GHC Language Extensions.
%
......@@ -2000,7 +2000,7 @@ Section <ref name="Rewrite Rules"
id="rewrite-rules">.
%-----------------------------------------------------------------------------
<sect1>Rewrite rules</sect1>
<sect1>Rewrite rules
<label id="rewrite-rules">
<nidx>RULES pagma</nidx>
<nidx>pragma, RULES</nidx>
......@@ -2017,7 +2017,8 @@ Here is an example:
#-}
</verb></tscreen>
<sect2>Syntax</sect2>
<sect2>Syntax
<p>
From a syntactic point of view:
<itemize>
......@@ -2051,7 +2052,8 @@ variables it mentions, though of course they need to be in scope.
<item> Rules are automatically exported from a module, just as instance declarations are.
</itemize>
<sect2>Semantics</sect2>
<sect2>Semantics
<p>
From a semantic point of view:
<itemize>
......@@ -2121,7 +2123,8 @@ policy is controlled by the per-simplification-pass flag @-finline-phase@n.
</itemize>
<sect2>Controlling what's going on</sect2>
<sect2>Controlling what's going on
<p>
<itemize>
<item> Use @-fddump-rules@ to see what transformation rules GHC is using.
......
......@@ -47,6 +47,7 @@ Some details about Concurrent and Parallel Haskell follow.
%************************************************************************
%* *
<sect2>Language features specific to Concurrent Haskell
<label id="concurrent-haskell">
<p>
<nidx>Concurrent Haskell---features</nidx>
%* *
......
......@@ -504,15 +504,18 @@ installHandler :: Signal
-> IO Handler -- old handler
</verb></tscreen>
@installHandler int handler iset@ calls @sigaction@ to install
an interrupt handler for signal @int@. If @handler@ is
@Default@, @SIG_DFL@ is installed; if @handler@ is
@Ignore@, @SIG_IGN@ is installed; if @handler@ is
@Catch action@, a handler is installed which will invoke @action@ as a
replacement for @main@. If @iset@ is @Just s@, then the
@sa_mask@ of the @sigaction@ structure is set to @s@;
otherwise it is cleared. The previously installed signal handler for
@int@ is returned.
@installHandler int handler iset@ calls @sigaction@ to install an
interrupt handler for signal @int@. If @handler@ is @Default@,
@SIG_DFL@ is installed; if @handler@ is @Ignore@, @SIG_IGN@ is
installed; if @handler@ is @Catch action@, a handler is installed
which will invoke @action@ in a new thread when (or shortly after) the
signal is received. See Section <ref name="Concurrent Haskell"
id="concurrent-haskell"> for details on how to communicate between
threads.
If @iset@ is @Just s@, then the @sa_mask@ of the @sigaction@ structure
is set to @s@; otherwise it is cleared. The previously installed
signal handler for @int@ is returned.
<tscreen><verb>
getSignalMask :: IO SignalSet
......@@ -557,10 +560,12 @@ awaitSignal :: Maybe SignalSet -> IO ()
</verb></tscreen>
@awaitSignal iset@ suspends execution until an interrupt is received.
If @iset@ is @Just s@, @awaitSignal@ calls
@sigsuspend@, installing @s@ as the new signal mask before
suspending execution; otherwise, it calls @pause@. If successful,
@awaitSignal@ does not return.
If @iset@ is @Just s@, @awaitSignal@ calls @sigsuspend@, installing
@s@ as the new signal mask before suspending execution; otherwise, it
calls @pause@. @awaitSignal@ returns on receipt of a signal. If you
have installed any signal handlers with @installHandler@, it may be
wise to call @yield@ directly after @awaitSignal@ to ensure that the
signal handler runs as promptly.
<tscreen><verb>
scheduleAlarm :: Int -> IO Int
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment