X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/41d7d2af429d0901f0aaff881ee432f5a241b3df..4f60cc33ac4ad30de6edcdffb84fcc7c61262d77:/NEWS diff --git a/NEWS b/NEWS index ce43cec0b..93f9d247e 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,5 @@ Guile NEWS --- history of user-visible changes. -*- text -*- -Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. See the end for copying conditions. Please send Guile bug reports to bug-guile@gnu.org. @@ -8,8 +8,154 @@ Changes since Guile 1.4: * Changes to the distribution +** New module (ice-9 stack-catch): + +stack-catch is like catch, but saves the current state of the stack in +the the-last-stack fluid for the debugger to inspect or in able to +re-throw an error. + +** The module (ice-9 and-let*) has been renamed to (ice-9 and-let-star) + +This has been done to prevent problems on lesser operating systems +that can't tolerate `*'s in file names. The exported macro continues +to be named `and-let*', of course. + +On systems that support it, there is also a compatibility module named +(ice-9 and-let*). It will go away in the next release. + +** New modules (oop goops) etc.: + + (oop goops) + (oop goops describe) + (oop goops save) + (oop goops active-slot) + (oop goops composite-slot) + +The Guile Object Oriented Programming System (GOOPS) has been +integrated into Guile. + +Type + + (use-modules (oop goops)) + +access GOOPS bindings. + +We're now ready to try some basic GOOPS functionality. + +Generic functions + + (define-method (+ (x ) (y )) + (string-append x y)) + + (+ 1 2) --> 3 + (+ "abc" "de") --> "abcde" + +User-defined types + + (define-class <2D-vector> () + (x #:init-value 0 #:accessor x-component #:init-keyword #:x) + (y #:init-value 0 #:accessor y-component #:init-keyword #:y)) + + (define-method write ((obj <2D-vector>) port) + (display (format #f "<~S, ~S>" (x-component obj) (y-component obj)) + port)) + + (define v (make <2D-vector> #:x 3 #:y 4)) + v --> <3, 4> + + (define-method + ((x <2D-vector>) (y <2D-vector>)) + (make <2D-vector> + #:x (+ (x-component x) (x-component y)) + #:y (+ (y-component x) (y-component y)))) + + (+ v v) --> <6, 8> + +Asking for the type of an object + + (class-of v) --> #< <2D-vector> 40241ac0> + <2D-vector> --> #< <2D-vector> 40241ac0> + (class-of 1) --> #< 401b2a98> + --> #< 401b2a98> + + (is-a? v <2D-vector>) --> #t + +See further in the GOOPS manual and tutorial in the `doc' directory, +in info (goops.info) and texinfo formats. + +** New module (ice-9 rdelim). + +This exports the following procedures which were previously defined +in the default environment: + +read-line read-line! read-delimited read-delimited! %read-delimited! +%read-line write-line + +For backwards compatibility the definitions are still imported into the +default environment in this version of Guile. However you should add: + +(use-modules (ice-9 rdelim)) + +to any program which uses the definitions, since this may change in +future. + +Alternatively, if guile-scsh is installed, the (scsh rdelim) module +can be used for similar functionality. + +** New module (ice-9 match) + +This module includes Andrew K. Wright's pattern matcher: + +(use-modules (ice-9 match)) + +(match '(+ 1 2) + (('+ x) x) + (('+ x y) `(add ,x ,y)) + (('- x y) `(sub ,x ,y))) => (add 1 2) + +See ice-9/match.scm for brief description or +http://www.star-lab.com/wright/code.html for complete documentation. + +This module requires SLIB to be installed and available from Guile. + +** New module (ice-9 buffered-input) + +This module provides procedures to construct an input port from an +underlying source of input that reads and returns its input in chunks. +The underlying input source is a Scheme procedure, specified by the +caller, which the port invokes whenever it needs more input. + +This is useful when building an input port whose back end is Readline +or a UI element such as the GtkEntry widget. + +** Documentation + +The reference and tutorial documentation that was previously +distributed separately, as `guile-doc', is now included in the core +Guile distribution. The documentation consists of the following +manuals. + +- The Guile Tutorial (guile-tut.texi) contains a tutorial introduction + to using Guile. + +- The Guile Reference Manual (guile.texi) contains (or is intended to + contain) reference documentation on all aspects of Guile. + +- The GOOPS Manual (goops.texi) contains both tutorial-style and + reference documentation for using GOOPS, Guile's Object Oriented + Programming System. + +- The Revised^4 and Revised^5 Reports on the Algorithmic Language + Scheme (r4rs.texi and r5rs.texi). + +See the README file in the `doc' directory for more details. + * Changes to the stand-alone interpreter +** Evaluation of "()", the empty list, is now an error. + +Previously, you could for example write (cons 1 ()); now you need to +be more explicit and write (cons 1 '()). + ** It's now possible to create modules with controlled environments Example: @@ -17,11 +163,155 @@ Example: (use-modules (ice-9 safe)) (define m (make-safe-module)) ;;; m will now be a module containing only a safe subset of R5RS -(eval-in-module '(+ 1 2) m) --> 3 -(eval-in-module 'load m) --> ERROR: Unbound variable: load +(eval '(+ 1 2) m) --> 3 +(eval 'load m) --> ERROR: Unbound variable: load * Changes to Scheme functions and syntax +** The empty combination is no longer valid syntax. + +Previously, the expression "()" evaluated to the empty list. This has +been changed to signal a "missing expression" error. The correct way +to write the empty list as a literal constant is to use quote: "'()". + +** Auto-loading of compiled-code modules is deprecated. + +Guile used to be able to automatically find and link a shared +libraries to satisfy requests for a module. For example, the module +`(foo bar)' could be implemented by placing a shared library named +"foo/libbar.so" (or with a different extension) in a directory on the +load path of Guile. + +This has been found to be too tricky, and is no longer supported. +What you should do instead now is to write a small Scheme file that +explicitly calls `dynamic-link' to load the shared library and +`dynamic-call' to initialize it. + +The shared libraries themselves should be installed in the usual +places for shared libraries, with names like "libguile-foo-bar". + +For example, place this into a file "foo/bar.scm" + + (define-module (foo bar)) + + (dynamic-call "foobar_init" (dynamic-link "libguile-foo-bar")) + +The file name passed to `dynamic-link' should not contain an +extension. It will be provided automatically. + +** The module system has been made more disciplined. + +The function `eval' will now save and restore the current module +around the evaluation of the specified expression. While this +expression is evaluated, `(current-module)' will now return the right +module, which is the module specified as the second argument to +`eval'. + +A consequence of this change is that `eval' is not particularily +useful when you want allow the evaluated code to change what module is +designated as the current module and have this change persist from one +call to `eval' to the next. The read-eval-print-loop is an example +where `eval' is now inadequate. To compensate, there is a new +function `primitive-eval' that does not take a module specifier and +that does not save/restore the current module. You should use this +function together with `set-current-module', `current-module', etc +when you want to have more control over the state that is carried from +one eval to the next. + +Additionally, it has been made sure that forms that are evaluated at +the top level are always evaluated with respect to the current module. +Previously, subforms of top-level forms such as `begin', `case', +etc. did not respect changes to the current module although these +subforms are at the top-level as well. + +To prevent strange behaviour, the forms `define-module', +`use-modules', `use-syntax', and `export' have been restricted to only +work on the top level. The forms `define-public' and +`defmacro-public' only export the new binding on the top level. They +behave just like `define' and `defmacro', respectively, when they are +used in a lexical environment. + +** `port-for-each' makes an additional guarantee. + +From the docstring: @var{proc} is applied exactly once to every port +that exists in the system at the time @var{port-for-each} is invoked. +Changes to the port table while @var{port-for-each} is running have no +effect as far as @var{port-for-each} is concerned. + +This guarantee is important to make (ice-9 popen) work reliable. + +** The semantics of guardians have changed. + +The changes are for the most part compatible. An important criterion +was to keep the typical usage of guardians as simple as before, but to +make the semantics safer and (as a result) more useful. + +*** All objects returned from guardians are now properly alive. + +It is now guaranteed that any object referenced by an object returned +from a guardian is alive. It's now impossible for a guardian to +return a "contained" object before its "containing" object. + +One incompatible (but probably not very important) change resulting +from this is that it is no longer possible to guard objects that +indirectly reference themselves (i.e. are parts of cycles). If you do +so accidentally, you'll get a warning. + +*** There are now two types of guardians: greedy and sharing. + +If you call (make-guardian #t) or just (make-guardian), you'll get a +greedy guardian, and for (make-guardian #f) a sharing guardian. + +Greedy guardians are the default because they are more "defensive". +You can only greedily guard an object once. If you guard an object +more than once, once in a greedy guardian and the rest of times in +sharing guardians, then it is guaranteed that the object won't be +returned from sharing guardians as long as it is greedily guarded +and/or alive. + +Guardians returned by calls to `make-guardian' can now take one more +optional parameter, which says whether to throw an error in case an +attempt is made to greedily guard an object that is already greedily +guarded. The default is true, i.e. throw an error. If the parameter +is false, the guardian invocation returns #t if guarding was +successful and #f if it wasn't. + +Also, since greedy guarding is, in effect, a side-effecting operation +on objects, a new function is introduced: `destroy-guardian!'. +Invoking this function on a guardian renders it unoperative and, if +the guardian is greedy, clears the "greedily guarded" property of the +objects that were guarded by it, thus undoing the side effect. + +Note that all this hair is hardly very important, since guardian +objects are usually permanent. + +** Escape procedures created by call-with-current-continuation now +accept any number of arguments, as required by R5RS. + +** New function `make-object-property' + +This function returns a new `procedure with setter' P that can be used +to attach a property to objects. When calling P as + + (set! (P obj) val) + +where `obj' is any kind of object, it attaches `val' to `obj' in such +a way that it can be retrieved by calling P as + + (P obj) + +This function will replace procedure properties, symbol properties and +source properties eventually. + +** Module (ice-9 optargs) now uses keywords instead of `#&'. + +Instead of #&optional, #&key, etc you should now use #:optional, +#:key, etc. Since #:optional is a keyword, you can write it as just +:optional when (read-set! keywords 'prefix) is active. + +The old reader syntax `#&' is still supported, but deprecated. It +will be removed in the next release. + ** Backward incompatible change: eval EXP ENVIRONMENT-SPECIFIER `eval' is now R5RS, that is it takes two arguments. @@ -64,10 +354,211 @@ Example: (define (bar) ...) +** Deprecated: scm_make_shared_substring + +Explicit shared substrings will disappear from Guile. + +Instead, "normal" strings will be implemented using sharing +internally, combined with a copy-on-write strategy. + +** Deprecated: scm_read_only_string_p + +The concept of read-only strings will disappear in next release of +Guile. + +** Deprecated: scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member + +Instead, use scm_c_memq or scm_memq, scm_memv, scm_member. + +** New function: read-string!/partial str [port_or_fdes [start [end]]] + + Read characters from an fport or file descriptor into a string + STR. This procedure is scsh-compatible and can efficiently read + large strings. It will: + + * attempt to fill the entire string, unless the START and/or + END arguments are supplied. i.e., START defaults to 0 and + END defaults to `(string-length str)' + + * use the current input port if PORT_OR_FDES is not supplied. + + * read any characters that are currently available, without + waiting for the rest (short reads are possible). + + * wait for as long as it needs to for the first character to + become available, unless the port is in non-blocking mode + + * return `#f' if end-of-file is encountered before reading any + characters, otherwise return the number of characters read. + + * return 0 if the port is in non-blocking mode and no characters + are immediately available. + + * return 0 if the request is for 0 bytes, with no end-of-file + check + +** New function: object->string OBJ + +Return a Scheme string obtained by printing a given object. + +** New function: port? X + +Returns a boolean indicating whether X is a port. Equivalent to +`(or (input-port? X) (output-port? X))'. + +** New function: file-port? + +Determines whether a given object is a port that is related to a file. + +** New function: port-for-each proc + +Apply PROC to each port in the Guile port table in turn. The +return value is unspecified. + +** New function: dup2 oldfd newfd + +A simple wrapper for the `dup2' system call. Copies the file +descriptor OLDFD to descriptor number NEWFD, replacing the +previous meaning of NEWFD. Both OLDFD and NEWFD must be integers. +Unlike for dup->fdes or primitive-move->fdes, no attempt is made +to move away ports which are using NEWFD. The return value is +unspecified. + +** New function: close-fdes fd + +A simple wrapper for the `close' system call. Close file +descriptor FD, which must be an integer. Unlike close (*note +close: Ports and File Descriptors.), the file descriptor will be +closed even if a port is using it. The return value is +unspecified. + +** New function: crypt password salt + +Encrypts `password' using the standard unix password encryption +algorithm. + +** New function: chroot path + +Change the root directory of the running process to `path'. + +** New functions: getlogin, cuserid + +Return the login name or the user name of the current effective user +id, respectively. + +** New functions: getpriority which who, setpriority which who prio + +Get or set the priority of the running process. + +** New function: getpass prompt + +Read a password from the terminal, first displaying `prompt' and +disabling echoing. + +** New function: flock file operation + +Set/remove an advisory shared or exclusive lock on `file'. + +** New functions: sethostname name, gethostname + +Set or get the hostname of the machine the current process is running +on. + +** New function: mkstemp! tmpl + +mkstemp creates a new unique file in the file system and returns a +new buffered port open for reading and writing to the file. TMPL +is a string specifying where the file should be created: it must +end with `XXXXXX' and will be changed in place to return the name +of the temporary file. + +** New function: open-input-string string + +Return an input string port which delivers the characters from +`string'. This procedure, together with `open-output-string' and +`get-output-string' implements SRFI-6. + +** New function: open-output-string + +Return an output string port which collects all data written to it. +The data can then be retrieved by `get-output-string'. + +** New function: get-output-string + +Return the contents of an output string port. + +** Deprecated: close-all-ports-except. + +This was intended for closing ports in a child process after a fork, +but it has the undesirable side effect of flushing buffers. +port-for-each is more flexible. + +** The (ice-9 popen) module now attempts to set up file descriptors in +the child process from the current Scheme ports, instead of using the +current values of file descriptors 0, 1, and 2 in the parent process. + +** Removed function: builtin-weak-bindings + +There is no such concept as a weak binding any more. + +** Removed constants: bignum-radix, scm-line-incrementors + +** define-method: New syntax mandatory. + +The new method syntax is now mandatory: + +(define-method (NAME ARG-SPEC ...) BODY ...) +(define-method (NAME ARG-SPEC ... . REST-ARG) BODY ...) + + ARG-SPEC ::= ARG-NAME | (ARG-NAME TYPE) + REST-ARG ::= ARG-NAME + +If you have old code using the old syntax, import +(oop goops old-define-method) before (oop goops) as in: + + (use-modules (oop goops old-define-method) (oop goops)) + * Changes to the gh_ interface * Changes to the scm_ interface +** New function: scm_c_read (SCM port, void *buffer, scm_sizet size) + +Used by an application to read arbitrary number of bytes from a port. +Same semantics as libc read, except that scm_c_read only returns less +than SIZE bytes if at end-of-file. + +Warning: Doesn't update port line and column counts! + +** New function: scm_c_write (SCM port, const void *ptr, scm_sizet size) + +Used by an application to write arbitrary number of bytes to an SCM +port. Similar semantics as libc write. However, unlike libc +write, scm_c_write writes the requested number of bytes and has no +return value. + +Warning: Doesn't update port line and column counts! + +** New function: scm_init_guile () + +In contrast to scm_boot_guile, scm_init_guile will return normally +after initializing Guile. It is not available on all systems, tho. + +** New functions: scm_str2symbol, scm_mem2symbol + +The function scm_str2symbol takes a const char* pointing to a zero-terminated +field of characters and creates a scheme symbol object from that C string. +The function scm_mem2symbol takes a const char* and a number of characters and +creates a symbol from the characters in that memory area. + +** New functions: scm_primitive_make_property + scm_primitive_property_ref + scm_primitive_property_set_x + scm_primitive_property_del_x + +These functions implement a new way to deal with object properties. +See libguile/properties.c for their documentation. + ** New function: scm_done_free (long size) This function is the inverse of scm_done_malloc. Use it to report the @@ -75,6 +566,34 @@ amount of smob memory you free. The previous method, which involved calling scm_done_malloc with negative argument, was somewhat unintuitive (and is still available, of course). +** New function: scm_c_memq (SCM obj, SCM list) + +This function provides a fast C level alternative for scm_memq for the case +that the list parameter is known to be a proper list. The function is a +replacement for scm_sloppy_memq, but is stricter in its requirements on its +list input parameter, since for anything else but a proper list the function's +behaviour is undefined - it may even crash or loop endlessly. Further, for +the case that the object is not found in the list, scm_c_memq returns #f which +is similar to scm_memq, but different from scm_sloppy_memq's behaviour. + +** New functions: scm_remember_upto_here_1, scm_remember_upto_here_2, +scm_remember_upto_here + +These functions replace the function scm_remember. + +** Deprecated function: scm_remember + +Use one of the new functions scm_remember_upto_here_1, +scm_remember_upto_here_2 or scm_remember_upto_here instead. + +** New function: scm_allocate_string + +This function replaces the function scm_makstr. + +** Deprecated function: scm_makstr + +Use the new function scm_allocate_string instead. + ** New global variable scm_gc_running_p introduced. Use this variable to find out if garbage collection is being executed. Up to @@ -84,20 +603,140 @@ collector has set this variable. But, this is an implementation detail that may change. Further, scm_gc_heap_lock is not set throughout gc, thus the use of this variable is (and has been) not fully safe anyway. +** New macros: SCM_BITVECTOR_MAX_LENGTH, SCM_UVECTOR_MAX_LENGTH + +Use these instead of SCM_LENGTH_MAX. + +** New macros: SCM_CONTINUATION_LENGTH, SCM_CCLO_LENGTH, SCM_STACK_LENGTH, +SCM_STRING_LENGTH, SCM_SYMBOL_LENGTH, SCM_UVECTOR_LENGTH, +SCM_BITVECTOR_LENGTH, SCM_VECTOR_LENGTH. + +Use these instead of SCM_LENGTH. + +** New macros: SCM_SET_CONTINUATION_LENGTH, SCM_SET_STRING_LENGTH, +SCM_SET_SYMBOL_LENGTH, SCM_SET_VECTOR_LENGTH, SCM_SET_UVECTOR_LENGTH, +SCM_SET_BITVECTOR_LENGTH + +Use these instead of SCM_SETLENGTH + +** New macros: SCM_STRING_CHARS, SCM_SYMBOL_CHARS, SCM_CCLO_BASE, +SCM_VECTOR_BASE, SCM_UVECTOR_BASE, SCM_BITVECTOR_BASE, SCM_COMPLEX_MEM, +SCM_ARRAY_MEM + +Use these instead of SCM_CHARS, SCM_UCHARS, SCM_ROCHARS, SCM_ROUCHARS or +SCM_VELTS. + +** New macros: SCM_SET_BIGNUM_BASE, SCM_SET_STRING_CHARS, +SCM_SET_SYMBOL_CHARS, SCM_SET_UVECTOR_BASE, SCM_SET_BITVECTOR_BASE, +SCM_SET_VECTOR_BASE + +Use these instead of SCM_SETCHARS. + +** New macro: SCM_BITVECTOR_P + +** New macro: SCM_STRING_COERCE_0TERMINATION_X + +Use instead of SCM_COERCE_SUBSTR. + +** New macros: SCM_DIR_OPEN_P, SCM_DIR_FLAG_OPEN + +For directory objects, use these instead of SCM_OPDIRP and SCM_OPN. + ** Deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL, SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, -SCM_ORD_SIG, SCM_NUM_SIGS +SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SYMBOL_SLOTS, SCM_SLOTS, SCM_SLOPPY_STRINGP, +SCM_VALIDATE_STRINGORSUBSTR, SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS, +SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY, +SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH, +SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR, +SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS, +SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP, +SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, SCM_SUBR_DOC, +SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, SCM_CONST_LONG, +SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY, +SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE. Use scm_memory_error instead of SCM_NALLOC. +Use SCM_STRINGP instead of SCM_SLOPPY_STRINGP. +Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_STRINGORSUBSTR. +Use SCM_FREE_CELL_P instead of SCM_FREEP/SCM_NFREEP +Use a type specific accessor macro instead of SCM_CHARS/SCM_UCHARS. +Use a type specific accessor instead of SCM(_|_RO|_HUGE_)LENGTH. +Use SCM_VALIDATE_(SYMBOL|STRING) instead of SCM_VALIDATE_ROSTRING. +Use SCM_STRING_COERCE_0TERMINATION_X instead of SCM_COERCE_SUBSTR. +Use SCM_STRINGP or SCM_SYMBOLP instead of SCM_ROSTRINGP. +Use SCM_STRINGP instead of SCM_RWSTRINGP. +Use SCM_VALIDATE_STRING instead of SCM_VALIDATE_RWSTRING. +Use SCM_STRING_CHARS instead of SCM_ROCHARS. +Use SCM_STRING_UCHARS instead of SCM_ROUCHARS. +Use a type specific setter macro instead of SCM_SETLENGTH. +Use a type specific setter macro instead of SCM_SETCHARS. +Use a type specific length macro instead of SCM_LENGTH_MAX. +Use SCM_GCMARKP instead of SCM_GC8MARKP. +Use SCM_SETGCMARK instead of SCM_SETGC8MARK. +Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK. +Use SCM_TYP16 instead of SCM_GCTYP16. +Use SCM_CDR instead of SCM_GCCDR. +Use SCM_DIR_OPEN_P instead of SCM_OPDIRP. +Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of SCM_WTA. +Use SCM_MISC_ERROR or SCM_WRONG_TYPE_ARG instead of RETURN_SCM_WTA. +Use SCM_VCELL_INIT instead of SCM_CONST_LONG. +Use SCM_WRONG_NUM_ARGS instead of SCM_WNA. +Use SCM_CONSP instead of SCM_SLOPPY_CONSP. +Use !SCM_CONSP instead of SCM_SLOPPY_NCONSP. ** Removed function: scm_struct_init +** Removed variable: scm_symhash_dim + +** Renamed function: scm_make_cont has been replaced by +scm_make_continuation, which has a different interface. + ** Deprecated function: scm_call_catching_errors Use scm_catch or scm_lazy_catch from throw.[ch] instead. +** Deprecated function: scm_strhash + +Use scm_string_hash instead. + +** Deprecated function: scm_vector_set_length_x + +Instead, create a fresh vector of the desired size and copy the contents. + +** scm_gensym has changed prototype + +scm_gensym now only takes one argument. + +** New function: scm_gentemp (SCM prefix, SCM obarray) + +The builtin `gentemp' has now become a primitive. + +** Deprecated type tags: scm_tc7_ssymbol, scm_tc7_msymbol, scm_tcs_symbols, +scm_tc7_lvector + +There is now only a single symbol type scm_tc7_symbol. +The tag scm_tc7_lvector was not used anyway. + +** Deprecated function: scm_make_smob_type_mfpe, scm_set_smob_mfpe. + +Use scm_make_smob_type and scm_set_smob_XXX instead. + +** New function scm_set_smob_apply. + +This can be used to set an apply function to a smob type. + +** Deprecated function: scm_strprint_obj + +Use scm_object_to_string instead. + +** Deprecated function: scm_wta + +Use scm_wrong_type_arg, or another appropriate error signalling function +instead. + Changes since Guile 1.3.4: @@ -188,6 +827,14 @@ space" for Guile headers. This means that the compiler only is given Implements the interface to documentation strings associated with objects. +** New module (ice-9 time) + +Provides a macro `time', which displays execution time of a given form. + +** New module (ice-9 history) + +Loading this module enables value history in the repl. + * Changes to the stand-alone interpreter ** New command line option --debug