"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