RC 9:
authorManuel Chakravarty <chak@cse.unsw.edu.au>
Wed, 21 May 2003 12:19:17 +0000 (12:19 +0000)
committerManuel Chakravarty <chak@cse.unsw.edu.au>
Wed, 21 May 2003 12:19:17 +0000 (12:19 +0000)
* 5.8: `MarshallAlloc.reallocBytes' is no longer permitted on memory
       allocated with `alloca' or `allocaBytes'.

* Added extra COPYING file and a Makefile for a tarball (as requested by Igloo
  for Debian)

ffi/COPYING.ffi [new file with mode: 0644]
ffi/Makefile
ffi/Makefile.ffi [new file with mode: 0644]
ffi/ffi.tex

diff --git a/ffi/COPYING.ffi b/ffi/COPYING.ffi
new file mode 100644 (file)
index 0000000..cbfffb8
--- /dev/null
@@ -0,0 +1,9 @@
+Copyright [2002..2003] Manuel M T Chakravarty
+
+The authors intend this Report to belong to the entire Haskell community, and
+so we grant permission to copy and distribute it for any purpose, provided
+that it is reproduced in its entirety, including this Notice.  Modified
+versions of this Report may also be copied and distributed for any purpose,
+provided that the modified version is clearly presented as such, and that it
+does not claim to be a definition of the Haskell 98 Foreign Function
+Interface. 
index 73d78b5..2976ee5 100644 (file)
@@ -5,3 +5,19 @@ threads.ps: threads.tex
 ffi.ps: ffi.tex
        TEXINPUTS=../styles: latex ffi.tex
        dvips -f < ffi.dvi > ffi.ps
+
+# This is yucky, but there is not much choice as we need to subsitute a 
+# different Makefile for the tarball.
+#
+TMP=/tmp
+.PHONY: ffi.tar.gz
+ffi.tar.gz:
+       mkdir $(TMP)/ffi
+       cp ffi.tex $(TMP)/ffi/
+       cp ffi.bib $(TMP)/ffi/
+       cp ../styles/grammar.sty $(TMP)/ffi/
+       cp COPYING.ffi $(TMP)/ffi/COPYING
+       cp Makefile.ffi $(TMP)/ffi/Makefile
+       cd $(TMP); tar -czf $(PWD)/ffi.tar.gz ffi
+       -rm -f $(TMP)/ffi/*
+       -rmdir $(TMP)/ffi
diff --git a/ffi/Makefile.ffi b/ffi/Makefile.ffi
new file mode 100644 (file)
index 0000000..f911f5f
--- /dev/null
@@ -0,0 +1,10 @@
+# This Makefile needs GNU Make
+
+.PHONY: default
+default: ffi.ps
+
+ffi.dvi: ffi.tex grammar.sty
+       latex $< && bibtex $(basename $<) && latex $< && latex $<
+
+ffi.ps: ffi.dvi
+       dvips $< -o $@
index 9840884..46c4ee8 100644 (file)
 % does not claim to be a definition of the Haskell 98 Foreign Function
 % Interface. 
 
+% Changes since RC8:
+% * 5.8: `MarshallAlloc.reallocBytes' is no longer permitted on memory
+%        allocated with `alloca' or `allocaBytes'. 
+% * 6.1: Deinitialisation of the RTS via `hs_exit()' followed by
+%        (re)initialisation with `hs_init()' must be supported.
+%
 % Changes since RC7:
 % * Clarified the lexis of C identifiers and C header file names
 % * In `ForeignPtr', added `mallocForeignPtrArray' and `mallocForeignPtrArray0'
 %   C bindings.
 
 % TODO:
-% * "Foreign Proxy" (add it, there don't seem to be objections)
-%   - Ross points out that Eq must generally be defined on the underlying type
-%     if we want that Eq ForeignPtr compares the Ptr encapsulated in the
-%     ForeignPtr.  I don't think that's quite right, we could just have
-%       instance Eq a => Eq (ForeignObj a) where
-%         x == y = foreignObjToObj x == foreignObjToObj y
-%     This means for all ForeignObjs that if Eq is defined, it is defined by
-%     the Eq of the base type.  An alternative would be to define Eq on
-%     ForeignObjs as identity and use newtype to define ForeignPtrs with a
-%     different Eq instance.
-% * reallocForeignPtrArray and related issues (waiting for replies)
-% * Revise layout of the front page.
 % * Implement HTMLization.  (Malcolm suggests using
 %   <http://pauillac.inria.fr/~maranget/hevea/>)
 
 \excludeversion{FUTURE}  % material for future extensions
 
 %\def\Version{\relax}
-\def\Version{\\(Release Candidate 8)}
+\def\Version{\\(Release Candidate 9)}
 \begin{DRAFT}%
 {
   \gdef\Version{%
     \\
     \textbf{--- DRAFT ---}\\[1ex]
     \ttfamily\scriptsize
-    $\relax$Id: ffi.tex,v 1.41 2003/01/22 09:01:59 chak Exp $\relax$%
+    $\relax$Id: ffi.tex,v 1.42 2003/05/21 12:19:17 chak Exp $\relax$%
     \ignorespaces}
   }
 \end{DRAFT}
@@ -1562,14 +1556,14 @@ storage space for such an array can be allocated by the following functions:
 \end{codedesc}
 %
 If any of allocation functions fails, a value of \code{Ptr.nullPtr} is
-produced.  If \code{free} is applied to a memory area that has been allocated
-with \code{alloca} or \code{allocaBytes}, the behaviour is undefined.
-However, \code{reallocBytes} may be used on such memory areas.  Any further
-access to memory areas allocated with \code{alloca} or \code{allocaBytes},
-after the computation that was passed to the allocation function has
-terminated, leads to undefined behaviour.  Any further access to the memory
-area referenced by a pointer passed to \code{realloc}, \code{reallocBytes}, or
-\code{free} entails undefined behaviour.
+produced.  If \code{free} or \code{reallocBytes} is applied to a memory area
+that has been allocated with \code{alloca} or \code{allocaBytes}, the
+behaviour is undefined.  Any further access to memory areas allocated with
+\code{alloca} or \code{allocaBytes}, after the computation that was passed to
+the allocation function has terminated, leads to undefined behaviour.  Any
+further access to the memory area referenced by a pointer passed to
+\code{realloc}, \code{reallocBytes}, or \code{free} entails undefined
+behaviour.
 
 \subsection{\code{MarshalArray}}
 \label{sec:MarshalArray}
@@ -2069,8 +2063,11 @@ Conversely, the Haskell system is deinitialised by a call to
 \code{hs\_exit()}.  Multiple invocations of \code{hs\_init()} are permitted,
 provided that they are followed by an equal number of calls to
 \code{hs\_exit()} and that the first call to \code{hs\_exit()} is after the
-last call to \code{hs\_init()}.  This ensures that repeated initialisation due
-to multiple libraries being implemented in Haskell is covered.
+last call to \code{hs\_init()}.  In addition to nested calls to
+\code{hs\_init()}, the Haskell system may be de-initialised with
+\code{hs\_exit()} and be re-initialised with \code{hs\_init()} at a later
+point in time.  This ensures that repeated initialisation due to multiple
+libraries being implemented in Haskell is covered.
 
 The Haskell system will ignore the command line arguments passed to the second
 and any following calls to \code{hs\_init()}.  Moreover, \code{hs\_init()} may