"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "q-7.11/ChangeLog" of archive q-7.11.tar.gz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 2008-02-23  Albert Graef  <Dr.Graef@t-online.de>
    2 
    3 	+ 7.11
    4 
    5 	* modules/clib/system.q, system.c: support for highres timers
    6 
    7 	New functions (nanotime, nanosleep, etc.) are provided to access
    8 	the POSIX 1003.1-2001 timer functions (clock_gettime et al). The
    9 	interface supports all the available standard (realtime,
   10 	monotonic, cpu process and thread) timers.
   11 
   12 2008-02-22  Albert Graef  <Dr.Graef@t-online.de>
   13 
   14 	* src/sys.c: support for highres timers
   15 
   16 	On systems where clock_gettime or gettimeofday is available, they
   17 	will be used for the builtin time function instead of ftime/time.
   18 
   19 	* modules/clib/clib.c: bugfix: timeout for await is specified in
   20 	seconds, not milliseconds
   21 
   22 	new: allow timeouts to be specified with try function on mutexes
   23 	and semaphores
   24 
   25 	This allows mutexes and semaphores to be locked/read with an
   26 	absolute timeout value, using try (MUTEX,TIME) or try (SEM,TIME)
   27 	instead of just try MUTEX or try SEM. This works analogously to
   28 	await (COND,TIME) which has always been available.
   29 
   30 	NOTE: The new try timeout functionality is only available on newer
   31 	systems which already have the pthread_mutex_timedlock and
   32 	sem_timedwait routines in the POSIX threads library. Otherwise the
   33 	timeout value will just be ignored, i.e., the routines will return
   34 	immediately (as if no timeout value was specified).
   35 
   36 2008-02-21  Albert Graef  <Dr.Graef@t-online.de>
   37 
   38 	+ 7.11 RC3
   39 
   40 	* stdlib/bag.q, dict.q, hdict.q, set.q: improved AVL tree
   41 	implementation for the container types by Jiri Spitz
   42 
   43 	The improved algorithm has its origin in the SWI-Prolog
   44 	implementation of association lists by R.A.O'Keefe and Jan
   45 	Wielemaker (see assoc.pl at http://www.swi-prolog.org). Jiri
   46 	rewrote the algorithm in Q and also added the deletion operations
   47 	which were missing in the Prolog version. While the original
   48 	implementation (following Bird/Wadler) was more straightforward
   49 	and looked a bit nicer, tests indicate that updating the new data
   50 	structures is at least twice as fast for large trees, quite a
   51 	notable improvement!
   52 
   53 2008-02-16  Albert Graef  <Dr.Graef@t-online.de>
   54 
   55 	* modules/odbc/odbc.c, odbc.q: add odbc_tables, odbc_columns,
   56 	odbc_primary_keys, odbc_foreign_keys functions to retrieve
   57 	information about tables in the current database
   58 
   59 2008-02-15  Albert Graef  <Dr.Graef@t-online.de>
   60 
   61 	* modules/odbc/examples/odbc_examp.q: fix up sample menagerie
   62 	database so that it works with strictly ANSI-compliant RDBMS's
   63 	without any ado
   64 
   65 	* modules/odbc/odbc.c, odbc.q: add odbc_typeinfo function
   66 	(interface to SQLGetTypeInfo()), as suggested by Tim Haynes
   67 
   68 2008-02-14  Albert Graef  <Dr.Graef@t-online.de>
   69 
   70 	* modules/odbc/odbc.c, odbc.q: add odbc_getinfo function (direct
   71 	interface to SQLGetInfo())
   72 
   73 2008-02-12  Albert Graef  <Dr.Graef@t-online.de>
   74 
   75 	+ 7.11 RC2
   76 
   77 	* modules\odbc\examples\odbc_examp.q: fixes for compatibility with
   78 	MS Access
   79 
   80 	Unfortunately this isn't automatic yet, as the current workaround
   81 	doesn't work with other databases, but there's a single line in
   82 	the config section at the beginning of odbc_examp.q which you can
   83 	uncomment to make this example work with MS Access on Windows.
   84 	Note that you also have to create an ODBC data source named
   85 	"myodbc" before you can initialize the sample tables with the
   86 	'init' routine.
   87 
   88 2008-02-12  Albert Graef  <Dr.Graef@t-online.de>
   89 
   90 	* modules/odbc/odbc.c (set_arg, sql_exec): bugfixes in parameter
   91 	binding and error checking of SQLBindParameter() calls
   92 
   93 	This also works around some bugs in the MS Access ODBC driver,
   94 	which causes it to reject NULL and empty string parameter values
   95 	in SQL insert statements. (Bug reported by Jiri Spitz.)
   96 
   97 2008-01-23  Albert Graef  <Dr.Graef@t-online.de>
   98 
   99 	+ 7.11 RC1
  100 
  101 	* modules/clib: move glob and regex functions from system back
  102 	into clib
  103 
  104 2008-01-22  Albert Graef  <Dr.Graef@t-online.de>
  105 
  106 	* modules/clib/clib.q, modules/clib/clib.c: add support for
  107 	reading and writing slices of byte strings in addition to single
  108 	elements
  109 
  110 	More specifically, the get_xxx operations can now be invoked with
  111 	a pair of indices (I,J) to get a slice from a byte string. This
  112 	works like sub/bsub, but uses indices relative to the element
  113 	type. Likewise, the put_xxx operations can now be invoked with a
  114 	byte string argument rather than a single element, to replace an
  115 	entire slice of a byte string with a single operation.
  116 
  117 2008-01-18  Albert Graef  <Dr.Graef@t-online.de>
  118 
  119 	* modules/clib/clib.q, modules/clib/clib.c: add int/float vector
  120 	operations, as suggested by John Cowan
  121 
  122 	These allow you to treat byte strings as mutable C vectors of
  123 	signed/unsigned 8/16/32 bit integers or float/double values.
  124 	Operations to convert between such C vectors and corresponding
  125 	lists of integers/floating point values are provided as well.
  126 
  127 2008-01-17  Albert Graef  <Dr.Graef@t-online.de>
  128 
  129 	* src/uchar_props_data.c: updated to latest from ICU 3.8
  130 
  131 2008-01-16  Albert Graef  <Dr.Graef@t-online.de>
  132 
  133 	* bump version number, update docs
  134 
  135 	* src/qbase.c: added \&entity; escapes to string syntax, per
  136 	request by Rob Hubbard
  137 
  138 	As suggested by John Cowan, the supported entity names follow the
  139 	W3C "XML Entity definitions for Characters", as of W3C Working
  140 	Draft 14 December 2007. See: http://www.w3.org/TR/xml-entity-names/
  141 
  142 2007-12-16  Albert Graef  <Dr.Graef@t-online.de>
  143 
  144 	+ Release 7.10
  145 
  146 	* modules/clib/clib.c, modules/clib/system.c, modules/clib/clib.q,
  147 	modules/clib/system.q: moved SIG* and SCHED* constants from
  148 	system.q to clib.q
  149 
  150 	* modules/clib/system.c: add missing coerce_float function (bug
  151 	reported by Ryan Schmidt)
  152 
  153 2007-12-07  Albert Graef  <Dr.Graef@t-online.de>
  154 
  155 	+ Release 7.9
  156 
  157 	* src/qmparse.y: fix unhandled "External object" exceptions
  158 
  159 	These are now translated to ordinary syntax errors (except when
  160 	parsing variable dumps, where, as before, they are silently
  161 	ignored), and thus make val/valq fail instead of throwing an
  162 	exception (which couldn't even be caught with catch).
  163 
  164 	* src/qc.y: fix broken error rule
  165 
  166 	Since we now return an artificial EOFTOK token at end-of-file, the
  167 	parser was looping in error recovery at eof (bug reported by Rob
  168 	Hubbard).
  169 
  170 2007-12-01  Albert Graef  <Dr.Graef@t-online.de>
  171 
  172 	* src/qm.c, src/qmfuns.c (qmfreads): get rid of the reads mutex
  173 
  174 	This doesn't seem to serve any real purpose any more, and is a
  175 	very bad idea anyway. So let's see how well we can live without
  176 	it.
  177 
  178 2007-10-27  Albert Graef  <Dr.Graef@t-online.de>
  179 
  180 	* src/q.c, src/qc.y: enlarge the opts string holding the options
  181 	message, to prevent buffer overflow (bug reported by Gerard
  182 	Milmeister)
  183 
  184 2007-10-21  Albert Graef  <Dr.Graef@t-online.de>
  185 
  186 	* src/qctables.c (dclfun): allow extern redeclarations of
  187 	constructors
  188 
  189 	These may be emitted by q-swig, and are useful in particular for
  190 	virtual constructors which are implemented in C.
  191 
  192 2007-10-20  Albert Graef  <Dr.Graef@t-online.de>
  193 
  194 	* doc/qdoc.texi: fix some glitches in the reference sequence
  195 	examples (Section 12)
  196 
  197 2007-10-15  Albert Graef  <Dr.Graef@t-online.de>
  198 
  199 	+ Release 7.8
  200 
  201 	* src/qcrules.c, src/qm.c: fix up treatment of irrefutable matches
  202 	and lhs where clauses in the debugger
  203 
  204 	Just optimizing away irrefutable matches confuses the debugger, so
  205 	we now generate a dummy MATCHOP instruction for the non-existing
  206 	start state -1 instead. Also fixed a bug in the debugger which
  207 	caused it to use a wrong stack offset for the local variables when
  208 	working on a secondary rule depending on shared variables defined
  209 	in an earlier "master" rule.
  210 
  211 2007-10-05  Albert Graef  <Dr.Graef@t-online.de>
  212 
  213 	+ 7.8 RC2
  214 
  215 	* src/qclex.l (sym_import): only import _public_ symbols in
  216 	automatic qualified import
  217 
  218 2007-10-04  Albert Graef  <Dr.Graef@t-online.de>
  219 
  220 	* modules/clib/system.q: remove bogus import clause
  221 
  222 	* src/qc.y: prevent potential segfaults on bad symbols
  223 
  224 	+ 7.8 RC1
  225 
  226 	* examples/rot13.q: added
  227 
  228 	* stdlib/string.q: make generic list operations work on strings:
  229 	all, any, append, cat, cons, do, dowith, dowith3, drop, dropwhile,
  230 	filter, foldl, foldl1, foldr, foldr1, hd, init, last, map, pop,
  231 	push, reverse, scanl, scanl1, scanr, scanr1, take, takewhile, tl,
  232 	top, zip, zip3, zipwith, zipwith3; new mkstr operation
  233 
  234 	This was suggested by Alexander Nickolsky in private mail a while
  235 	ago. As a result, all common list operations can now be used on
  236 	strings and will do The Right Thing there, too (hopefully).
  237 
  238 	This doesn't really turn strings into lists (the internal string
  239 	representation hasn't changed and occasionally you still have to
  240 	use strcat and chars to convert from/to lists), but for many
  241 	purposes string values can now be used just like special list
  242 	values.
  243 
  244 	Note that, as 'cat' and 'map' are now defined on strings, strings
  245 	can now even be used as sources in binding clauses of all types of
  246 	comprehensions. E.g.: strcat [C-1 : C in "IBM"] ==> "HAL".
  247 
  248 	* stdlib/reftypes.q: make get, fill, put and putmap work on all
  249 	reference containers which have a 'list', 'list2' or 'vals'
  250 	function; add support for 2D sequences
  251 
  252 2007-10-03  Albert Graef  <Dr.Graef@t-online.de>
  253 
  254 	* stdlib/reftypes.q: update construction and update functions to
  255 	make use of the new map and do functions on tuples
  256 
  257 	In particular, this resolves a performance issue, pointed out by
  258 	John Cowan, with the reference tuple update function which in the
  259 	prototype implementation would need linear space. Now a 'put'
  260 	applied to a reference tuple and a corresponding value tuple only
  261 	needs O(1) space, as one might reasonably expect.
  262 
  263 	Also: Moved the ':=' assignment operator to clib.q, where it
  264 	really belongs, and made the dereferencing index operator '!!' 
  265 	more generic so that it will work with any indexed reference
  266 	container.
  267 
  268 	* stdlib/stdlib.q etc.: refactoring of the standard library
  269 
  270 	Moved the string operations in stdlib.q to string.q, and the tuple
  271 	operations to a new tuple.q module. Moreover, the following
  272 	operations have been extended to also work with tuples: cat, map,
  273 	do, dowith, dowith3, reverse. The tuple versions of map and the
  274 	do/dowith functions all run in constant space, which is necessary
  275 	to implement efficient "in-place" updates of reference tuples;
  276 	this performance issue with the prototype implementation in
  277 	reftypes.q was pointed out by John Cowan. streamcat has been made
  278 	to work with tuples as well. This now also makes tuples work in
  279 	binding clauses of all types of comprehensions.
  280 
  281 	* src/opcode.h, src/qc.y, src/qctables.c, src/qmparse.y,
  282 	src/qmprint.c, src/qmfuns.c, stdlib/prelude.q, stdlib/cond.q: add
  283 	tuple enumerations and comprehensions
  284 
  285 	These now work just like list enumerations and comprehensions,
  286 	including the usual syntactic sugar, you just have to replace the
  287 	brackets with ordinary parentheses. Note that right now binding
  288 	clauses in tuple comprehensions still draw values from lists or
  289 	streams, only the result is a tuple. (This has been fixed already;
  290 	see above.)
  291 
  292 	Right now, both constructs are actually implemented in terms of
  293 	the corresponding list constructs and use the 'tuple' function to
  294 	convert the end result to a tuple. This seems to be reasonably
  295 	efficient, though.
  296 
  297 2007-10-02  Albert Graef  <Dr.Graef@t-online.de>
  298 
  299 	* stdlib/reftypes.q: new module to work with reference tuples,
  300 	lists and streams, as discussed on the mailing list (based on a
  301 	proposal by John Cowan)
  302 
  303 	* stdlib/stdlib.q: add missing mktuple function
  304 
  305 	* src/q.c, src/qc.y, src/qctables.c: new '--paranoid' option
  306 
  307 	* src/qc.y (main): set default warning level from QWARN
  308 	environment variable
  309 
  310 	* src/qclex.l, src/qctables.c: fix treatment of "self" qualifiers
  311 
  312 	If a module contains qualids referring to itself, e.g. 'foo::bar'
  313 	in module 'foo', these would stop working if the module was
  314 	imported under an alias (e.g. import foo as myfoo). We now check
  315 	the "real" module name to correctly handle this case.
  316 
  317 	* stdlib/stdtypes.q: move view definitions to the individual
  318 	modules, so that these can be imported separately
  319 
  320 	* doc/q.1, doc/qdoc.texi: updated documentation
  321 
  322 2007-09-29  Albert Graef  <Dr.Graef@t-online.de>
  323 
  324 	* bump version number (we're about to release 7.8 RC1 now)
  325 
  326 	* src/qclex.l: allow operator symbols in qualified import and
  327 	include clauses
  328 
  329 	* examples/*.q, modules/*/examples/*.q: fix up examples for the
  330 	slim prelude
  331 
  332 	* src/qmparse.y (whois): New 'whois' command which is an improved
  333 	version of the existing 'whos' command. Also fixed some bugs in
  334 	the new implementation of 'whos'.
  335 
  336 	'whois' works like 'whos', but also reports under which fully
  337 	qualified names the given symbols are actually available in the
  338 	global namespace. This is similar to the format used by whos when
  339 	it reports an ambiguous symbol, and is rather useful as whos only
  340 	reports the "normalized" (unaliased) symbols a given name refers
  341 	to. The whois command now also makes it possible to determine
  342 	exactly which symbols, from which modules visible in the global
  343 	namespace, match the given symbol (function/variable identifier or
  344 	operator).
  345 
  346 	NOTE: It would be even better if we could report *all* visible
  347 	aliases of a given symbol (even if they don't have the same
  348 	printname as the given symbol), but this would be rather slow with
  349 	the current implementation of the symbol table (and couldn't be
  350 	supported efficiently without adding major bloat).
  351 
  352 	* src/qmparse.y (whos): whos command now also gives line numbers
  353 	for each symbol
  354 
  355 	Please note that the line numbers reported by whos just denote the
  356 	first occurrences of a symbol. Often this will be the position of
  357 	the definition or declaration of a symbol, but as the Q language
  358 	allows you to use a symbol before (or even without) defining or
  359 	declaring it, this isn't always the case.
  360 
  361 	* src/qctables.c (unresolved_forwards): at long last, -w reports
  362 	the proper line numbers of undeclared symbols
  363 
  364 2007-09-28  Albert Graef  <Dr.Graef@t-online.de>
  365 
  366 	* src/qmparse.y (whos): let the whos command print possible
  367 	alternatives in case of an ambiguous symbol name, instead of just
  368 	aborting with an error message
  369 
  370 	* src/q.c, src/qc.y, src/qclex.l: allow '-' as the main script to
  371 	read script from stdin
  372 
  373 	* src/qc.y, src/qclex.l, src/qctables.c: alias code refactoring
  374 	and bugfixes
  375 
  376 	Cleaned up the code processing identifiers in special declaration
  377 	contexts, and fixed a related long-standing bug in the creation of
  378 	aliases. Specifically, we have to make sure that, in the case that
  379 	the symbol being aliased already *is* an alias for some other
  380 	symbol, the new alias is by default named after the alias, and not
  381 	the "real" symbol it points to. The same bug also affected the
  382 	recently introduced selective a.k.a. qualified import clauses.
  383 	This has also been fixed.
  384 
  385 2007-09-27  Albert Graef  <Dr.Graef@t-online.de>
  386 
  387 	* modules/curl/curl.c: Apparently, CURLOPT_PASSWDFUNCTION was
  388 	removed in Curl 7.16 (reported by Eddie Rucker).
  389 
  390 	* stdlib/stdtypes.q et al: Minor cosmetic changes, and other (less
  391 	cosmetic) changes to make the container data structures live
  392 	happily outside the prelude's ecosystem.
  393 
  394 	* src/qc.y, src/qclex.l (sym_import): Allow 'from module import;'
  395 	clause with empty name list to just import everything (likewise
  396 	for 'include').
  397 
  398 	Note that this is different from an old-style "unqualified"
  399 	'import module;' clause in that the latter gives access to the
  400 	entire namespace of the module, while the selective a.k.a.
  401 	qualified import clause redeclares all symbols of the imported
  402 	module in the namespace of the importing module *without* actually
  403 	giving access to the imported module itself. In practice, you
  404 	won't notice the difference unless you write something like
  405 	'module::name' (which works with the unqualified import clause,
  406 	but not with the qualified one) or you use an 'include' clause.
  407 	Note that 'from module include;' reexports the symbols from the
  408 	included module to a client module as members of the *including*
  409 	module, while 'include module;' reexports the same symbols as
  410 	members of the *included* module, just as if the client module
  411 	imported the included module itself.
  412 
  413 	I know that this is a little bit confusing, so here's an example.
  414 	Let's assume the following three modules A, B and C:
  415 
  416 	A: import B;
  417 	B: include C;
  418 	C: public foo;
  419 
  420 	Using this setup, the symbol foo is available as either just 'foo'
  421 	or as 'C::foo' in all of A, B and C. Now suppose we change module
  422 	B to:
  423 
  424 	B: from C include foo; // or just: from C include;
  425 
  426 	C's namespace hasn't changed, of course, but in both A and B the
  427 	symbol foo is now available as 'foo' or 'B::foo', but *not* as
  428 	'C::foo' anymore. However, you can also combine unqualified and
  429 	qualified imports, like so:
  430 
  431 	B: include C;
  432 	   from C include;
  433 
  434 	Now the symbol foo is available as either 'foo', 'B::foo' *or*
  435 	'C::foo' in B and C (and the compiler will recognize it as the
  436 	same symbol no matter which notation you use).
  437 
  438 	Does that make more sense now? ;-)
  439 
  440 	* stdlib/prelude.q et al: slim prelude: unbundle getopt, system
  441 	and stdtypes from the prelude, in order to reduce namespace
  442 	pollution and improve startup times (as proposed by John Cowan)
  443 
  444 	Note that this breaks backward compatibility, as you'll have to
  445 	import the getopt, system and stdtypes modules explicitly in
  446 	scripts that need them. You're kindly asked to check your scripts
  447 	by running them through the compiler with the -w option to find
  448 	out whether they might be affected. :)
  449 
  450 	* modules/clib: move (most of) the POSIX system interface from
  451 	clib to a new system module
  452 
  453 	* src/qclex.l, src/qmlex.l: Fix corner cases and bugs related to
  454 	the parsing of qualids.
  455 	
  456 	In particular, note that ':::' is now (properly) tokenized as '::'
  457 	':', following the "maximal munge" rule. This might break some old
  458 	code (very unlikely, but it did happen in examples/lambda.q). If
  459 	you really want something like 'X : ::Type' to denote a lhs
  460 	variable guarded by a builtin type written in qualified notation,
  461 	you'll now have to add the space after the first ':', as indicated.
  462 
  463 	Note that a conglomerate of three successive colons used to be
  464 	tokenized as ':' '::' in Q 7.6 and earlier. The changed behaviour
  465 	of the lexer in this rather obscure case is called for by the new
  466 	operator syntax in Q 7.7 which allows multichar operator symbols
  467 	and hence a token starting out as 'X:::...' might well denote a
  468 	qualid involving a multichar operator beginning with ':', as in
  469 	'(complex:::+)'. Since qualids may not contain whitespace, this is
  470 	the only way that such qualified forms of operator symbols may be
  471 	written. Also note that under such circumstances, Q 7.7 would
  472 	sometimes produce bogus error messages; this has now been fixed as
  473 	well.
  474 
  475 2007-09-26  Albert Graef  <Dr.Graef@t-online.de>
  476 
  477 	* src/qctables.c: Various fixes in the handling of symbol
  478 	declarations:
  479 
  480 	1. Errorneous "conflicting imports" messages in symbol
  481 	declarations have been fixed.
  482 
  483 	2. The redeclaration of a non-variable as a variable was reported
  484 	as an unspecific "error in declaration". This now correctly
  485 	produces a "conflicting declarations" message instead.
  486 
  487 	3. The rules for redeclaring symbols are more strict now. It is no
  488 	longer possible to declare both ordinary local symbols and aliases
  489 	with the same print name; instead you'll get a "conflicting
  490 	declarations" message. This also applies to selective imports
  491 	which in fact just redeclare the imported symbols in the namespace
  492 	of the importing module. Moreover, as type and other (function or
  493 	free variable) symbols may now occur in the same context (i.e.,
  494 	qualified import clauses), both types of symbols (which used to be
  495 	totally separate) are now in the same namespace. Hence it is not
  496 	possible to declare type symbols with the same print name as an
  497 	existing function or variable symbol and vice versa anymore.
  498 
  499 	4. The --pedantic option now also warns about non-prelude symbols
  500 	from non-selective imports which are used without proper
  501 	qualification. This is useful to report a common source of errors,
  502 	namely the accidental "reuse" of an unqualified symbol due to a
  503 	missing local symbol declaration.
  504 
  505 	* src/qmparse.y (whos): bugfix: report temporary function symbols
  506 	as undefined
  507 
  508 	* etc/q-mode.in, etc/q.xml, etc/q.vim: add new 'from' keyword
  509 
  510 	* src/qc.y (et al): implement selective import construct (from
  511 	module-id import id, ...;) as suggested by John Cowan
  512 
  513 2007-09-25  Albert Graef  <Dr.Graef@t-online.de>
  514 
  515 	* examples/csv.q: added to examples (contributed by Eddie Rucker)
  516 
  517 2007-09-24  Albert Graef  <Dr.Graef@t-online.de>
  518 
  519 	* src/qbase.c, src/sys.c: inhibit path search for '.' and '..' 
  520 	directory prefixes
  521 
  522 	* src/qmlex.l: Make shell escapes work again. This stopped working
  523 	at some time in Q<=7.7 due to changes in the command lexer.
  524 
  525 	* src/qclex.l, src/qc.y: Cleaned up some horrible kludges in the
  526 	wrapover of the qc lexer at end-of-file.
  527 
  528 	We now return an explicit end-of-file token and defer the actual
  529 	wrapover to actions in the parser. This resolves some obscure
  530 	segfaults which might occur if wrapover happens before a construct
  531 	is fully parsed. It also ensures that proper source file and line
  532 	number information is reported for errors encountered at end of
  533 	file. Last but not least, it also fixes a long-standing bug which
  534 	caused the parser to "wrap over" with an unfinished construct at
  535 	the end of an imported module; this now properly provokes an error
  536 	message.
  537 
  538 2007-09-23  Albert Graef  <Dr.Graef@t-online.de>
  539 
  540 	* src/qcrules.c (where_clause, definition): optimize away
  541 	irrefutable MATCHOPs (as in 'where X = 99')
  542 
  543 	* src/qclex.l (yywrap, getbuf): make sure that lexer only wraps up
  544 	once; lexer would otherwise segfault if error recovery occurred
  545 	after already seeing end of file (bug reported by Eddie Rucker)
  546 
  547 	* src/qctables.c (vartbadd): offs field shouldn't be set for new
  548 	variables; this would cause wrong code to be generated for free
  549 	variables when there's a shared 'where' clause in an equation (bug
  550 	reported by Eddie Rucker)
  551 
  552 2007-08-27  Albert Graef  <Dr.Graef@t-online.de>
  553 
  554 	* configure.in: added check for ncursesw
  555 
  556 2007-07-06  Albert Graef  <Dr.Graef@t-online.de>
  557 
  558 	* etc/q.vim: added Vim syntax file
  559 
  560 2007-06-10  Albert Graef  <Dr.Graef@t-online.de>
  561 
  562 	+ Release 7.7
  563 
  564 	* examples/gamma.q: added example contributed by Eddie Rucker
  565 
  566 	* src/qmprint.c (unparse): unparser would sometimes return
  567 	incorrect results due to stale cache contents (bug reported by Rob
  568 	Hubbard); also fixed a related memory leak in the unparser
  569 
  570 	* etc/q-mode.in (q-mode-menu): make comment-region command work in
  571 	GNU emacs, and add an uncomment-region command
  572 
  573 2007-06-09  Albert Graef  <Dr.Graef@t-online.de>
  574 
  575 	* src/qmprint.c (exprprec): remove bogus rule for Function objects
  576 
  577 2007-06-08  Albert Graef  <Dr.Graef@t-online.de>
  578 
  579 	* modules/clib/Makefile.mingw, modules/clib/clib.c: Windows
  580 	compatibility fixes
  581 
  582 	* etc/q-mode.in: minor bugfixes in the autoindent code
  583 
  584 	Please note that this is still not good enough to do proper
  585 	indentation of equations with left-hand qualifiers; this is
  586 	difficult to get right without doing a full parse of the equation
  587 	to be indented. Thus, for the time being, the code immediately
  588 	following a left-hand qualifier will often have to be indented
  589 	manually.
  590 
  591 2007-06-07  Albert Graef  <Dr.Graef@t-online.de>
  592 
  593 	+ 7.7 RC2
  594 
  595 	* doc/qdoc.texi: minor updates and corrections
  596 
  597 	* src/qc.y, src/qclex.l, src/qmparse.y, src/qmlex.l,
  598 	src/qctables.c (fix_symtb): make 'and' and 'or' non-reserved so
  599 	that they can be redeclared
  600 
  601 	* src/qm.c (evalu etc.): fix broken fail operation (info_addr/offs
  602 	data must be saved on activation stack, so that the target address
  603 	of the next rule is properly restored after returning from a
  604 	subroutine)
  605 
  606 	* src/qm.c (getsym): aliases must be resolved, like in mksym
  607 
  608 2007-06-04  Albert Graef  <Dr.Graef@t-online.de>
  609 
  610 	+ 7.7 RC1
  611 	
  612 	* src/qmmatch.c (matchx), src/qmfuns.c (xmatch, xlmatch): bugfixes
  613 	in matching of views
  614 
  615 	* src/qmprint.c: overhaul of operator pretty-printing
  616 
  617 	* doc/qdoc.texi: updated documentation
  618 
  619 	* src/qmfuns.c (xclosview): bugfix (cyclic Function views causing
  620 	segfaults in the pretty-printer)
  621 
  622 2007-06-03  Albert Graef  <Dr.Graef@t-online.de>
  623 
  624 	* src/qc.y: allow virtual constructors in extern types
  625 
  626 2007-06-01  Albert Graef  <Dr.Graef@t-online.de>
  627 
  628 	* stdlib/prelude.q: remove semantic equality test for 'Function'
  629 	objects
  630 
  631 	Not needed anymore, since syntactic equality now does this job
  632 	(see below).
  633 
  634 	* src/qmfuns.c: make the syntactic equality check on external
  635 	objects use views if available
  636 
  637 	If a view is defined for an external object (as is the case, e.g.,
  638 	for the builtin external 'Function' type) then it will be used to
  639 	compare two instances of the type for syntactic equality. Thus two
  640 	external objects of the same type with views will be syntactically
  641 	equal if they "print out the same", just like ordinary
  642 	expressions.
  643 
  644 	* src/qmfuns.c (xlmatch): make virtual constructors work with
  645 	lambdas
  646 
  647 	* src/qmprint.c, src/qmfuns.c: move unparsing of compiled lambdas
  648 	to a new builtin view for 'Function' objects; make 'lambda' a
  649 	virtual constructor for 'Function'
  650 
  651 	This makes it possible to match compiled lambdas against literal
  652 	lambda terms, so you don't have to play dirty tricks with valq $
  653 	str any more if you want to extract the contents of a compiled
  654 	lambda.
  655 
  656 2007-05-31  Albert Graef  <Dr.Graef@t-online.de>
  657 
  658 	* src/qmfuns.c (xmatch): make virtual constructors and call-by-
  659 	pattern-matching work with the interpreter's 'def' command
  660 
  661 	* stdlib/complex.q: make Complex an ADT, virtual constructor is
  662 	(+:) -- (:+) is provided as an alias for Haskell programmers
  663 
  664 	* src/qcrules.c: add warnings about overlaps between virtual and
  665 	non-virtual constructors
  666 
  667 	Note that these overlaps are bad since, at least in the current
  668 	implementation, we want to avoid backtracking during matching at
  669 	all costs since it is a really bad performance killer. This means
  670 	that a view will *always* be generated and used for matching if a
  671 	parameter in a given definition is matched against at least one
  672 	virtual constructor. Thus, if there are other patterns in the same
  673 	definition matching the same parameter against real constructors
  674 	of the same type, these will effectively be disabled.
  675 
  676 	If you get this warning it means that you should rewrite your
  677 	definition so that it uses *either* real *or* virtual
  678 	constructors, but does not mix them. That should be easy enough to
  679 	do; usually you will use the real constructors inside the module
  680 	which defines the data type, and virtual constructors otherwise.
  681 
  682 	* src/qmmatch.c: more fixes to the virtual matching code
  683 
  684 2007-05-30  Albert Graef  <Dr.Graef@t-online.de>
  685 
  686 	* stdlib: added virtual constructor declarations
  687 
  688 	* src/qmprint.c: add C stack test to expression pretty-printer
  689 
  690 	* src/qctables.c, stdlib, examples/searchtree.q: renamed
  691 	'unparse' to 'view'; added virtual constructor declarations to
  692 	stdlib/rational.q and examples/searchtree.q; add an example of the
  693 	use of views to examples/searchtree.q
  694 
  695 2007-05-29  Albert Graef  <Dr.Graef@t-online.de>
  696 
  697 	* src/qmmatch.h, src/qm.c, src/expr.h, src/*.y, src/*.l, src/q.c,
  698 	libq/libq.c: add support for virtual constructors (new 'virtual'
  699 	keyword in function symbol declarations)
  700 
  701 	This implements Wadler/Okasaki-style "views" which allow you to
  702 	match against "virtual" constructors, using the existing
  703 	customizable unparsing mechanism. This is particularly useful to
  704 	provide pattern-matching capabilities on abstract data types which
  705 	have their real constructors hidden, such as the 'Rational' and
  706 	'Complex' types from the standard library.
  707 
  708 	* src/qc.y, src/qcrules.c: add qc option -d/--debug which prints a
  709 	bytecode listing on stdout
  710 
  711 	* stdlib/prelude.q: add declaration of (::==), and the syntactic
  712 	inequality operator (!=)
  713 
  714 	* src/qc.y, src/qmparse.y: make available the builtin syntactic
  715 	equality operation as operator (==)
  716 
  717 	Note that in difference to stdlib::eq this is a special form. This
  718 	operation has always been a builtin of the QVM (it is used to
  719 	implement the syntactic equality checks for non-linear rules) but
  720 	has not been directly accessible to the programmer; now it is.
  721 
  722 	* src/qmparse.y, src/qmlex.l: revision of lexical syntax, support
  723 	for user-defined multichar operators
  724 
  725 	This finishes the revision of Q's lexical syntax in order to
  726 	support user-defined multichar operator symbols, which was
  727 	requested on the mailing list some time ago. Moreover, the
  728 	processing of operator declarations was fixed so that these now
  729 	behave like ordinary function declarations; in particular, it is
  730 	now possible to redeclare the builtin operator symbols (except for
  731 	a few symbols like '=' which also play a special role in the
  732 	syntax).
  733 
  734 2007-05-28  Albert Graef  <Dr.Graef@t-online.de>
  735 
  736 	* src/qc.y: bugfix in declaration processing; prevent premature
  737 	aliasing of declared symbols by creating new symbols earlier if no
  738 	matching symbol exists in the current module
  739 
  740 	* stdlib/prelude.q: update declaration of builtin operators to new
  741 	syntax
  742 	
  743 	* src/qc.y, src/qclex.l, src/qctables.c: revision of lexical
  744 	syntax, support for user-defined multichar operators
  745 
  746 2007-05-26  Albert Graef  <Dr.Graef@t-online.de>
  747 
  748 	* src/q.c, src/qm.c: remove deprecated --gc option
  749 
  750 	* src/qm.c, etc.: add a C stack limit to prevent C stack overflows
  751 	in the eval() routine (bug reported by Eddie Rucker)
  752 
  753 2007-05-25  Albert Graef  <Dr.Graef@t-online.de>
  754 
  755 	* src/qc.y, src/qcrules.c: add syntax and processing for
  756 	"left-hand side qualifiers" with guards and definitions which can
  757 	be shared between different equations
  758 
  759 2007-05-24  Albert Graef  <Dr.Graef@t-online.de>
  760 
  761 	* src/qbase.h, src/qc.y, src/qcrules.c, src/qctables.c, src/qm.c:
  762 	overhaul VM and code generation so that multiple equations for the
  763 	same lhs can be collapsed into a single rule
  764 
  765 2007-05-21  Albert Graef  <Dr.Graef@t-online.de>
  766 
  767 	* src/qmparse.y, src/qmlex.l, src/qm.c: uncapitalized symbols
  768 	created at runtime are now treated as function (not variable)
  769 	symbols; var command can now be used to explicitly declare
  770 	variable symbols on the command line
  771 
  772 	This was suggested by Alexander Nickolsky to make the treatment of
  773 	function and variable symbols consistent between scripts and the
  774 	interactive command line.
  775 
  776 2007-05-20  Albert Graef  <Dr.Graef@t-online.de>
  777 
  778 	* src/qcrules.c: finally get rid of those pesky undeclared
  779 	variable warnings (those who can't live without them can still get
  780 	them with the undocumented warning level 3, -w3)
  781 
  782 2007-05-19  Albert Graef  <Dr.Graef@t-online.de>
  783 
  784 	* stdlib/cond.q: make 'case' an instance of 'Lambda'; new multiway
  785 	conditional and pattern-matching abstractions 'condfun' and
  786 	'casefun'
  787 
  788 	* stdlib/cond.q: remove the auxiliary 'matchp' function;
  789 	comprehensions now directly use 'eq true.(\X.true)' for filtering
  790 	purposes, to ensure consistent behaviour under alpha conversion
  791 
  792 	* stdlib/stream.q: make 'cat' work with any mixture of streams and
  793 	lists and always return a list; this is necessary to ensure
  794 	consistent behaviour of the list and stream comprehension
  795 	operations in cond.q
  796 
  797 	* mod_q, src/qcwrap.q: removed mod_q and qcwrap from the core
  798 	distribution; these will now be provided in separate source
  799 	packages
  800 
  801 2007-05-18  Albert Graef  <Dr.Graef@t-online.de>
  802 
  803 	* modules/clib/clib.c: remove size restriction on constant
  804 	substrings in printf/scanf format strings (bug reported by Eddie
  805 	Rucker)
  806 
  807 	* src/qmfuns.c, src/opcodes.h, src/qctables.c (inittables): new
  808 	_FAIL_ operation which triggers XCEPT_FAIL2
  809 
  810 	* src/qdefs.h, src/qm.c (evalu): new XCEPT_FAIL2 exception
  811 
  812 	As suggested by Alexander Nickolsky, this makes an entire
  813 	reduction fail (and not just a single rule, as with XCEPT_FAIL).
  814 
  815 2007-05-16  Albert Graef  <Dr.Graef@t-online.de>
  816 
  817 	* src/qmfuns.c (xlbody): bugfixes in recursive lambda expansion
  818 	(bug reported by Marco Maggesi)
  819 
  820 	Fixed a bug in the builtin lambda implementation which caused
  821 	nested list comprehensions to be evaluated too early. Also fixed
  822 	an (unrelated) segfault which occurred when objects of a Lambda
  823 	subtype lacked a definition for the lambdax call.
  824 
  825 2007-05-12  Albert Graef  <Dr.Graef@t-online.de>
  826 
  827 	* modules/clib/clib.c, modules/clib/clib.q: add custom completion
  828 	and various helper functions to the readline interface
  829 
  830 2007-05-11  Albert Graef  <Dr.Graef@t-online.de>
  831 
  832 	* modules/clib/clib.c, modules/clib/clib.q: add a basic readline
  833 	interface
  834 
  835 	* modules/clib/clib.q: make regex tail-recursive; make regex_next
  836 	a private function
  837 
  838 	* src/qmprint.c: make recursive invokations of the unparser work
  839 	(bug reported by Rob Hubbard)
  840 
  841 	* autogen.sh, configure.in, Makefile.am, modules/clib/Makefile.am,
  842 	modules/clib/clib.c, glob, regex: use system libraries for POSIX
  843 	regex and glob/fnmatch functions, remove bundled regex and glob
  844 
  845 	Get rid of the bundled regex and glob libraries which were ancient
  846 	and didn't support unicode. We now use the available system
  847 	libraries instead.
  848 
  849 2007-05-07  Albert Graef  <Dr.Graef@t-online.de>
  850 
  851 	* configure.in, config.rpath: add missing AM_PROG_CC_C_O call and
  852 	config.rpath to make automake 1.10 happy (bug reported by John
  853 	Cowan); update to latest stable autotools
  854 
  855 2007-05-06  Albert Graef  <Dr.Graef@t-online.de>
  856 
  857 	* bump version number
  858 
  859 	* configure.in, modules/tk/Makefile.am, modules/tk/gqbuilder:
  860 	remove bundled gqbuilder
  861 
  862 	Gnocl support and GQBuilder will be made available as a separate
  863 	package.
  864 
  865 	* autogen.sh, configure.in, Makefile.am, src/Makefile.am,
  866 	readline-4.2: remove bundled readline
  867 
  868 	The bundled readline library was an ancient version which didn't
  869 	support unicode. Recent, unicode-capable versions of the readline
  870 	library are now readily available for most platforms, so there is
  871 	no point in including it in the Q distribution any more.
  872 
  873 2007-05-05  Albert Graef  <Dr.Graef@t-online.de>
  874 
  875 	* src/qc.y, src/qmparse.y: fix broken group syntax
  876 
  877 	Singleton groups at the beginning of a tuple were not
  878 	recognized. This has been fixed.
  879 
  880 2006-12-18  Albert Graef  <Dr.Graef@t-online.de>
  881 
  882 	+ Release 7.6
  883 
  884 	* src/q.c, modules/xml/xml.c: fix broken tmpnam on Windows
  885 
  886 2006-12-17  Albert Graef  <Dr.Graef@t-online.de>
  887 
  888 	* modules/clib/clib.c: OSX compatibility patches, thanks to Andrew
  889 	Berg
  890 
  891 	* src/q.c, src/qc.y: fixes in shebang handling
  892 
  893 	* src/q.c: fix segfaults in qprint with custom unparsings
  894 
  895 2006-09-11  Albert Graef  <Dr.Graef@t-online.de>
  896 
  897 	+ Release 7.5
  898 
  899 	* src/q.c: fix segfaults due to internals thrashing the symbol
  900 	name in the getsym/gettype libq+libqint API functions
  901 
  902 2006-09-07  Albert Graef  <Dr.Graef@t-online.de>
  903 
  904 	* src/q.c (qexecv): fix double deallocation and globbering of
  905 	source path when script fails to load
  906 
  907 2006-08-23  Albert Graef  <Dr.Graef@t-online.de>
  908 
  909 	+ Release 7.4
  910 
  911 	* src/qmmatch.c (nextstate): minor optimizations in binary search
  912 	algorithm
  913 
  914 2006-08-22  Albert Graef  <Dr.Graef@t-online.de>
  915 
  916 	* bumped version number
  917 
  918 	* src/qctables.c (unresolved_forwards): fix unresolved forward
  919 	warnings
  920 
  921 	* src/qc.y (addexpr): increase allocation step size for expression
  922 	vectors
  923 
  924 	* src/qctables.c (putlimbs): fix memory allocation bug
  925 
  926 2006-08-15  Albert Graef  <Dr.Graef@t-online.de>
  927 
  928 	+ Release 7.3
  929 
  930 	* src/qctables.c (astype): allow type aliases for extern types
  931 
  932 2006-08-11  Albert Graef  <Dr.Graef@t-online.de>
  933 
  934 	* src/qmprint.c (print): fix unparsing of if-then expressions
  935 
  936 2006-08-08  Albert Graef  <Dr.Graef@t-online.de>
  937 
  938 	* src/qm.c (consexpr): missing memoization flag initialization
  939 
  940 2006-07-25  Albert Graef  <Dr.Graef@t-online.de>
  941 
  942 	* bumped version number
  943 
  944 	* src/qc.y: bugfixes in static analysis of variable declarations
  945 	and initializer code generation
  946 
  947 2006-07-24  Albert Graef  <Dr.Graef@t-online.de>
  948 
  949 	* doc/qdoc.texi: updated and corrected documentation
  950 
  951 	* src/qcrules.c (isconstx): allow const values in the head of the
  952 	lhs of an equation (constructor equations like "true = false;" are
  953 	still forbidden)
  954 
  955 2006-06-27  Albert Graef  <Dr.Graef@t-online.de>
  956 
  957 	+ Release 7.2
  958 
  959 	* doc/qdoc.texi: updated documentation
  960 
  961 	* src/qcrules.c: reject equations if the lhs is a single variable
  962 	(bug reported by Larry Gregg)
  963 
  964 	* src/qmparse.y, src/qmlex.l: add `unparse' command
  965 
  966 	* stdlib/prelude.q: added default unparsing rules for containers
  967 
  968 	* stdlib/complex.q: added cis and polar functions, as suggested by
  969 	Rob Hubbard
  970 
  971 	* src/qmfuns.c, stdlib, doc: fix various bugs reported by John
  972 	Cowan (see the mailing list archive for details)
  973 
  974 2006-06-25  Albert Graef  <Dr.Graef@t-online.de>
  975 
  976 	* modules/clib/clib.c: bugfix in lcm function
  977 
  978 2006-06-24  Albert Graef  <Dr.Graef@t-online.de>
  979 
  980 	* stdlib/rational.q: remove special rules for (/) so that (/) now
  981 	returns inexact results in all cases
  982 
  983 2006-06-23  Albert Graef  <Dr.Graef@t-online.de>
  984 
  985 	* src/qint.h, src/q.c: added libqint function qsymprec() to
  986 	determine the precedence of a function or operator symbol, per
  987 	request by John Cowan
  988 
  989 	* doc/qdoc.texi: updated documentation
  990 
  991 	* stdlib/complex.q, stdlib/rational.q: move unparsing rules to
  992 	prelude.q, add complex rational division
  993 
  994 	* stdlib/rational.q: replace (over) with (%), as discussed on the
  995 	mailing list
  996 
  997 	* src/qclex.l, src/qmlex.l: allow % and ? as Unicode punctuation
  998 	which can be used as identifiers
  999 
 1000 2006-06-21  Albert Graef  <Dr.Graef@t-online.de>
 1001 
 1002 	* src/qmfuns.c, stdlib/math.q, stdlib/complex.q: fix up floating
 1003 	point arithmetic to properly support IEEE INFs and NaNs
 1004 
 1005 2006-06-20  Albert Graef  <Dr.Graef@t-online.de>
 1006 
 1007 	* stdlib/prelude.q: fix default Real comparisons to prevent
 1008 	infinite recursion on NaNs
 1009 
 1010 	* stdlib/typec.q: rename isinfty -> isinf and add isnan predicate;
 1011 	renamed isxxxnum -> isxxxval; isrealval, isratval and isintval
 1012 	only return true for complex values if the imaginary part is an
 1013 	exact zero
 1014 
 1015 	* stdlib/math.q: add inf and nan constants for IEEE infinities and
 1016 	NaNs
 1017 
 1018 	* src/qmfuns.c: fix comparisons to properly handle IEEE infinities
 1019 	and NaNs
 1020 
 1021 2006-06-19  Albert Graef  <Dr.Graef@t-online.de>
 1022 
 1023 	* stdlib/rational.q: renamed numerator/denominator functions to
 1024 	num/den
 1025 
 1026 2006-06-18  Albert Graef  <Dr.Graef@t-online.de>
 1027 
 1028 	* doc/qdoc.texi: updated documentation
 1029 
 1030 	* stdlib/typec.q: refactoring of syntactic type predicates, added
 1031 	semantic number predicates
 1032 
 1033 	* stdlib/rational.q: bugfixes, cosmetic changes
 1034 
 1035 2006-06-17  Albert Graef  <Dr.Graef@t-online.de>
 1036 
 1037 	* stdlib/rational.q, stdlib/prelude.q: added a rational number
 1038 	module to the library and the prelude
 1039 
 1040 	This is based on Rob Hubbard's module, but only the Rational data
 1041 	type itself and the basic arithmetic are provided. The remaining
 1042 	operations of Rob's module will be offered as a separate package.
 1043 
 1044 2006-06-15  Albert Graef  <Dr.Graef@t-online.de>
 1045 
 1046 	* doc/qdoc.texi: updated documentation
 1047 
 1048 	* stdlib/prelude.q: add default rules for the numeric and
 1049 	conversion functions on `Real'
 1050 
 1051 	* src/qctables.c, src/opcodes.h, stdlib: add a Real type between
 1052 	Num and Int, Float, make Complex a subtype of Num
 1053 
 1054 	* stdlib/complex.q: make complex numbers an algebraic type,
 1055 	add imaginary unit, provide pretty-printing
 1056 
 1057 2006-06-13  Albert Graef  <Dr.Graef@t-online.de>
 1058 
 1059 	* src/qmprint.c et al: provide a hook into the expression
 1060 	pretty-printer
 1061 
 1062 	* started work on Q 7.2, bumped version number
 1063 
 1064 2006-06-11  Albert Graef  <Dr.Graef@t-online.de>
 1065 
 1066 	+ Release 7.1
 1067 
 1068 	* doc/qdoc.texi: updated documentation
 1069 
 1070 	* modules/clib/clib.q, clib.c: replaced fact and rem functions by
 1071 	a single remove_factor function
 1072 
 1073 	* stdlib/prelude.q: added equality of `Function' objects
 1074 
 1075 2006-06-09  Albert Graef  <Dr.Graef@t-online.de>
 1076 
 1077 	* stdlib/prelude.q: overhaul of enumeration operations
 1078 
 1079 2006-06-08  Albert Graef  <Dr.Graef@t-online.de>
 1080 
 1081 	* stdlib: renamed types.q back to typec.q, to avoid name clashes
 1082 	with application code; getopt.q is now loaded in prelude
 1083 
 1084 	* src/qm.c: fixed handling of zero stack and memory limits
 1085 
 1086 2006-06-07  Albert Graef  <Dr.Graef@t-online.de>
 1087 
 1088 	* stdlib/math.q: added floor and ceil functions, contributed by
 1089 	Rob Hubbard
 1090 
 1091 	* stdlib/prelude.q et al: reorganized standard library sources,
 1092 	moved various functions out of prelude.q again so that other
 1093 	standard library modules may access them
 1094 
 1095 	* examples: reorganize examples, add some new stream examples
 1096 
 1097 2006-06-06  Albert Graef  <Dr.Graef@t-online.de>
 1098 
 1099 	* examples/fixpt.q: complete overhaul, now also shows how to
 1100 	implement the normal order ("Y") fixed point combinator
 1101 
 1102 	* src/qc.y, src/qmparse.y, src/qmprint.c: give proper precedence
 1103 	to the if-then-else construct, cosmetic changes in unparser
 1104 
 1105 	if-then-else now binds weaker than (||) but stronger than
 1106 	($). This seems to be the most natural choice. Moreover, to
 1107 	improve readability of pretty-printed expressions, ($) and (||)
 1108 	are now padded with extra whitespace, just like (.).
 1109 
 1110 	* src/qmfuns.c: bugfixes and optimizations in the lambda code
 1111 
 1112 2006-06-03  Albert Graef  <Dr.Graef@t-online.de>
 1113 
 1114 	* stdlib/prelude.q: rename matches back to matchp, to avoid
 1115 	name clashes with applications
 1116 
 1117 	* stdlib/getopt.q: added to the standard library
 1118 
 1119 	* etc/q-mode.in: add indentation for if-then-else
 1120 
 1121 2006-06-02  Albert Graef  <Dr.Graef@t-online.de>
 1122 
 1123 	* examples/rational.q: added Rob Hubbard's rational number module
 1124 	to the examples directory
 1125 
 1126 	* examples/lambda.q: revised the old lambda module and moved it to
 1127 	the examples directory
 1128 
 1129 	* src/qmprint.c: serialization of compiled lambdas (inhibited in
 1130 	the interactive read-eval-print loop)
 1131 
 1132 	* src/qmfuns.c: make trunc, round, float, int, frac work
 1133 	consistently on integers and floating point values, as suggested
 1134 	by Rob Hubbard
 1135 
 1136 2006-06-01  Albert Graef  <Dr.Graef@t-online.de>
 1137 
 1138 	* test.q: overhaul of test script, add tests for conditionals
 1139 
 1140 	* stdlib/prelude.q: overhaul of conditionals (switch -> cond,
 1141 	match -> case, matchp -> matches)
 1142 
 1143 	The new conditionals are now much more Lisp-like, and take
 1144 	advantage of the new grouping feature, e.g.:
 1145 	sign X = cond (X>0, 1; X<0, -1; true, 0);
 1146 
 1147 	* modules/clib/clib.q, modules/clib/clib.c: rename Cond/cond ->
 1148 	Condition/condition and Sem/sem -> Semaphore/semaphore
 1149 
 1150 	* src/qc.y, src/qmparse.y, src/qmprint.y et al: syntactic sugar
 1151 	for if-then-else and grouping in lists, streams and tuples
 1152 
 1153 	"ifelse X Y Z" can now also be written as "if X then Y else Z".
 1154 
 1155 	The new grouping feature makes stuff like lists of key-value pairs
 1156 	more readable, e.g.: [A,B;C,D] is the same as [(A,B),(C,D)].
 1157 
 1158 2006-05-29  Albert Graef  <Dr.Graef@t-online.de>
 1159 
 1160 	* src/qmprint.c: pretty-printing of lambda expressions and
 1161 	list/stream comprehensions
 1162 
 1163 2006-05-28  Albert Graef  <Dr.Graef@t-online.de>
 1164 
 1165 	* tidy-up of the standard library
 1166 
 1167 	The lambda.q module is gone, and the stuff which is used to be in
 1168 	cond.q, list.q and typec.q is now defined in prelude.q. Various
 1169 	related definitions, which used to be scattered out over different
 1170 	source files, are now also provided in prelude.q.
 1171 
 1172 	* lambda is now implemented as a builtin
 1173 
 1174 	This resolves some limitations and inefficiencies of the
 1175 	implementation in the former lambda.q module. Lambda itself and
 1176 	the stuff which depends on it is now generally much faster, and
 1177 	non-linear patterns and patterns involving the anonymous variable
 1178 	are now also handled correctly.
 1179 
 1180 2006-05-26  Albert Graef  <Dr.Graef@t-online.de>
 1181 
 1182 	* stdlib/stream.q, stdlib/stdlib.q: overhaul of stream operations,
 1183 	cosmetic changes
 1184 
 1185 	The definitions of the stream functions are much cleaner now,
 1186 	since they take advantage of the new "call by need" pattern
 1187 	matching semantics (see below).
 1188 
 1189 2006-05-25  Albert Graef  <Dr.Graef@t-online.de>
 1190 
 1191 	* src/qm.c, src/qmmatch.c: total overhaul of the pattern matching
 1192 	code to implement "call by need"
 1193 
 1194 	Matching suspended subterms in (non-special) arguments of a
 1195 	function now works as one would reasonably expect, by evaluating
 1196 	the relevant subterms during pattern matching as needed. Note that
 1197 	special arguments are still not touched by the pattern matcher, as
 1198 	it ought to be to make special forms work.
 1199 
 1200 2006-05-24  Albert Graef  <Dr.Graef@t-online.de>
 1201 
 1202 	* src/qm.c (eval_internal): total overhaul of the reducibility
 1203 	checking code
 1204 
 1205 	This change fixes a lot of unnecessary reevaluations of constant
 1206 	and weak normal form subterms, resulting in big performance gains
 1207 	in special argument evaluation. Special forms generally work much
 1208 	faster now.
 1209 
 1210 2006-05-23  Albert Graef  <Dr.Graef@t-online.de>
 1211 
 1212 	* stdlib/stream.q: make stream operations use the new memoization
 1213 	operator; add utility functions to control stream evaluation
 1214 	(strict, lazy and friends)
 1215 
 1216 	* modules/clib/clib.c: remove memoizing references (mem); this is
 1217 	obsolete now that we have the builtin memoization operator
 1218 
 1219 	* src/qc.y, src/qctables.c, src/qmparse.y, src/qm.c, src/qmfuns.c:
 1220 	added builtin memoization operator (&)
 1221 
 1222 2006-05-20  Albert Graef  <Dr.Graef@t-online.de>
 1223 
 1224 	* examples/cgi.q: update to Tim Haynes' latest version
 1225 
 1226 2006-05-19  Albert Graef  <Dr.Graef@t-online.de>
 1227 
 1228 	* src/q.c (qexecv): cache argument vectors in order to cure
 1229 	segfaults on some systems
 1230 
 1231 	* doc/qdoc.texi: updated documentation
 1232 
 1233 	* src/qint.h, src/q.c: add qdef() function to libqint which allows
 1234 	to set global interpreter variables from C/C++ (suggested by John
 1235 	Cowan)
 1236 
 1237 2006-05-16  Albert Graef  <Dr.Graef@t-online.de>
 1238 
 1239 	* src/qc.y: allow initializer in var declaration
 1240 
 1241 2006-05-15  Albert Graef  <Dr.Graef@t-online.de>
 1242 
 1243 	* modules/clib/clib.c: add memoizing references (mem)
 1244 
 1245 2006-05-14  Albert Graef  <Dr.Graef@t-online.de>
 1246 
 1247 	* src/qctables.c (inittables): rename stream constructors
 1248 
 1249 2006-05-08  Albert Graef  <Dr.Graef@t-online.de>
 1250 
 1251 	* doc/qdoc.texi: updated documentation
 1252 
 1253 2006-05-02  Albert Graef  <Dr.Graef@t-online.de>
 1254 
 1255 	* stdlib/stream.q: make `cat' and `tuple' work with streams; add
 1256 	`repeat', `repeatn' and `cycle' operations
 1257 
 1258 	* updated standard library and examples
 1259 
 1260 	* src/qc.y, src/qmparse.y, src/qmprint.y et al: syntactic sugar
 1261 	for streams and list/stream comprehensions; alternate type alias
 1262 	definition syntax (type Foo == Bar); inline var declarations in
 1263 	rhs expressions
 1264 
 1265 	* etc/q-mode.in: GNU emacs compatibility fixes
 1266 
 1267 2006-04-25  Albert Graef  <Dr.Graef@t-online.de>
 1268 
 1269 	* src/qctables.c, src/qcrules.c et al: overhaul of undeclared
 1270 	symbol warning messages
 1271 
 1272 2006-04-24  Albert Graef  <Dr.Graef@t-online.de>
 1273 
 1274 	* configure.in.:  bumped version number
 1275 
 1276 	* modules/clib/clib.[cq]: add sentinel data structure which
 1277 	triggers the evaluation of a given expression when a sentinel
 1278 	object is garbage-collected
 1279 
 1280 	* src/q.c, src/qm.c, libq/libq.c: add support for sentinel
 1281 	expressions
 1282 
 1283 2006-04-16  Albert Graef  <Dr.Graef@t-online.de>
 1284 
 1285 	* src/qctables.c, src/qmmatch.c: fix a critical bug in the pattern
 1286 	matching code which crept into the 7.0 release
 1287 
 1288 	NOTE: The new code should now properly handle all cases and fix an
 1289 	obscure but annoying bug which caused wrong pattern matching code
 1290 	to be generated in case of overlaps between untyped and typed
 1291 	applications. The downside of this fix is that it also doubles the
 1292 	size of the pattern matching tables, but currently there seems to
 1293 	be no way around this.
 1294 
 1295 2006-02-18  Albert Graef  <Dr.Graef@t-online.de>
 1296 
 1297 	+ Release 7.0
 1298 
 1299 	* doc/qdoc.texi: updated documentation
 1300 
 1301 	* src/qbase.c, src/qclex.l, src/qmlex.l, src/qmparse.y, etc.: make
 1302 	unrecognized character escapes in string constants an error, per
 1303 	request by John Cowan and others
 1304 
 1305 2006-02-16  Albert Graef  <Dr.Graef@t-online.de>
 1306 
 1307 	* src/qbase.c: character number in escapes can now optionally be
 1308 	enclosed in parentheses, as suggested by John Cowan
 1309 
 1310 2006-02-14  Albert Graef  <Dr.Graef@t-online.de>
 1311 
 1312 	* src/qclex.l, src/qmlex.l: bugfixes in lexer, finished Windows
 1313 	port
 1314 
 1315 2006-02-13  Albert Graef  <Dr.Graef@t-online.de>
 1316 
 1317 	* doc/qdoc.texi: updated documentation
 1318 
 1319 	* src/qbase.h, src/qbase.c, src/qclex.l, src/qmlex.l,
 1320 	src/qmparse.y: overhaul of expression parsing and unparsing:
 1321 
 1322 	- Conversions between doubles and strings are now done in a
 1323 	locale-independent way. This is necessary to ensure that the
 1324 	parsing and printing of floating point values works correctly in
 1325 	non-"C" locales.
 1326 
 1327 	- Floating point values are now always unparsed with maximum
 1328 	precision, and integer values in decimal, so that the std/sci/fix
 1329 	and dec/hex/oct formats only affect the display of expressions
 1330 	which are printed in response to interpreter and debugger
 1331 	commands.
 1332 
 1333 	- The experimental support for the C99 printf %a flag has been
 1334 	dropped. This doesn't seem to be needed any more, as the "%.17g"
 1335 	format apparently provides sufficient precision to be able to
 1336 	reconstruct floating point values exactly, at least on machines
 1337 	with IEEE compatible 64 bit doubles.
 1338 
 1339 2006-02-10  Albert Graef  <Dr.Graef@t-online.de>
 1340 
 1341 	* doc/qdoc.texi: updated documentation
 1342 
 1343 	* stdlib/stdlib.q, stdlib/stream.q: added dowith, dowith3
 1344 	functions
 1345 
 1346 2006-02-05  Albert Graef  <Dr.Graef@t-online.de>
 1347 
 1348 	* doc/qdoc.texi: updated documentation
 1349 
 1350 2006-02-03  Albert Graef  <Dr.Graef@t-online.de>
 1351 
 1352 	* etc/q-mode.in: info/GNU emacs compatibility fixes
 1353 
 1354 	* configure.in: new configure option --with-unicode
 1355 
 1356 	* src/q.c, src/qc.y, src/qclex.l: new compiler option --encoding
 1357 
 1358 2006-02-02  Albert Graef  <Dr.Graef@t-online.de>
 1359 
 1360 	* unicode fixup: removed dependency on __STDC_ISO_10646__
 1361 
 1362 2006-02-01  Albert Graef  <Dr.Graef@t-online.de>
 1363 
 1364 	* bump version number in preparation of forthcoming release
 1365 
 1366 	* doc/qdoc.texi: added missing remarks about nesting of comments
 1367 	and const var declarations, as pointed out by Rob Hubbard
 1368 
 1369 	* src/qm.c (setvar): always set variable value to irreducible, to
 1370 	prevent infinite recursion when evaluating variables with
 1371 	recursive definition
 1372 
 1373 	* src/qint.h, libq/libq.h: commit Brian Wilfley's patches for
 1374 	Windows/C++ compatibility
 1375 
 1376 2006-01-31  Albert Graef  <Dr.Graef@t-online.de>
 1377 
 1378 	* src/qclex.l, src/qmlex.l: unicode support in identifiers
 1379 
 1380 	* src/*: handle utf-8 in compiler and interpreter
 1381 
 1382 2006-01-25  Albert Graef  <Dr.Graef@t-online.de>
 1383 
 1384 	* modules/ggi/ggi.c: automatic conversion from/to utf-8, unicode
 1385 	support in text rendering
 1386 
 1387 2006-01-24  Albert Graef  <Dr.Graef@t-online.de>
 1388 
 1389 	* modules/xml/xml.q: xml_save_string doesn't have ENCODING
 1390 	parameter any more, the returned string is always utf-8
 1391 	
 1392 	* modules/dxl/dxl.c, modules/gdbm/gdbm.c, modules/octave/octave.c,
 1393 	modules/odbc/odbc.c, modules/xml/xml.c, modules/magick/magick.c:
 1394 	automatic conversion from/to utf-8
 1395 
 1396 2006-01-23  Albert Graef  <Dr.Graef@t-online.de>
 1397 
 1398 	* modules/tk: added GQBuilder (Gnocl/Q interface builder)
 1399 
 1400 2006-01-15  Albert Graef  <Dr.Graef@t-online.de>
 1401 
 1402 	* src/qmfuns.c (qmwhich): which () now gives the full path of the
 1403 	executing script, just like the builtin which command without args
 1404 
 1405 2006-01-13  Albert Graef  <Dr.Graef@t-online.de>
 1406 
 1407 	* modules/tk/tk.c: added new qtrace command for tracing
 1408 	synchronous callbacks
 1409 
 1410 2005-12-25  Albert Graef  <Dr.Graef@t-online.de>
 1411 
 1412 	* modules/tk/tk.c: added new qval command for synchronous
 1413 	callbacks from Tcl to Q
 1414 
 1415 	* modules/curl/curl.c: automatic conversion from/to utf-8
 1416 
 1417 2005-12-11  Albert Graef  <Dr.Graef@t-online.de>
 1418 
 1419 	* src/q.c, src/qint.h: ported libq unicode helpers to libqint
 1420 
 1421 	* modules/clib/clib.c: automatic conversion from/to utf-8
 1422 
 1423 2005-10-13  Albert Graef  <Dr.Graef@t-online.de>
 1424 
 1425 	* src/qm.c, src/qmfuns.c: automatic conversion from/to utf-8 in
 1426 	builtin string I/O operations
 1427 
 1428 2005-08-03  Albert Graef  <Dr.Graef@t-online.de>
 1429 
 1430 	* examples/except.q: add error rules for new i18n functions in
 1431 	clib
 1432 
 1433 2005-08-02  Albert Graef  <Dr.Graef@t-online.de>
 1434 
 1435 	* configure.in: bumped version number
 1436 
 1437 	* modules/clib/clib.c: added strfmon, iconv, gettext and friends
 1438 
 1439 2005-07-31  Albert Graef  <Dr.Graef@t-online.de>
 1440 
 1441 	* modules/clib/clib.c: added strcoll, strxfrm and wcswidth
 1442 	functions
 1443 
 1444 2005-07-30  Albert Graef  <Dr.Graef@t-online.de>
 1445 
 1446 	* modules/clib/clib.c: added setlocale, localeconv and nl_langinfo
 1447 	functions
 1448 
 1449 	* modules/clib/clib.q: declaration of i18n functions
 1450 
 1451 2005-07-29  Albert Graef  <Dr.Graef@t-online.de>
 1452 
 1453 	* modules/clib/clib.c: chars, split, toupper/tolower and isxxx
 1454 	character predicate functions now properly handle multibyte chars
 1455 
 1456 2005-07-28  Albert Graef  <Dr.Graef@t-online.de>
 1457 
 1458 	* src/qbase.c: parsing and unparsing of unicode chars in strings
 1459 
 1460 2005-07-27  Albert Graef  <Dr.Graef@t-online.de>
 1461 
 1462 	* src/qmfuns.c: modified builtins: freadc, fwritec, these now give
 1463 	or take multibyte characters
 1464 
 1465 2005-07-26  Albert Graef  <Dr.Graef@t-online.de>
 1466 
 1467 	* src/qm.c, src/qmfuns.c: added basic unicode support:
 1468 
 1469         - Char object can be any single byte or UTF-8 encoded unicode
 1470 	character
 1471 
 1472 	- modified builtins: (#), (!), sub, substr, pos, ord, chr, succ,
 1473 	pred, enum
 1474 
 1475 2005-07-13  Albert Graef  <Dr.Graef@t-online.de>
 1476 
 1477 	+ Release 6.2
 1478 
 1479 	* doc/qdoc.texi: updated documentation
 1480 
 1481 	* src/q.c (build_fsym_table): add completion for operator symbols
 1482 
 1483 	* src/qmparse.y (whos): show operator precedence in whos command
 1484 
 1485 	* stdlib/prelude.q: added builtin operator table
 1486 
 1487 2005-07-12  Albert Graef  <Dr.Graef@t-online.de>
 1488 
 1489 	* stdlib/cond.q: relational `in' operator is now declared here
 1490 
 1491 	* src/*: added user-defined operators, eliminated builtin `in'
 1492 	operator
 1493 
 1494 	* stdlib/stdlib.q: deprecated apply function; use ($) operator
 1495 	instead
 1496 
 1497 	* configure.in: bumped version
 1498 
 1499 	* doc/qdoc.texi: updated documentation
 1500 
 1501 	* src/qc.y, src/qmparse.y: remove deprecated 1-tuple syntax. The
 1502 	syntax (X) now always denotes a parenthesized expression.
 1503 
 1504 2005-07-11  Albert Graef  <Dr.Graef@t-online.de>
 1505 
 1506 	* modules/xml/xml.c (xslt_apply_stylesheet): allow singleton
 1507 	(KEY,VAL) pair as PARAMS argument
 1508 
 1509 2005-07-10    <Dr.Graef@t-online.de>
 1510 
 1511 	+ Release 6.1
 1512 
 1513 	* src\q.c (exitproc): workaround for Windows-specific bug which
 1514 	causes qcwrapped scripts to dump core at exit time under certain
 1515 	yet undetermined circumstances
 1516 
 1517 2005-07-07  Albert Graef  <Dr.Graef@t-online.de>
 1518 
 1519 	* README, NEWS, doc/qdoc.texi: updated documentation
 1520 
 1521 2005-07-05  Albert Graef  <Dr.Graef@t-online.de>
 1522 
 1523 	* stdlib/cond.q: new when and unless conditionals
 1524 
 1525 	* src/qmmatch.c (match): bug fix: need an additional check for
 1526 	empty rule set when match table is nonempty
 1527 
 1528 	* src/qcrules.c (definition): bug fix: handling of free lhs vars
 1529 	in def
 1530 
 1531 	* etc/q-mode.in: fixes to accomodate for language changes
 1532 
 1533 	* src/qclex.l, src/qmlex.l: remove deprecated % comment syntax
 1534 
 1535 	* stdlib/stdlib.q (append): fix deprecated 1-tuple syntax
 1536 
 1537 	* src/qc.y, src/qmparse.y, src/qmprint.c: optional trailing commas
 1538 	in lists and tuples, deprecated (X) 1-tuple syntax as suggested by
 1539 	John Cowan
 1540 
 1541 2005-07-04  Albert Graef  <Dr.Graef@t-online.de>
 1542 
 1543 	* src/qc.y, src/qmparse.y, src/opcodes.h, src/qctables.c,
 1544 	src/qm.c, src/qmfuns.c: added Haskell-like, right-associative
 1545 	infix application operator ($), as suggested by Tim Haynes
 1546 
 1547 2005-07-02  Albert Graef  <Dr.Graef@t-online.de>
 1548 
 1549 	* src/qc.y: type guards are only permitted on the lhs of an
 1550 	equation or definition
 1551 
 1552 	* src/qcrules.c (definition), src/qm.c (evaldef1): add some extra
 1553 	pattern matching code to properly handle type guards on the lhs of
 1554 	def statements
 1555 
 1556 	* src/q.c (evaldefs), src/qdefs.h (evaldef), src/qm.c (evaldef),
 1557 	src/qc.y (def rule): error recovery and better diagnostics in init
 1558 	code; fixes bug #1165977
 1559 
 1560 2005-07-01  Albert Graef  <Dr.Graef@t-online.de>
 1561 
 1562 	* configure.in: bumped version, copyright
 1563 
 1564 	* src/qbase.h (Q_SIGNON): new signon message
 1565 
 1566 2005-06-26  Albert Graef  <Dr.Graef@t-online.de>
 1567 
 1568 	* modules/magick/magick.c (magick_colors): fix for IM 6
 1569 	compatibility
 1570 
 1571 2004-10-23  Albert Graef  <Dr.Graef@t-online.de>
 1572 
 1573 	+ Release 6.0
 1574 
 1575 	* bumped Q version to 6.0
 1576 
 1577 	* qdoc.texi: added note about SWIG support
 1578 
 1579 	* modules/swig/examples: added a basic Q/Qt example
 1580 
 1581 	* examples/primetest.q: added example contributed by Tim Haynes
 1582 
 1583 2004-10-21  Albert Graef  <Dr.Graef@t-online.de>
 1584 
 1585 	* qcc.c: add support for C++ source files
 1586 
 1587 2004-10-19  Albert Graef  <Dr.Graef@t-online.de>
 1588 
 1589 	* bumped libq version number (NOTE: libq ABI has changed, you'll
 1590 	need to recompile your modules)
 1591 
 1592 	* modules/swig: added SWIG runtime module
 1593 
 1594 	* libq.h, libq.c, q.c, qm.c: added have_lock()
 1595 
 1596 2004-10-02  Albert Graef  <Dr.Graef@t-online.de>
 1597 
 1598 	+ Release 5.5
 1599 
 1600 	* bumped version number
 1601 
 1602 	* run mangle.sh
 1603 
 1604 	* examples/cgi.q: added cgi example contributed by Tim Haynes
 1605 
 1606 	* README-GGI: updated information about GGI. In particular, the
 1607 	Windows version now uses Peter Ekberg's latest version of the
 1608 	DirectX driver from CVS which only needs the GGI_CONFDIR variable
 1609 	to be set (no need any more to fiddle around with GGI_DISPLAY and
 1610 	the GGI config files).
 1611 
 1612 2004-10-01  Albert Graef  <Dr.Graef@t-online.de>
 1613 
 1614 	* ggi.c, libggi.c, sprite.q: various bug fixes
 1615 
 1616 2004-09-10  Albert Graef  <Dr.Graef@t-online.de>
 1617 
 1618 	+ Release 5.4
 1619 
 1620 	* xml: Windows port, improved namespace support, final polish
 1621 
 1622 2004-09-08  Albert Graef  <Dr.Graef@t-online.de>
 1623 
 1624 	* bumped version number to 5.4
 1625 
 1626 	* README, NEWS: updated
 1627 
 1628 	* configury: added xml module, upgraded to latest autotools
 1629 
 1630 	* xml: added XML/XSLT interface
 1631 
 1632 2004-09-04  Albert Graef  <Dr.Graef@t-online.de>
 1633 
 1634 	* qmparse.y: latest bison prints 'syntax error' instead of 'parse
 1635 	error'
 1636 
 1637 2004-09-02  Albert Graef  <Dr.Graef@t-online.de>
 1638 
 1639 	* q.c, qbase.h, qm.c, qmlex.l, qmparse.y: added new profile and
 1640 	overhauled clear command
 1641 
 1642 	* octave.c: fixes for latest octave versions
 1643 
 1644 	* qm.c: debugger now correctly prints *last* value assigned to a
 1645 	local variable
 1646 
 1647 	* clib.q: added null test for byte strings
 1648 
 1649 	* q.c, qint.h: added qacquire() and qrelease() operations to C->Q
 1650 	interface
 1651 
 1652 	* q.xml: updated for Kate 2.1
 1653 
 1654 2004-04-15  Albert Graef  <Dr.Graef@t-online.de>
 1655 
 1656 	+ Release 5.3
 1657 
 1658 	* bumped version number to 5.3 in preparation of the forthcoming
 1659 	release
 1660 
 1661 2004-04-14  Albert Graef  <Dr.Graef@t-online.de>
 1662 
 1663 	* qdoc.texi: updated
 1664 
 1665 	* *.q: use (.) instead of compose in examples and library scripts,
 1666 	mark stdlib::compose as deprecated
 1667 
 1668 	* qc.y, qmparse.y, qctables.c, qmprint.c, qmfuns.c, qm.c: new
 1669 	builtin functional composition operator (.)
 1670 
 1671 2004-04-13  Albert Graef  <Dr.Graef@t-online.de>
 1672 
 1673 	* qm.c: fix errorneous debugger output when performing a tail
 1674 	reduction on a special argument forming the rhs of an equation
 1675 
 1676 2004-04-10  Albert Graef  <Dr.Graef@t-online.de>
 1677 
 1678 	* qmfuns.c, clib.c (fopen, popen): release global mutex while
 1679 	opening a file or pipe, to avoid potential deadlocks in
 1680 	multithreaded scripts
 1681 
 1682 2004-04-06  Albert Graef  <Dr.Graef@t-online.de>
 1683 
 1684 	* clib.c: allow full (unsigned short) range of port numbers in
 1685 	encoding and decoding of ip addresses
 1686 
 1687 2004-02-29  Albert Graef  <Dr.Graef@t-online.de>
 1688 
 1689 	+ Release 5.2
 1690 
 1691 	* qdoc.texi: added @dircategory/@direntry (suggested by Kari Pahula)
 1692 
 1693 	* configure.in: use installed libreadline if available
 1694 
 1695 	* Makefile.am (various): avoid -L<builddir>/libq flag which ends
 1696 	up in the installed .la files (reported by Kari Pahula)
 1697 
 1698 	* bumped version number to 5.2
 1699 
 1700 	* qdoc.texi: updated
 1701 
 1702 	* cond.q: added looping constructs (dowhile, for)
 1703 
 1704 	* qcrules.c (expression): improved tail call optimization
 1705 
 1706 	* qm.c (evalu): bug fix: tail call of builtin needs stack frame
 1707 
 1708 2004-02-27  Albert Graef  <Dr.Graef@t-online.de>
 1709 
 1710 	* q.c: disabled LTDL_SET_PRELOADED_SYMBOLS in libmain for now, to
 1711 	avoid breakage when client programs are not built with libtool
 1712 
 1713 2004-02-20  Albert Graef  <Dr.Graef@t-online.de>
 1714 
 1715 	+ Release 5.1
 1716 
 1717 	* NEWS, qdoc.texi: updated
 1718 
 1719 	* lambda.q: fix a long-standing but trivial issue: lambda now
 1720 	checks that the pattern is linear
 1721 
 1722 2004-02-18  Albert Graef  <Dr.Graef@t-online.de>
 1723 
 1724 	* README, NEWS, qdoc.texi: final touches for release 5.1
 1725 
 1726 	* Makefile.am (various): make `make dist' from a separate build
 1727 	directory work
 1728 
 1729 2004-02-17  Albert Graef  <Dr.Graef@t-online.de>
 1730 
 1731 	* bumped version number to 5.1
 1732 
 1733 	* Makefile.am (various): fixes to support VPATH, so building in a
 1734 	separate directory works, and to make static builds
 1735 	(--disable-shared) work again
 1736 
 1737 	* qdoc.texi: added qcwrap documentation
 1738 
 1739 	* src/qcwrap.q: added qcwrap script
 1740 
 1741 2004-02-16  Albert Graef  <Dr.Graef@t-online.de>
 1742 
 1743 	* qcc.c: add explicit --mode=install to install stage
 1744 
 1745 	* qdoc.texi: documented enumerations
 1746 
 1747 	* qc.y, qclex.l, qmparse.y, qmlex.l, qmfuns.c, prelude.q: added
 1748 	syntactic sugar for enumerations ([X..Y] syntax, new builtin enum
 1749 	function)
 1750 
 1751 	* q.c: readline initialized too late during the startup process
 1752 
 1753 2004-02-15  Albert Graef  <Dr.Graef@t-online.de>
 1754 
 1755 	* qmparse.y: proper quoting of help and edit command arguments
 1756 
 1757 	* qm.c: make the Q machine fully tail-recursive
 1758 
 1759 	The interpreter now also optimizes tail reductions on builtins and
 1760 	special arguments returned by user-defined and builtin functions.
 1761 	As a result, linear recursive definitions involving operations
 1762 	like (and then), (or else) and cond::ifelse now execute in
 1763 	constant stack space, as one might reasonably expect. Thanks are
 1764 	due to Walt Wasilev for pointing this out.
 1765 
 1766 2004-02-02  Albert Graef  <Dr.Graef@t-online.de>
 1767 
 1768 	* configure.in: check for /usr/include/tcl${version} directory,
 1769 	for Debian compatibility (patch contributed by Kari Pahula)
 1770 
 1771 	* clib.c: fix bad return value in system function
 1772 
 1773 2004-01-31  Albert Graef  <Dr.Graef@t-online.de>
 1774 
 1775 	+ Release 5.0
 1776 
 1777 	* qdoc.texi: updated
 1778 
 1779 	* qc: added -w option to warn about undeclared function and
 1780 	variable symbols (as suggested by Mathias Bruessel); overhauled
 1781 	standard library and examples to compile without warnings
 1782 
 1783 2004-01-30  Albert Graef  <Dr.Graef@t-online.de>
 1784 
 1785 	* bumped up version numbers and updated docs in preparation for
 1786 	the forthcoming 5.0 release
 1787 
 1788 	* debugger: fixed broken `n' command, now works correctly with
 1789 	recursive evals; added tbreak command to set temporary
 1790 	breakpoints; break and tbreak commands now accept a list of
 1791 	function or operator symbols
 1792 
 1793 2004-01-29  Albert Graef  <Dr.Graef@t-online.de>
 1794 
 1795 	* stdlib.q, stream.q (zip, zipwith): restore previous behaviour of
 1796 	discarding excess elements
 1797 
 1798 2004-01-28  Albert Graef  <Dr.Graef@t-online.de>
 1799 
 1800 	* qdoc.texi: updated
 1801 
 1802 	* stdlib, modules: final touches, added cvs Id tags
 1803 
 1804 	* debugger: completion_matches command, q-mode now supports
 1805 	completion in the debugger
 1806 
 1807 	* qmparse.y, qm.c (debugger): set breakpoints on function symbols
 1808 
 1809 2004-01-27  Albert Graef  <Dr.Graef@t-online.de>
 1810 
 1811 	* regex, readline: fixed some gcc3 compiler warnings
 1812 
 1813 	* q.c, qm.c (debugger): cosmetic changes in command syntax,
 1814 	readline support
 1815 
 1816 2004-01-26  Albert Graef  <Dr.Graef@t-online.de>
 1817 
 1818 	* stdlib, examples: overhaul of scan operations
 1819 
 1820 	A semantically complete set of scanl/scanl1/scanr/scanr1
 1821 	operations is now provided, which is also compatible with
 1822 	Haskell. The old scan/scan1 operations are gone, you'll have to
 1823 	change your scripts accordingly. The following declarations should
 1824 	do the trick for most purposes:
 1825 
 1826 	public stdlib:scanl F A Xs as scan;
 1827 	public stdlib:scanl1 F Xs as scan1;
 1828 	
 1829 	* modules/curl, configury: added new curl module
 1830 
 1831 2004-01-21  Albert Graef  <Dr.Graef@t-online.de>
 1832 
 1833 	* stdlib.q, stream.q: bug fixes, cosmetic changes, overhaul of
 1834 	zip/unzip operations
 1835 
 1836 2004-01-20  Albert Graef  <Dr.Graef@t-online.de>
 1837 
 1838 	* stdlib.q: added curry and uncurry functions
 1839 
 1840 	* clib: `bytes' is no longer a synonym for list, but `list' is
 1841 	overloaded on byte strings instead
 1842 
 1843 	* mod_q: now also works with Apache 1.3
 1844 
 1845 2004-01-18  Albert Graef  <Dr.Graef@t-online.de>
 1846 
 1847 	* mod_q: added the Q Apache module (Apache2+prefork MPM only for
 1848 	now)
 1849 
 1850 2004-01-15  Alb