for review: update NEWS file

Fergus Henderson fjh at cs.mu.OZ.AU
Sun Jan 25 04:24:03 AEDT 1998


Hi,

Tyson, can you please review this one?

NEWS:
	Update to reflect recent additions, in particular
		- primitive 4-port debugger
		- type classes
		- `pragma import' and nondet `pragma c_code'
		- transitive intermodule optimization
		- various changes to the standard library interface

Index: NEWS
===================================================================
RCS file: /home/mercury1/repository/mercury/NEWS,v
retrieving revision 1.92
diff -u -u -r1.92 NEWS
--- NEWS	1998/01/05 07:28:57	1.92
+++ NEWS	1998/01/24 16:35:03
@@ -42,7 +42,7 @@
   allowing the compiler to treat them cautiously.  The compiler tracks
   impurity, and requires all impure predicates, and calls to them, to
   be declared.  For more information, see "Impurity" section of the
-  Mercury language reference manual.
+  "Pragmas" chapter of the Mercury language reference manual.
 
 * We now support user-defined equality predicates.
 
@@ -203,7 +203,7 @@
 * The profiler now allows you to merge profiling data from multiple runs.
 
   There's a new script `mprof_merge_runs' to support this.
-  See the "Profiling" section of the Mercury User's Guide,
+  See the "Profiling" section of the Mercury user's guide,
   or the man page for `mprof_merge_runs'.
 
 * Termination analysis no longer uses the `lp_solve' package,
@@ -219,9 +219,89 @@
 NEWS since release 0.7.3:
 -------------------------
 
+Changes to the Mercury language:
+********************************
+
+* The type system now includes support for Haskell-style type classes.
+
+  Type classes let you specify an interface and then provide multiple
+  different implementations of that interface.  They're similar to
+  abstract base classes in C++ or "interfaces" in Java.
+  See the "Type classes" chapter of the Mercury language reference manual
+  for details.
+
+  Unlike Haskell 1.4, Mercury supports multi-parameter type classes,
+  but we do not (yet) support constructor classes, and nor do we
+  support default methods.
+
 * Mode inference can now infer "mostly-unique" modes as well as
   "unique" modes.
 
+* We've made more improvements to the C interface.
+
+  The C interface now includes support for defining procedures
+  that can have multiple solutions (i.e. those whose determinism
+  is `nondet' or `multi') in C.
+
+  Also there's a new declaration, `pragma import', which is a bit
+  like the existing `pragma c_code' declaration except that
+  instead of giving a C code fragment, you just give the name
+  of a C function.  `pragma import' is like the inverse of the
+  existing `pragma export' declaration.
+
+  XXX These features are not yet documented.
+  XXX (See tests/hard_coded/pragma_import.m for some examples.)
+
+
+Changes to the Mercury standard library:
+****************************************
+
+* The getopt module now supports a new type of option data, namely
+  `maybe_int(maybe(int))', to allow optional arguments with integer values.
+  There is also a new corresponding lookup predicate,
+  getopt__lookup_maybe_int_option/3. 
+
+  See the "getopt" chapter of the library reference manual for details.
+
+* Support for memory profiling: new predicates report_full_memory_stats/0
+  in benchmarking.m and io__report_full_memory_stats/2 in io.m.
+
+  See the "benchmarking" chapter of the library reference manual for details.
+
+* Miscellaneous new predicates: bag__least_upper_bound/3,
+  list__take_upto/3, set__count/2, set_ordlist__count/2,
+  and store__new_cyclic_mutvar/4.
+
+  See the library reference manual for details.
+
+* A few library procedures that have implicit side effects and are thus 
+  intended for debugging use only have been declared `impure'.
+  You will need to write `impure' before every call to these procedures
+  and typically you will need to add a `pragma promise_pure' declaration
+  for the callers.
+
+  The predicates affected are report_stats/0 and report_full_memory_stats/0
+  in library/benchmarking.m; unsafe_dump/2, unsafe_dump_float/1, and
+  unsafe_dump_tableaus/0 in extras/clpr/dump.m; and debug_freeze/3
+  and debug_freeze/4 in extras/trailed_update/var.m.
+
+
+Changes to the Mercury implementation:
+**************************************
+
+* We've added support for "transitive" inter-module analysis.
+
+  With the previous support for inter-module optimization, when
+  analysing a module, the compiler could make use of information
+  about the modules that it imports directly, but not about
+  modules that are imported indirectly.  "Transitive" inter-module
+  analysis gives the compiler information about indirectly
+  imported modules.
+
+  However, currently this is only used for termination analysis;
+  optimizations such as inlining still use only ordinary inter-module
+  analysis, not transitive inter-module analysis.
+
 * Array bounds checking can now be disabled.
 
   To disable array bounds checking, you must compile with
@@ -230,15 +310,28 @@
   `MGNUCFLAGS=-DML_OMIT_ARRAY_BOUNDS_CHECKS' in your Mmake file). 
   [XXX we also need to fix problems with intermodule inlining heuristics.]
 
-* We've added a new type of option data: maybe_int(maybe(int)), to
-  allow optional arguments with integer values.  There is also a new
-  corresponding lookup predicate, getopt__lookup_maybe_string_option/3.
-  See library/getopt.m for details.
+* We've added some primitive debugging support.
+
+  The runtime system now includes a *very* rudimentary "four-port" debugger
+  (actually with seven ports).  Only predicate names, depths and call numbers
+  are available as yet, not the values of any arguments or variables.
+  To use this debugger, you need to compile the modules that
+  you wish to debug with the `--generate-trace' option enabled.
+
+  The debugger supports the following commands:
+	a: abort the current execution.
+	c: continue to end, not printing the trace.
+	d: continue to end, printing the trace.
+	n: go to the next trace event.
+	s: skip the current call, not printing trace.
+	j: jump to end of current call, printing trace.
+
+  XXX We should document this in the Mercury user's guide.
 
 * The support for debugging using Prolog now includes support for
   detailed control over how terms are printed out during debugging.
 
-  See the "Using Prolog" section of the Mercury User's Guide for details.
+  See the "Using Prolog" section of the Mercury user's guide for details.
 
 * The Mercury profiler has a number of new features.
 
@@ -246,7 +339,7 @@
   real (elapsed) time, rather than profiling user + system time.
   We've also added support for memory profiling.
 
-  See the "Profiling" chapter of the Mercury User's Guide for details.
+  See the "Profiling" chapter of the Mercury user's guide for details.
 
 * Profiling should now work on MS Windows.
 
@@ -267,7 +360,11 @@
   `GRADEFLAGS = --profiling' in your Mmakefile, rather than having to
   use the more obscure incantation `GRADE = asm_fast.gc.prof'.
 
-* Ported to Linux/PPC.
+* We've made a few small improvements to the efficiency of the generated code.
+
+* The system has been ported to Linux/PPC.
 
 * We've updated to version 4.12 of the Boehm garbage collector.
+
+* Numerous bug fixes.
 

-- 
Fergus Henderson <fjh at cs.mu.oz.au>   |  "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh>   |  of excellence is a lethal habit"
PGP: finger fjh at 128.250.37.3         |     -- the last words of T. S. Garp.



More information about the developers mailing list