(have-llvect?): Removed, Scheme code will always
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 5e7528b..93d407b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -109,22 +109,27 @@ This is an implementation of SRFI-26.
 This is an implementation of SRFI-31 which provides a special form
 `rec' for recursive evaluation.
 
-** The modules (srfi srfi-13) and (srfi srfi-14) have been merged with
-   the core, making their functionality always available.
+** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
+   been merged with the core, making their functionality always
+   available.
 
 The modules are still available, tho, and you could use them together
 with a renaming import, for example.
 
-** Guile now includes its own version of libltdl.
+** Guile no longer includes its own version of libltdl.
 
-We now use a modified version of libltdl that allows us to make
-improvements to it without having to rely on libtool releases.
+The official version is good enough now.
 
 ** The --enable-htmldoc option has been removed from 'configure'.
 
 Support for translating the documentation into HTML is now always
 provided.  Use 'make html'.
 
+** The configure option '--disable-arrays' has been removed.
+
+Support for arrays and uniform numeric arrays is now always included
+in Guile.
+
 * Changes to the stand-alone interpreter
 
 ** New command line option `-L'.
@@ -159,6 +164,32 @@ be used with '-e'.  For example, you can now write a script like
 
 * Changes to Scheme functions and syntax
 
+** The default load path no longer includes "." at the end.
+
+Automatically loading modules from the current directory should not
+happen by default.  If you want to allow it in a more controlled
+manner, set the environment variable GUILE_LOAD_PATH or the Scheme
+variable %load-path.
+
+** The uniform vector and array support has been overhauled.
+
+It now complies with SRFI-4 and the weird prototype based uniform
+array creation has been deprecated.  See the manual for more details.
+
+Some non-compatible changes have been made: 
+ - characters can no longer be stored into byte arrays.
+ - strings and bit vectors are no longer considered to be uniform vectors.
+ - array-rank throws an error for non-arrays instead of returning zero.
+ - array-ref does no longer accept non-arrays when no indices are given.
+
+There is the new notion of 'generalized vectors' and corresponding
+procedures like 'generalized-vector-ref'.  Generalized vectors include
+strings, bitvectors, ordinary vectors, and uniform numeric vectors.
+
+Arrays use generalized vectors their storage, so that you still have
+arrays of characters, bits, etc.  However, uniform-array-read! and
+uniform-array-write can no longer read/write strings and bitvectors.
+
 ** There is now support for copy-on-write substrings, mutation-sharing
    substrings and read-only strings.
 
@@ -166,6 +197,30 @@ Three new procedures are related to this: substring/shared,
 substring/copy, and substring/read-only.  See the manual for more
 information.
 
+** Backtraces will now highlight the value that caused the error.
+
+By default, these values are enclosed in "{...}", such as in this
+example:
+
+    guile> (car 'a)
+
+    Backtrace:
+    In current input:
+       1: 0* [car {a}]
+
+    <unnamed port>:1:1: In procedure car in expression (car (quote a)):
+    <unnamed port>:1:1: Wrong type (expecting pair): a
+    ABORT: (wrong-type-arg)
+
+The prefix and suffix used for highlighting can be set via the two new
+printer options 'highlight-prefix' and 'highlight-suffix'.  For
+example, putting this into ~/.guile will output the bad value in bold
+on an ANSI terminal:
+
+    (print-set! highlight-prefix "\x1b[1m")
+    (print-set! highlight-suffix "\x1b[22m")
+
+
 ** 'gettext' support for internationalization has been added.
 
 See the manual for details.
@@ -187,6 +242,37 @@ but it can also access variables that have not been exported.  It is
 intended only for kluges and temporary fixes and for debugging, not
 for ordinary code.
 
+** Keyword syntax has been made more disciplined.
+
+Previously, the name of a keyword was read as a 'token' but printed as
+a symbol.  Now, it is read as a general Scheme datum which must be a
+symbol.
+
+Previously:
+
+    guile> #:12
+    #:#{12}#
+    guile> #:#{12}#
+    #:#{\#{12}\#}#
+    guile> #:(a b c)
+    #:#{}#
+    ERROR: In expression (a b c):
+           Unbound variable: a
+    guile> #: foo
+    #:#{}#
+    ERROR: Unbound variable: foo
+
+Now:
+
+    guile> #:12
+    ERROR: Wrong type (expecting symbol): 12
+    guile> #:#{12}#
+    #:#{12}#
+    guile> #:(a b c)
+    ERROR: Wrong type (expecting symbol): (a b c)
+    guile> #: foo
+    #:foo
+
 ** 'while' now provides 'break' and 'continue'
 
 break and continue were previously bound in a while loop, but not
@@ -577,6 +663,16 @@ chapter in the reference manual.
 
 There is no replacement for undefine.
 
+* The functions make-keyword-from-dash-symbol and keyword-dash-symbol
+  have been discouraged.
+
+They are relics from a time where a keyword like #:foo was used
+directly as a Tcl option "-foo" and thus keywords were internally
+stored as a symbol with a starting dash.  We now store a symbol
+without the dash.
+
+Use symbol->keyword and keyword->symbol instead.
+
 
 * Changes to the C interface
 
@@ -611,7 +707,7 @@ alternatives.
   C value.  For example, you can use scm_to_int to safely convert from
   a SCM to an int.
 
-  - SCM scm_from_<type>) (<type> val, ...)
+  - SCM scm_from_<type> (<type> val, ...)
 
   These functions convert from a C type to a SCM value; for example,
   scm_from_int for ints.
@@ -707,7 +803,7 @@ scm_symbol_to_string and then work with that string.  Because of the
 new string representation, scm_symbol_to_string does not need to copy
 and is thus quite efficient.
 
-** Some string and symbol functions have been discouraged.
+** Some string, symbol and keyword functions have been discouraged.
 
 They don't fit into the uniform naming scheme and are not explicit
 about the character encoding.
@@ -727,6 +823,44 @@ Replace according to the following table:
     SCM_SYMBOL_HASH           -> scm_hashq
     SCM_SYMBOL_INTERNED_P     -> scm_symbol_interned_p
 
+    scm_c_make_keyword        -> scm_from_locale_keyword
+
+** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
+   now also available to C code.
+
+** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
+
+Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
+the latter returns the true name of the keyword, not the 'dash name',
+as SCM_KEYWORDSYM used to do.
+
+** The old uniform vector and bitvector implementations have been
+   unceremoniously removed.
+
+This implementation exposed the detailes of the tagging system of
+Guile.  Use the new C API explained in the manual in node "Uniform
+Numeric Vectors" and "Bit Vectors", respectively.
+
+The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
+SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
+SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
+SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
+SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
+SCM_SET_BITVECTOR_LENGTH.
+
+** The macros dealing with vectors have been deprecated.
+
+Use the new functions scm_is_vector, scm_vector_elements,
+scm_vector_writable_elements, etc instead.  See the manual for more
+details.
+
+Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
+SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
+
+The following macros have been removed: SCM_VECTOR_BASE,
+SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
+SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
+
 ** SCM_CELL_WORD_LOC has been deprecated.
 
 Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer