TXR 89
                                   2014-05-11


  Bugs

  - The eql function was not handling floating-point values correctly.

  - The range and range* functions internally use numeric comparison for end
    test rather than eql, so that they can step through floating-point values,
    but use an integer boundary, or vice versa.

  - Fixed broken default argument handling in get-line, get-char and get-byte.

  - The functions ref, refset, replace, and update (and the DWIM brackets
    syntax based on them) were not handling lazy strings.

  - Fixed a bug in the pattern language: when a variable ends up bound
    to the empty string, a literal empty string object was used, and
    that was not handled in the matching language. Best illustrated
    by the test case "echo : | ./txr -c '@a:@a' -".



                                     TXR 88
                                   2014-04-04


  Features

  - New TXR Lisp macros: while, unless, until.

  - New functions empty and last.

  - copy and length functions take hash tables now.

  - Word list literals and word list quasiliterals.

  - Big improvements in efficiency of generational garbage collection.
    Situations when a backpointer to a fresh object is stored into a
    mature object now are precisely identified, eliminating GC pressure
    caused by conservatively wrong guesses.

  - TXR is now configured to build with Generational GC by default.

  Bugs

  - copy and length functions handle lazy strings now.

  - time-string-utc on Linux now renders %Z strftime code as "UTC" rather than
    "GMT". Not our issue: this is a workaround for library behavior.

  - Generational GC fix: a number of functions which mutate state weren't using
    the proper set macro.

  - Generational GC fix: the gc_mutated function was not correctly implemented
    and could cause reachable objects with their GC reachability flag to
    continue to be set after GC is done.



                                     TXR 87
                                   2014-03-22


  Features

  - New convenience functions tofloat, toint: convert string or number to
    integer or floating-point.

  - New macro: when.

  Bugs

  - int-flo function was failing on negative numbers.

  - Fixed long-standing syntax issue: directives of the pattern matching
    language being syntactically recognized in the @(output) clause and
    in string quasiliterals, interfering with the ability to invoke Lisp
    forms based on the same symbols. This issue really "hit home" with
    the recent introduction of the @(if) directive, causing
    @(if expr then else) to suddenly be inaccessible in @(output) and
    quasistrings.



                                     TXR 86
                                   2014-03-16


  Features

  - Exposed the implementation of tries to user code.

  - New functions: html-encode, html-decode.

  - New prof operator and pprof macro for simple profiling: time spent and memory
    allocated over the evaluation of an expression.

  - New functions sh and run for running system commands.

  - If available, sigaltstack is used when the program registers a handler for
    the SIGSEGV signal, allowing TXR programs to catch stack exhaustion and
    recover by throwing an exception.

  - New syntactic sugar in the pattern language: @(if)/@(elif)/@(else)/@(end),
    which works by transformation to a pattern involving @(cases) and @(require).

  - The @(empty) directive which plays a role in @(output) blocks has a new meaning
    in the pattern language for denoting an explicit empty match.

  Bugs

  - Fixed severe performance problem with regex on long strings, caused by feeding
    characters to the regex machine past the point that it is clear it will not
    accept any more.

  - Fixed broken horizontal matching under @(freeform) on long lines, due to bugs
    in the handling of the memory-saving optimization which consumes the prefix of
    the lazy string as scanning progresses.

  - Fixed breakage in sub-str over lazy strings.

  - Fixed possible crash in @(trailer) directive.

  - Fixed memory leaks on open-process: one that happened on every call, and one on
    failure of the fork function.

  - Fixed pipe-close deadlocks occurring in code that opens numerous pipes; solved
    by setting the close-on-exec flag on the pipe descriptors.

  - Fixed faulty argument defaulting logic in the functions: iffi, regex-parse,
    lisp-parse, regex-compile and Windows version of open-process.

  - Fixed regression in the random number module, causing the random function to
    ignore the seeded random state passed in as an argument, and rely on the global one.

  - Fixed a bug in a rarely used form of the backslash line continuation.

  - Fixed buggy argument quoting in Windows version of open-process.

  - The gc on/off state is now saved and restored as part of unwinding, so if
    code that turned off gc throws an exception, gc will be turned back on
    at the catch site.

  - Fixed incorrect calculation of malloc upper and lower boundaries, affecting
    the correctness of generational garbage collection.

  - In open process, if fdopen fails, kill the process more gently with SIGINT
    and SIGTERM rather than SIGKILL, and wait on it.

  - Syntax fix. @^a is not meta applied to the symbol ^a, but rather meta quasiquote a.



                                     TXR 85
                                   2014-03-07

  Bugs

  - Fixed a regression related to the *random-state* variable, 
    breaking all pseudo-random number functions.

  - Fixed broken "txr -v".



                                     TXR 84
                                   2014-03-07


  Features

  - TXR Lisp no longer uses one quote for regular quote and quasiquote syntax.
    The quasiquote character is now ^ and the apostrophe is just regular quote.
    This change breaks backward compatibility, unfortunately, but the
    single-quote experiment had to come to an end, now that TXR has a powerful
    macro facility, with quasiquotes playing a central role.

  - TXR Lisp exposes the environment manipulation functions make-env, env-vbind
    and env-fbind.

  - New function log10 for base 10 logarithms.

  - New functions open-files and open-files* for opening a big catenated stream
    which marches through multiple files as if they were one.

  - New directive, @(assert), for writing certain kind of robust matching code
    more simply.

  - put-line can be called with no arguments, in which case it just writes
    a newline to standard output.

  - In the format function, if a precision is specified as *, it can now
    have a leading 0 in front of it, which applies as usual (to the formatting
    of an integer which falls short of the number of digits required
    by the precision).

  Bugs

  - In the format function, the * character for specifying a variable
    field width or precision (derived from an integer argument) was broken.

  - Fixed a regression causing the exception "t is not a cons" on queries
    that match data, when no input files are specified.

  - Fixed a regression causing file names not to be tracked in the pattern
    matching language, and consequently error messages not to give that
    useful information.

  - Fixed some bugs related to command line processing, which had recently
    been rewritten: the element nil was being added to *args* in some situations,
    the argument - would end up repeated twice, and args was being sometimes
    manipulated in such a way that (ldiff *full-args* *args*) wouldn't work,
    due to new conses pushed onto *args* so that it's not a structural
    suffix of *full-args*.



                                     TXR 83
                                   2014-03-02


  Features
  
  - The qquote macro is now in the regular user namespace, while the 
    quasiquoting read syntax uses a different macro based on private symbols.
    So when the read syntax is used, the template can contain the symbols
    qquote, unquote and splice, even though these are the basis for
    a quasiquote macro.

  - Diagnosis of attempt to redefine a special operator as a function or macro.
    Remove the macro when a function of the same name is defined and vice-versa.

  Bugs

  - Fixed bugs in the implementation lexical variable shadowing by symbol
    macros.

  - Fixed incorrect handling of trailing atoms in quasiquote.

  - Redesigned the implementaton of special variables, and how they integrate
    with internal C global variables in the interpreter, in order to fix the
    broken dynamic overriding of the predefined globals.

  - The Lisp-1 style evaluation of the dwim operator or square brackets was not
    resolving over-ridden special variables correctly, using a lookup method
    that saw only the global bindings.

  - Fixed missing integration between catenated stream objects and the
    garbage collector.



                                     TXR 82
                                   2014-02-27


  Features

  - Intuitive behavior in various sequence processing in the library:
    don't try to output a string if the resulting items are not characters,
    and then fail; make a list.

  - All operators that were implemented as special code expanding hacks
    in the TXR Lisp code walker are have been converted to intrinsic
    macros. Only a few bona-fide special forms are subject to minor
    code transformations.

  - New generation macro called "gun". (gun (read-line stream))
    produces a lazy list of lines from a stream. gun, which stands
    for "generate until nil", evaluates the enclosed expression while that
    expression produces non-nil values, and makes a lazy list out of them.

  - New function copy, for copying sequences.

  - Documentation improvements thanks to Roman Mishin. 

  Bugs

  - Regression fix: error thrown on valid floating point constants.

  - Doc bugs: documentation was missing for the delay operator
    and the length function.


                                     TXR 81
                                   2014-02-25


  Features

  - Calls to stream opening functions can omit the mode parameter,
    which defaults to "r".

  - New functions for accessing environment variables from TXR Lisp,
    augmenting the @(next :env) method in TXR pattern language.

  - New variables *args* and *full-args* for accessing the
    partial and full command line.

  - New functions macro-form-p, macroexpand and macroexpand-1.

  - Implemented special variables (dynamic scope). All global variables
    defined with defvar and all the predefined variables are special,
    with the symbols being attributed for special binding similarly
    to Common Lisp.

  - Implemented the macrolet operator for binding local macros.
    The macroexpand and macro-form-p functions work correctly with
    the environment from a macrolet.

  - Implemented symbol macros: global symbol macros via defsymacro,
    and local macros via symacrolet. Local symbol maros are shadowed
    properly by lexical bindings, and are expanded properly in
    situations where they are used as assignment places by the
    set operator, and related operators.

  - Introduced the (. expr) syntax which is equivalent to expr.
    Handy for writing a function argument list that accepts
    only trailing parameters as (lambda (. rest) ...)
    rather than (lambda rest ...).

  - New functions prinl and pprinl, which are like print and pprint,
    but add a newline.

  - Added new Unix filesystem access functions: symlink, link, mkdir,
    readlink, mknod. Also makedev, minor and major.



  Bugs

  - Fixed broken seek-to-end-p boolean parameter in open-tail,
    a regression in TXR 71.

  - Fixed a regression in the debugger, also introduced in TXR 71,
    causing it not to print the data line being processed in a horizontal
    scanning context.

  - Fixed premature opening of data sources in the TXR pattern language.
    Opening files is now delayed until a data consuming directive
    needs to match data. The previous kludgy approach recognized only the
    @(next) directive, and only one occurrence of it.

  - Fixed incorrect square root calculation over bignums. It was
    not computing the last bit of the result and so could be off by
    one.

  - Numerous bugfixes in form expansion, in particular handling of
    variable bindings and function and macro parameter lists.

  - Global macro bindings make a symbol fboundp. Also, symbol-function
    retrieves information about a global macro.

  - Fixed several bugs in quasiquote, including the handling of 
    `(... . ,form) in quasiquote.

  - Fixed get-string-from-stream throwing an inappropriate internal error on
    type mismatch.

  - Fixed the neglect to expand Lisp forms in the argument lists
    of the directives of the pattern matching language.

  - Added the neglected s-ifsock variable, which is part of the Unix
    filesystem interface, corresponding to S_IFSOCK.

  - Fixed some instances of source code line number not propagating
    through code transformations.

  - Fixed numerous formatting issues in the documentation, and omissions.



                                     TXR 80
                                   2014-02-17


  Features

  - TXR now nicely handles null characters in text stream inputs.
    They are internally encoded to the Unicode value U+DC00,
    which will map back to a single null byte on output (that being
    existing behavior).

  - TXR now has Lisp macros: the defmacro operator is implemented,
    with destructuring lambda lists and all.

  - New operators tree-bind and tree-case for pattern binding similar
    to Common Lisp's destructuring. This piggybacks off the defmacro
    infrastructure which we now have.

  - Big improvement in debuggability: the unhandled exception error message now
    gives source code location information.

  - New functions pos, pos-if, posq, posql and posqual for finding item
    positions in sequences.

  - Predicate function is now optional in the some, all and none functions.

  - hash-uni and hash-isec functions take a join-func argument which
    lets you specify how elements from two tables are merged.

  - new hash table functions inhash and hash-update-1.

  - two hashes can now be tested for deep equality using equal.

  Bugs

  - Removed bogus optimization from hash table implementation.

  - Syntactic fix: input like 1.0a no longer parses as a floating-point number
    followed by a symbol, but is diagnosed as an error. Syntax like 123a
    continues to work as before: it denotes one symbol, not 123
    followed by a.

  - Bugfix in type check for "cobj" class objects that would crash if
    given non-heaped values like fixnum integers.

  - Corrected problems in the code walking and expansion of lambda and
    defun forms.

  - Fixed failure to propagate line number info through the abstract syntax
    of string quasiliterals.

  - Doc bugs: missing descriptions of gethash and gensym.



                                     TXR 79
                                   2014-02-11


  Features

  - New functions comb, perm, rcomp and rperm for calculating repeating and
    non-repeating combinations and permuations of sequences (lists, vectors and
    strings).  Hashes are supported by comb function.

  Bugs

  - Hardening of code for handling excessively large vectors.

  - Bugfix in quasistring handling in TXR Lisp.

  - Bugfix in if function (not the if operator).



                                     TXR 78
                                   2014-02-06


  Features

  - vec function for making a vector out of its arguments, to complement
    the existing vector function which makes a vector of a given size.

  - The dot position of function call forms can now apply strings and
    vectors. The same is true of the apply function.

  - The apply function now takes additional optional arguments before the list,
    similarly to Common Lisp's apply.

  - New function: list*.

  - Three-element forms for optional parameters are now supported;
    the variable can be specified, an initialization form used when the
    argument is omitted, and a symbol that is bound to a boolean indicating
    whether or not the argument is present. (Common Lisp style, IOTW).

  - New protocol for optional parameters: the colon symbol : can be
    passed as a value for an optional parameter, which causes that
    parameter to behave as if it were missing.

  - reduce-left and reduce-right can now use nil as the initial object,
    which is an useful and important behavior.

  - strings, vectors, lists and hashes are now generally callable like
    functions, not only in the DWIM operator or DWIM brackets notation.

  Bugs

  - Lexical scope of optional argument default init forms now properly
    restricted.

  - Fixed breakages in do operator.

  - Bugfix in logic for tracking source code file and line number info
    that would cause the info to disappear under garbage collection.

  - Fixed a erroneous exception throws in the mutation operator logic
    which would cause usage errors to turn into internal errors.



                                     TXR 77
                                   2014-01-30


  Features

  - More streamlined parser containing fewer hacks, and fewer obscure
    cases that don't work.

  - @'expr syntax now works as expected in directives for evaluating quoted
    TXR Lisp expressions.

  - In nested uses of the do and op operators in TXR Lisp there is now
    a way to refer to the outer parameters from the inner nestings, using
    compounded meta syntax like (op (op @1 @@1)), where @1 is argument 1
    of the function denoted by the inner op, and @@1 is argument 1 of the
    outer function.  Each additional @ "escapes" out one level of nesting
    of the op syntax.

  - New update and hash-update functions.

  - The interfaces of reduce-left and reduce-right functions has been
    improved, making them easier to use, while mostly retaining backward
    compatibility.

  - New functions remove-path and rename-path for removing and renaming
    filesystem objects.

  - Catenated streams, previously an internal feature, are exposed
    now via the make-catenated-stream function.

  - Scope rule change for expressions that provide default intialization
    for optional arguments. These eexpressions now have the parameters
    in scope, and so now uses like (lambda (x : (y (length x))) ...)
    are possible where y is initialized with (length x) if the argument
    is not supplied. Previously, parameter x would not have been considered 
    to be in scope of the expression (length x).

    

  Bugs

  - Fixed neglected handling of result form in dohash syntax.

  - In the object printer, the handling of syntax like @(sys:var x ...) was
    ignoring any additional ... forms, and rendering as @x.

  - Fixed possible race condition in tail streams, whereby when a file
    rotates, the stream prematurely follows the new file, neglecting
    to read the last piece of material just added to the previous file.



                                     TXR 76
                                   2014-01-23
                                   

  Features

  - New time functions: time-fields-local and time-fields-utc for obtaining
    broken-down time from Epoch seconds.

  - New group-by function for constructing a hash from a list when the
    list elements can be partitioned into equivalence classes tied to keys,
    rather than treated individually.

  - Sweeping changes in TXR List to allow vectors and strings to be manipulated
    in many situations as if they were lists. Functions like car, cdr and
    mapcar work on strings and vectors.

  - New command line options -e and -p for evaluating TXR Lisp expressions
    more conveniently from the command line.

  - The and, or and if special operators are now also provided as functions,
    so they can be indirected upon functionally.

  - New functions conses and conses*, useful for iterating over a list
    similarly to Common Lisp's maplist function.

  - New do operator (unrelated to @(do) directive) similar to op, but 
    geared toward doing imperative things involving special operators.

  Bugs

  - @(require ...) directive was not expanding its forms prior to evaluation.



                                     TXR 75
                                   2014-01-16


  Features
  
  - Two new stream functions: unget-char and unget-byte. Some streams now
    support ungetting a byte or character, which was a glaring omission
    in the API, without which some common scanning tasks are awkward.

  - TXR Lisp functions with optional parameters can now specify expressions
    to give those arguments values when the arguments are missing.

  - New operators in TXR Lisp: append-each and append-each*.

  - Change in the Lisp structure printer. The special structure generated by
    the read syntax @sym and @(...) now prints back in the same syntax,
    rather than as (sys:var sym) and (sys:expr ...).

  Bugs

  - Fix in put-byte function: before invoking the underlying operation,
    it was testing whether the put-char operation exists for the stream,
    rather than the put-byte operation. This would result in a crash if
    the stream supports put-char but not put-byte.
  
  - Mistake in calculating bitmasks for regex character class ranges,
    resulting in incorrect behavior for ranges whose upper range is
    a character code corresponding to the last bit of a word in the
    bitmask array, e.g. [A-\x7f], resulting in failures to match
    32 or more characters in the upper end of the range.

  - Missing documentation filled in for the functions throw, throwf and error.



                                     TXR 74
                                   2014-01-13


  Features

  - Maintenance: builds on Cygwin, MinGW and Mac OS X 10.7.3.

  - New math functions: n-choose-k, n-perm-k, cum-norm-dist.

  - lisp-parse function renamed read; old name is obsolescent.

  - In the TXR pattern language, the @ escape can now evaluate a non-compound
    TXR Lisp expression also. Previously compounds like @(+ 1 1) 
    were supported, but atoms like @foo were not.


  Bugs

  - Small fix in how exponent fields of printed floating point values
    are normalized. Across all platforms, there are now no leading zeros
    after the 'e'.
    


                                     TXR 73
                                   2014-01-08


  Features
  
  - The new lisp-parse function scans TXR Lisp expressions at run-time
    out of strings and streams, which means that TXR can now more easily keep
    persistent, complex data in text files.

  Bugs

  - Fixed signal-handling-related performance issue caused by excessive
    calls to the sigprocmask function.



                                     TXR 72
                                   2013-12-17


  Features

  - Syslog functionality: openlog, closelog, syslog, setlogmask.
    Plus: the *stdlog* stream for logging directly to syslog.

  - Stream properties.

  - logand and logior functions become variadic.

  - Signal handling support. TXR Lisp code can catch POSIX signals.

  - Syntax changes in the area of symbol names. Package prefixes are
    supported now, like foo:bar (symbol bar in package foo).

  Bugs

  - Nonsensical error diagnostics in intern and delete-package, in the
    case when a package doesn't exist.

  - defvar is documented now and behaves more similarly to the Common Lisp
    defvar.
  
  - seek-stream with a zero offset was reporting the current offset instead
    of seeking regardless of the value of the whence argument.

                                   

                                     TXR 71
                                   2013-12-07


  Features

  - New functions countqual, countql, countq and count-if.

  - New regex-parse function: parse regex from a string at run-time.

  - New *stdnull* stream for discarding data.

  - New function: seek-stream for positioning within a stream.

  - New function open-tail for opening a new kind of stream called a tail
    stream. This stream follows rotating log files.

  - New functions for converting a time expressed as individual fields
    into numeric time: make-time, make-time-utc.

  - New function daemon (where supported). Calls the BSD-derived daemon
    function to daemonize the process in one step.

  - New errno function for accessing C errno.

  - Real-time input support in pattern matching language, via "simple"
    lazy text stream line lists which sacrifice accuracy of representation for
    timely delivery.

  Bugs

  - Fixed missing recognition for hexadecimal integers in Vim
    syntax higlighting file txr.vim.

  - Fixed missing check for null handle in stdio back-end of flush-stream.

  - Grammar and spelling in HACKING guide.



                                     TXR 70
                                   2013-11-22


  Features

  - Fixed a nasty bug that affects all versions; I was not able to find
    a revision in git that works right with gcc 4.6.3. Invoking an @(accept) in
    the middle of a @(collect) was found not work at all as documented, and
    this was root-caused to my neglect to use volatile on some local variables.

  - Fixed a more recent regression in the op syntax, caused this October.

  - Fixed an amazing regression introduced in TXR 22, back in November 2009,
    easily reproduced using:
    
       echo ":x" | ./txr -c "@x:@x" -

  - Fixed all unintentional deviations from 1990 ISO C. GCC had
    not been diagnosing them for us due to my neglect to use
    the --pedantic flag.

  - Revamped and up-to-date txr.vim syntax file, for you Vim users.



                                     TXR 69
                                   2013-10-23


  Features

  - Multiple @(output) blocks can now continue on the same output stream, which
    is particularly useful if it is a pipe. 

  Bugs

  - Fixed errors in documentation for the functions time-string-local,
    time-string-utc and expt.



                                     TXR 68
                                   2013-10-07


  Features

  - @(repeat) inside @(output)  supports a :vars parameter, making it possible
    to declare the existence of iteration variables that are otherwise hidden
    within Lisp code.

  Bugs

  - Out-of-sequence numeric parameters can be used in the op operator now, like
    (op foo @2) where @1 is absent.

  - The implicit ". @rest" is now added to op forms only if they do not mention
    @rest or any numeric parameters, to prevent unintentional passing of extra
    parameters.

  - @rest or a numeric param like @1 can now be specified in the dot position
    of the op form, as in (op foo . @rest).



                                     TXR 67
                                   2013-07-13


  Features

  - New functions tok-str and string-cmp.
  
  - Internal lazy string functions exposed as intrinsics.

  - New pattern language directive: @(require ...).

  Bugs

  - Unrecognized backslash escapes in string literals
    and string quasiliterals are diagnosed.

  - Backslash-space escape recognized in string literals
    and string quasiliterals.



                                     TXR 66
                                   2013-05-16


  Features

  - Documentation completely filled in.

  - Added specfile for RPM builds.

  - @(repeat) introduced as shorthand for @(collect :vars nil).

  - New open-command and open-process functions. The open-pipe
    function becomes deprecated.

  - New multi-sort function for sorting two or more lists
    at the same time as if they were columns of a table.

  - assq and aconsq functions are renamed to assql and
    aconsql becuse they use eql equality, not eq.

  - New prop function for property list lookup.

  - New stat function for information about files.

  - New functions in hashing library: 
    - Copying hashes: make-similar-hash, copy-hash 
    - Set operations: hash-uni, hash-diff, hash-isec.

  - Gapingly missing hexadecimal integer constants have been
    implemented.

  - New bit operation functions that work with TXR's arbitrary precision
    integers: loand, logior, loxor, lognot, logtest, ash.

  - Test form in for loop can be omitted.

  - New package-related functions.

  - New functions for obtaining time of day and converting to text.

  Bugs

  - Fixed broken (+ <fixnum> <char>) case in addition.
    This fixes the range and range* functions too.

  - Fixed nonworking building in a separate directory.

  - Fixed broken eval function.

  - Bugfix in form expander's handling of regular expression
    syntax, causing the (set ...) notation for character
    sets being mistaken for the (set ...) assignment operator.
  
  - Bugfix in format: apply field formatting to argument
    not only if a nonzero with has been specified, but also
    if a precision has been specified.

  - Bugfix in format: ~s on a floating point number now
    always shows .0 except when a precision is given,
    and it is zero.

  - Fixed broken @(last) clause processing of @(collect),
    int he case when the last material matches at the end of a stream.

  - Fixed certain function applications not being able to
    call functions that have optional arguments with
    fewer than 



                                     TXR 65
                                   2012-04-20


  Features

  - New ways to iterate over hash tables using lazy lists.

  - Regular expression compiler expressed to user code, allowing TXR
    programs to build regex abstract syntax trees and turn them into
    regular expression machines.

  - The popular regular expression tokens \s, \d, \w and \S, \D, \W are now
    supported (the first three of these in character classes also).

  - Low level time-of-day functions added for retrieving epoch seconds,
    and optionally microseconds.

  - New remove-if and keep-if functions, plus lazy counterparts
    remove-if* and keep-if*.

  - Lazy variants remq*, remql* and remqual* added.

  - New function find-if.

  - Improved seeding of pseudo-random-number generator.

  - Configure script now diagnoses specification of nonexistent config
    variables.

  - Documentation improvements.

  - Portability to Mac OS/X 10.7 (Lion), NetBSD 5.1 and FreeBSD 9.0.

  Bugs

  - Bugfix in @(next) directive, which showed up when using @(next :args)
    more than once to scan arguments more than once.

  Quiet Changes

  - First two arguments to the find function were reversed.



                                     TXR 64
                                   2012-04-06


  Features

  - In the pattern language, binding the symbol nil as a variable
    is permitted now and has a special meaning of matching and
    discarding input.

  - Caching optimization in hash tables.

  - Ephemeral GC implemented. This is experimental and currently
    must be enabled at compile time with the --gen-gc configure
    option.

  Bugs

  - Interaction between @(trailer) and @(accept) has been clarified.
    An @(accept) return from the forms of a @(trailer) will still
    roll back the input position to the starting point for the
    @(trailer).





                                     TXR 63
                                   2012-03-30


  Features

  - Significant improvement in the performance of the garbage collector,
    which can drastically cut the run-time of some programs.
  - match-str and match-str-tree functions exposed.
  - new @(rebind) directive provides for a one step dynamic shadowing
    of a variable with a local variable, whose value can be derived from
    the one being shadowed.
  - filters now work on nested lists of strings, not just strings.
  - floating point formatting now produces the same exponential notation
    on different platforms, by post-filtering the sprintf output:
    a leading + and leading zeros are removed: e+023 becomes e23.
  - new functions: num-str, tan, asin, acos, =, 
  - min and max return the left operand rather than the right one,
    when two operands are equal.


  Bugs

  - search-str optional argument was not working when omitted.
  - Fixed situations involving an incorrect behavior: partial horizontal
    matches (not matching the full line) were succeeding.
  - It was impossible to define a pattern function called @(text)
    due to the use of the symbol text as an internal symbol, rather
    than a symbol in the private system package.
  - error checking code in funcall had an improperly terminated argument
    list, causing an exception.
  - @(output) blocks now flush their stream at the @(end), without
    which output is not correctly interleaved between output produced
    by external commands.
  - fixed some misleading exception wordings in the numeric library.
  - fixed sign semantics of floating-point mod to be like the integer mod.
  - gcd function allows zeros.
  - fixed broken exptmod: it was not normalizing bignum values that
    fall into the fixnum range into fixnum objects, resulting in 
    undersized bignums being returned.



                                     TXR 62
                                   2012-03-23


  Features

  - Floating-point support has been added. 
    - TXR programs can specify floating-point constants. 
    - Printing floting points is supported in the format function.
      - New specifiers: ~f and ~e.
    - Arithmetic on floating points, with implicit
      conversion. 
    - New / function which produces a floating-point result.
    - New functions like sin, cos, exp, and log.
    - Functions for converting between floating and integer,
      and parsing a float from a string.

  - New combinators for easier programming with higher order functions: chain,
    andf, orf, iff.

  - url_decode and url_encode functions take an optional parameter which
    determines whether + is used as the code for space, distinguishing
    URL encoding from percent encoding. Separate named filters are
    introduced: :frompercent, :topercent distinct from :fromurl and :tourl.

  Bugs

  - Buggy quicksort routine repaired. This is a recently
    added feature which allows vectors and strings to be sorted. 
    List sorting, done by merge sort, is unaffected.

  - Breakpoints can now be set by line number and file name, allowing
    breakpoints in loaded modules, not just the main module.

 
  
                                     TXR 61
                                   2012-03-15


  Features

  - URL encoding and decoding functions added, and :tourl/:fromurl
    filters implemented for output substitution.

  - split-str function works with regex objects now.

  - new regsub function for regex substitution in strings;
    matched text can be filtered through a function.

  - new *stddebug* stream used by debugger.

  - put-byte works on string output streams, and does right
    thing with mixtures of bytes (which are taken as UTF-8)
    and characters written with put-char.

  - Hash table literals implemented; hashes can now be notated
    rather than constructed.

  - Vectors can now be quasiquoted with unquote and splicing,
    and so can the new hash table literals.

  - @(block) syntax change: blocks do not extend to the end of
    the surrounding scope but introduce their own, delimited
    by @(end).

  Fixes

  - Fixed memory leak in string byte input stream.

  - Fixed wrong parsing of tokens in cases like @(collect-foo)
    where this was treated as @(collect -foo) rather than a single token.
  


                                     TXR 60
                                   2012-03-04


  Features

  - List element removing functions: remq, remql, remqual.

  - Memory use optimizations in @(freeform) horizontal scanning.

  - Improved hashing function for bignums.

  Bugs

  - Fixed incorrect processing within long lines, caused by
    earlier optimizations in 57.

  - Missing 'd' command for deleting a breakpoint implemented
    in the debugger.

  - numberp function no longer blows up on nil.

  - Fixed broken @(load) directive: was not allowing directives
    which follow it to be processed.

  - Fixed incorrectly formatted line number information in
    some exceptions.

  - Fixed missing support for optional and trailing parameters
    in defun.

  - Fixed showstopper bug in plus function.



                                     TXR 59
                                   2012-02-29


  Features

  - Implemented put-byte function on streams.

  - Regex syntax in TXR Lisp changes from /re/ to #/re/, allowing
    symbols containing slashes.

  - New -B command line option forces TXR to dump the bindings even
    if the program produced output.

  - Revised and improved txr.vim syntax highlighting file for greater
    lexical accuracy and superior flagging of errors.

  Fixes

  - Regression that broke [n..t] and [n..nil] sequence ranges.

  - Broken hex-escaped character literals.

  - Old bug from database: filter functions now see bindings in all
    contexts in which they are invoked.

  - Output clauses consisting of one empty line were being treated as empty.

  - Implemented more sane rule for deciding when output has taken place
    and suppress the printing fo bindings.



                                     TXR 58
                                   2012-02-25


  Features

  - Exception handling exposed in TXR Lisp.

  - range* function similar to range, but for generating a range with the
    endpoint excluded.

  - TXR Lisp can invoke a function in the pattern language now using
    the new match-fun function.

  - Braced variable syntax in @(output) extended to support arbitrary
    expressions in place of the variable name. The expressions are converted
    to text and then treated the same way as a variable substitution.
    Indexing is allowed, and field-formatting takes place.
    Moreover, these expressions are code-walked by @(repeat) and @(rep) to look
    for embedded variables.

  - New TXR Lisp functions ref, refset, sub and replace.

  - Indexing and range extraction in brace substitution in @(output) clauses is
    now generic over lists, vectors and strings.

  - Optional arguments introduced into TXR Lisp, in defun and lambdas,
    with a simple syntax involving a colon. Numerous intrinsic functions
    have been converted such that some previously required arguments
    are now optional.

  - Sort function that was previously for lists only is now generic over
    vectors and strings.

  - New del operator in TXR Lisp can delete elements of sequences or hashes
    which are denoted using the bracket syntax.

  - Range indexing has "floating zero" behavior now so that for
    example [seq -2 0] means the "last two elements": when the start of
    the range is negative, then a zero end is treated as length plus one.

  - TXR programs can now be split into multiple modules, using the load
    directive to load and run code.

  Bugs
  
  - range function terminates lazy list when the sequence overshoots
    the final value.

  - Variable that holds nil is treated as a list in (set [var x..y] ...)
    range assignment.

  - Vestigial (t . obj) representation in exception handling code removed.

  - TXR now does not not dump bindings if any output occured on a stream
    connected to the C stdout stream. Previously, it suppressed printing
    of bindings if @(output) was carried out on the *std-output* stream.

  - Function remhash was found to be buggy and rewritten.



                                     TXR 57
                                   2012-02-14


  Features

  - Operations under the @(freeform) directive can now scan in constant memory,
    allowing large files to be processed.  (Scanning a single regex still
    requires the data to be all in memory: an experimental patch for this
    exists.)

  - Improved printing of character position context in debugger when lines are
    long.

  - Metanums (@1, etc) can be used in a quasiliteral, which is useful for
    quasiliterals occuring inside the op notation.

  Bugs

  - lazy-flatten function did not handle atoms. This broke @(next :list expr)
    also, for the case where expr evaluates to a string atom.

  - In format, the ~s directive was found to be printing strings in the same
    way as ~a.

  - Hex and octal character constants did not work.

  - Control characters in strings and characters are printed as hex now rather
    than octal. A semicolon is added if the next character would be interpreted
    as part of the escape.

  - Hash indexing via the [] notation was still requiring the default value
    argument.



                                     TXR 56
                                   2012-02-06


  Features

  - Hex and octal escapes work in strings and quasilterals now: the
    documentation has stopped lying. 
    - Escapes can be followed by a semicolon which terminates them and is
      removed, which is useful if an escape is followed by characters
      that would otherwise be interpreted as part of the escape.

  - More color categories and more accurate syntax in Vim syntax
    highlighting file. Highlights @[...] syntax properly inside quasiquote.

  - The third argument (the default value if a key is not found) can be omitted
    when indexing hashes with the [hash key] syntax. It defaults to nil.

  - The dwim operator (and thus [] syntax) is even more Lisp-1 like. It
    now has Lisp-1 namespace semantics for evaluating arguments
    that are symbols.

  - A new operator called "op" as been added. This allows simple lambda
    functions to be written as partial evaluatios of functions, with implicit
    arguments as well as numbered/rest arguments appearing in the body.


  Bugs

  - Fixed missing type check in hash module that allows bad code
    to crash interpreter instead of getting an excepion.

  - Fixed regression in TXR 55 which broke computed field widths in output
    variables.

  - Fixed incorrect UTF-8 decoding of some code points.

  - Closed several security holes in UTF-8 decoder by recognizing all invalid
    UTF-8 sequences, and mapping invalid bytes in such a way that any byte
    sequence processed by the decoder into Unicode code points will be
    recovered exactly when encoded back into UTF-8.



                                     TXR 55
                                   2012-01-26


  Features

  - New square bracket syntax for Lisp-1 like invocation
    and array-indexing over lists, vectors, strings and hashes.

  - New a .. b pair syntactic sugar for (cons a b).
    Works with array indexing brackets to extract ranges
    (slices) from lists, vectors and strings.

  - Indexed elements and slices are assignable.

  - In the pattern language, variables in output templates (output variables)
    can be indexed and sliced.
  
  - Output variables that hold lists are now interpolated with spaces
    between, and this can be overridden with any separator string.



                                     TXR 54
                                   2012-01-21


  Features

  - Improved debugger: 
    - step into
    - step over
    - finish
    - backtrace for pattern and TXR Lisp functions.
    - dump more complete environment. 

  - Debugging support can be disabled at compile time: configure
    with --no-debug-support.

  - New lazy append function (append*).



                                     TXR 53
                                   2012-01-11


  Features

  - In variable substitutions in output and quasiliterals, the field
    width expression is now evaluated.

  - TXR Lisp:

    - New operators and functions for generating lazy lists more conveniently. 
    - lazy mapcar and mappend: return lazy list.
    - delay and force operators.
    - parallel iteration/collection over lists.
    - list-str function for splitting string into list of characters.

  Bugs

  - Fixed global buitin variables, broken in 52. Properly implemented
    intended fix.



                                     TXR 52
                                   2012-01-07


  Features

  - @(rep) and @(repeat) now take an keyword argument, :counter.
    This specifies the name of a variable which holds the repetition
    count, thus making the count available within the repeated body.

  - New @(mod) and @(modlast) clauses in repeat/rep, allowing special
    behaviors to be coded based on whether the repetition count is
    a particular value modulo some number.

  - @(gather) directive now supports an @(until)/@(last) clause,
    so the search range can be restricted.

  - New directive @(fuzz) for doing an imprecise match over a range
    of lines, similar to the context line fuzz logic in the patch utility.

  - gensym function added to TXR Lisp, along with a *gensym-counter*
    global variable.

  Bugs

  - Fixed a regression in repeat/rep triggered when multiple clauses of the
    same type appear (like two occurences of @(last)).

  - Built-in global variables in TXR Lisp now properly denote the
    underlying C variable locations, rather than holding copies of the values
    of those variables.  If you assign to *stdout*, it will now really replace
    the stdout stream stored in the corresponding C variable (std_output), so
    it has the proper global effect. Previously, this action would just
    replace *stdout* with a new value, without any effect on std_output.



                                     TXR 51
                                   2011-12-28


  Features
  
  - Better algorithm in the random function for generating evenly-distributed
    pseudo-random numbers of arbitrary precision.

  - PRNG startup behavior improved.

  - New lazy-flatten function for flattening lists lazily. Used within
    @(next :list ...) implementation, making it possible to scan through
    Lisp-generated lazy lists.

  Bugs

  - Fixed showstopper bug introduced in a patch for the MPI library,
    affecting 32 bit platforms.

  - Fixed bug in Lisp expression interpolation in quasiliterals.

  - Fixed fatal exception being thrown in verbose mode, by one of
    the formatted print statements.



                                     TXR 50
                                   2011-12-23


  Features
  
  - Dropped silly leading 0 from version number. :)

  - New vector functions: copy-vec, sub-vec, cat-vec.

  - New API for pseudo-random-number generation, complete with
    independent random state objects that can be seeded and copied.

  - Vim syntax highlighting definition improvements.

  - In the format function, left-adjustment is specified using <
    rathr than the - character. (However a negative width specified
    as an argument using * still means left adjust.)  The leading
    zero for zero padding as well as the sign character (space or +)
    are specified in the precision field, not the width field.

  - More complete documentation.

  - Slight return value convention change in some and all functions.

  - Added memql function.

  Bugs

  - Critical flaw in hashing fixed that could crash on some platforms.

  - Exception handling fix: if a catch clause performs a
    non-local exit, the finally clause is still executed.

  - "make distclean" fixed.

  - Fix for differences in syntax error diagnosis between Byacc and Bison.

  - Fixed a memory leak in a division-by-zero case in the bignum mod
    function.

  - Fixed a terrible bug in one of the MPI patches affecting the correctness
    of various operations on numbers having a 1 in the most significant
    bit position of the most significant digit word.

  - Fixes in format function. All objects obey field width and left/right
    alignment. Numeric precision, zero padding and optional sign all works.

  - Lisp code evaluated in @(repeat)/@(rep) clauses can now see all variables,
    not just the ones subject to the repeat. (But whether or not a repeat
    executes, or which clauses, is still independent of what variables
    are accessed by the embedded Lisp, taking into account only the variables
    directly embedded in the clause.)



                                    TXR 049
                                   2011-12-19


  Features

  - New functions for converting between characters and integers.

  - Some arithmetic and relational operations are generic over characters in a
    way that makes sense.

  - dohash establishes anonymous block.

  - Improvements in Vim syntax highlighting file.

  - Lazy cons semantics cleaned up making lazy list programming easier.

  - Some API renaming and restructuring in the area of vectors.

  - Semicolon comments supported in Lisp code and @; comments in the pattern
    matching language. @# becoming obsolescent.

  - Not function, synonym for null.
  
  - Some progress in TXR Lisp documentation.

  - Hashing functions improved for fixnums, literals and characters.

  - API for introspecting over interpreted functions added, in anticipation
    of doing some compiler work.

  - Quasiliteral strings supported in TXR Lisp.

  Bugs

  - Broken abs function fixed for bignums.

  - mappend semantics clarified and fixed: behaves like append for
    improper lists and atoms.
 
  - Bugfix in code walker for let/let* forms, which resulted in quasiquotes
    not being expanded.

  - Fixed incorrect format arguments in some error messages, resulting
    in aborts in some error cases, instead of the intended diagnostics.



                                    TXR 048
                                   2011-12-13


  Features

  - New functions: expt, exptmod, sqrt, numberp, evenp, oddp, abs, gcd
    reduce-left, reduce-right.

  - Replaced horribly slow square root in MPI with a less horribly slow one.

  Bugs

  - Fixed numerous instances, in the MPI library, of coding broken
    for mpi_digit wider than 16 bits, leading to incorrect results and
    crashes.

  - Fixed mpi_int for 32 bit platforms so that obj_t stays 4 pointers wide.
    (The sign becomes a 1 bit wide bitfield).



                                    TXR 047
                                   2011-12-12


  Features

  - Transparent bignum arithmetic: when operations on machine word (fixnum)
    integers overflow, multi-precision (bignum) integers are produced.

  - TXR Lisp:

    - New operators: progn, flip.
    - Vector functions added, and vecref is an assignment place.
    - Character manipulation functions.
    - Association list functions.
    - Implicit anonymous block around forms for loop.
    - Implicit named block around forms for loop.
    - Nump renamed to fixnump.
    - Push arguments reversed: (push obj list).

  - Syntax highlighting definition update for all new operators.

  Bugs
  
  - Another bugfix to character literals, allowing non-alphanumeric
    constants like #\$.

  - Fix in rplacd to make lazy list programming feasible.

  - Reversed assoc and assq arguments throughout codebase.

  - Debugger: repeating last command by pressing Enter works again.



                                    TXR 046
                                   2011-12-06


  Features
  
  - Vector-related functions exposed in Lisp interpreter.

  - Syntax added for specifying vector literals in code.

  - Length function made generic over strings, lists and vectors.

  Bugs

  - Broken get_line function over string input streams fixed.

  - Some kinds of character literals were not being recognized properly.

  - bugfixes in configure script, affecting 64 bit Mac OS X. Thanks
    to Andy Wildenberg for reporting issue and confirming root cause.



                                    TXR 045
                                   2011-12-05


  Features
  
  - New functions exposed in Lisp interpreter: strings, characters,
    symbols and lazy lists.

  Bugs

  - Flaws in some string-splitting functions identified and fixed.

  - Bugs in quasiquote.

  - Handling of singleton clauses in cond operator.



                                    TXR 044
                                   2011-12-01


  Features

  - Lisp interpreter added.

  - Relaxed rules for what constitutes symbol names.


  Bugs

  - Regression in source location tracking (line numbers
    shown in debugger and trace output).

  - Regression in vertical skip directive caused it to ignore
    its arguments.

  - Fixed :vars () in collect/coll not working as intended.
    This should prevent any bindings from being collected, and
    allows iteration with collect without accumulating memory.

  - Two-year-old bug in weak hash tables.




                                    TXR 043
                                   2011-11-23


  Bugs

  - Buggy @(eol) directive fixed.

  - Semantics change for text and regular expressions in "negative match":
    - a variable is considered to be followed by a run of text which
      consists of any mixture of regexes and literal text
    - thus @foo bar behaves properly once again; it is not treated
      as foo followed by the regex / +/, ignoring the text bar.

  - Infinite looping bug in negative match with longest-match semantics.

  - Bug in the overflow detection in the lib.c plus and minus function.




                                    TXR 042
                                   2011-11-20


  Features

  - Access to environment via @(next :env)
  - New @(gather) directive for matching out-of-order material.

  - Horizontal functions:
    - TXR can now parse grammars.
    - Variable syntax allows capture of text spanned by function calls:
      e.g. @{var (func x y)}: text spanned by (func x y) goes into var.

  - Horizontal modes for numerous directives such as @(bind), @(local), ...

  - Lisp-style bindings output.

  - Interactive breakpoint/step debugger added.
    This is an experimental prototype, but already quite useful.

  - Directives following a variable match have searching semantics now,
    as do function calls. @a@(foo) will scan for a match for @(foo),
    and the text skipped over is captured by a.

  - New :resolve keyword in @(some) directive allowing conflicting
    variable bindings to be set in separate clauses and resolved.

  - deffilter is more powerful: arguments are evaluated so filters can
    be computed by the query.

  Bugs

  - Horizontal @(some) directive hooked in.

  - @(freeform) with no data fails to match instead of throwing strange error.

  - Setting non-local variables from a function works now.

  - Stability fix: several long-time uninitialized variable bugs found,
    and some faulty object initialization orders.

  - :vars in @(collect)/@(coll) does not fire an exception about missing
    required variables if no variable bindings are produced at all,
    allowing strict collects to have explicit matches for unwanted material
    without triggering this nuisance error.

  - @(repeat)/@(rep) allow empty body.

  Internal

  - New infrastructure for matching location info to source forms.
    Location info (currently just the line number) is associated with
    source forms via a weak hash table.

  - Character literals are now Lispy (hash-backslash syntax), based on Scheme.

  - Added quote, unquote and splicing syntax similar to Lisp. Not used
    for anything yet.

  - Improved Valgrind integration: more accurate, timely detection of
    uninitialized fields in heap objects.

  Misc.

  - A TXR syntax highlighting file for the Vim editor exists
    now. See the txr.vim file.




                                    TXR 041
                                   2011-10-30


  Features

  - New :append keyword in @(output) to append instead of overwriting.

  - Variable contents can be treated as input sources using :string
    and :list keywords in @(next). Variables can be treated as output
    destinations using :into keyword in @(output).

  - New @(set) directive for destructive assignment to a variable.

  - New filters: :upcase and :downcase.

  - @(bind) can now compare left and right objects through filters.

  - Filters can now be chained into compound filters.

  - Pattern matching functions can be used as filters.

  - Shorthand notation in @(deffilter) when multiple strings map to the
    same replacement string.

  - @(cat) directive changes syntax.

  - Error handling improvements in parser: no more reams and reams of
    errors.


  Bugs

  - Runaway recursion in @(block) directive, introduced in 040.

  - Fixed bug in matching list variable against text, at the same
    time clarifying semantics to longest-match.

  - Fixed potential excessive memory use caused by refactoring in 040.