summaryrefslogtreecommitdiffstats
path: root/RELNOTES
blob: fdea8f128bda59ea2ae00711e462c056e6065ee1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
                                     TXR 98
                                   2014-09-26


  Features

  - New numeric constants givin pi, e and various limits of floating point
    representation.

  - New syntax-error exception type; syntax errors in expressions passed
    on the cmomand line with -p or -e throw exception how instead of silently
    producing nil.

  - New --gc-delta option and gc-set-delta function related to
    bugfix below.

  - New -C/--compat option for specifying compatibility.

  - New functions: partition and partition*.

  - Revamped documentation: nicely formatted with fonts and section numbering;
    HTML version uses proportional font now, and has internal hyperlinks.

  - Exception names like file_error have been renamed to use a dash
    like file-error.

  Bugs

  - Fixed bad memory performance when the program works with large
    heaped objects, by making GC aware of this memory.

  - Fixed broken return value semantics of orf and and combinators.



                                     TXR 97
                                   2014-08-14


  Bugs

  - A few GC-related fixes after code review.

  - Fixed @(load), broken in TXR 94.

  - Fixed broken @{var mod} syntax Lisp quasiliterals, broken in TXR 96.



                                     TXR 96
                                   2014-08-14


  Features

  - Big change in pattern language in the variable binding logic.
    When unbound variables are followed by directives, then the full right hand
    context to the end of the line is used to determine the binding.

  - Internal functions related to tries exposed: trie-lookup-begin,
    trie-value-at, trie-lookup-feed-char.

  Bugs

  - Fixed bug in ret operator: was generating fixed arity functions
    rather than n-ary as documented.



                                     TXR 95
                                   2014-08-07


  Bugs

  - Fix major regression: bad syntax causing crashes in parser.



                                     TXR 94
                                   2014-08-05


  Features

  - New functions: giterate, partition-by, uniq.

  - reduce-left and reduce-right correctly work on strings and vectors.

  - quasiquote splices can now occur in string quasiliterals, directly
    as `xyz @,foo`,  `xyz @{,foo}`, `xyz @,(foo)` etc. Previously this
    syntax was rejected, requiring workarounds like (let ((x ,foo)) `xyz @x`).

  - POSIX functions exposed: getpid, getppid, kill, setitimer, getitimer.

  - The parser is now re-entrant. This means that macro expanders can
    safely recurse into the parser, for instance with regex-parse
    or read.

  Bugs

  - @(output) blocks were discovered not to be applying filters to the results
    of embedded TXR Lisp evaluations.

  - n-perm-k function was broken for values of k equal to 1.

  - Fixed situations when exceptions with bogus messages are issued when the
    arithmetic +, - and * functions are called with wrong type arguments.

  - Fixed grossly incorrect documentation of the repeat function, to
    reflect actual syntax and behavior.

  - Fixed situations in which some signal handlers that don't need to
    execute on a separate stack might do so.

  - Put in a guard against async signal nesting: a situation when
    an asynchronous signal handler performs some blocking operation
    which enables async signal handling triggering re-entrancy.

  - Fixed platform-dependent behaviors in random number seeding
    (make-random-state function).



                                     TXR 93
                                   2014-07-22


  Features

  - New list munging functions interpose, mapdo, and juxt.

  - New macros caseq, caseql and casequal based on Lisp's case construct.

  - New math function log2 for computing base 2 logarithm.

  - New function get-lines for obtaining list of lines from a stream.
    Actually this is not new; it is a nice synonym for lazy-stream-cons.

  - New functions put-lines and put-strings.

  - Missing function lconsp added for testing whether an object is
    a lazy cons.

  - Documented existing function hash-construct.

  - search-str now supports a negative starting position, which counts from the
    tail of the string.

  - The division function / can now be used with one argument, denoting
    the reciprocal operation.

  Bugs

  - Bindings created using -D command line option are now visible to code
    executed via -e or -p later in the command line.

  - Fixed broken @(eol) directive; was behaving as a complete match, so that
    subsequent directives are ignored.

  - Obscure bug-fixes in @(do) and @(require), involving code that invokes
    pattern funcions, and the visibily of bindings.

  - Fixed hash-construct so it correctly works on an empty vector.

  - Alternative stack (sigaltstack) is now automatically used for SIGBUS
    handlers, not only SIGSEGV.



                                     TXR 92
                                   2014-07-11


  Features

  - New operators ado and ido.

  - New command line option --license.

  - Long overdue flet and labels operators for lexical binding in the function
    space, added as macros.

  Bugs

  - apf and ipf functions fixed.

  - Uninitialized variable bug fix in select function
    and in the index list case of replace-list.



                                     TXR 91
                                   2014-07-02



  Features

  - @(load `@stdlib/ver`) brings in a definition of a new variable
    called *lib-version* which lets programs check what version of
    the library they are using.

  - New functions where and sel for working with multiple indexes
    into a sequence.

  - New function seqp for testing whether an object is a sequence of any type.

  - New functions pos-max, pos-min, find-max and find-min.

  - New character constant #\pnul denoting the U+DC00 code
    (TXR's  "pseudo null").

  - New function tuples for reorganizing a sequence into tuples.

  - New functions true and false, expressive in applicative programming:
    for instance [all true list].

  - New functions member and member-if.

  - New function multi for applying a one-sequence operation to
    parallel sequences.

  - New functions tf, nilf, retf, apf, ipf.

  - New macros ret, ip and ap.

  - New function iapply for applying improper lists.

  - New functions transpose and zip.

  - New functions tok-where and range-regex.

  - New function bit for testing bits.

  - [] indexing now allows element extraction by index list,
    as well as assignment by index list, increasing the "slicing power".

  Bugs

  - Fixed reliance on leading slash as indicator of absolute path in @(load).

  - Fixed breakage in range and range* function (regression introduced
    in TXR 89).

  - Fixed bug in dwim operator: Lisp-1 evaluation semantics being propagated
    into nested forms, contrary to documentation.

  - Line number of error correctly reported in some situations in which
    it previously wasn't.

  - Fixed macros not being expanded inside quasiliteral brace notation.

  - Fixed broken last function.

  - Fixed broken bignum bit operations, not handling negative values
    properly.

  - Fixed reversed logic of logtest function.

  - Fixed some memory leaks in MPI bignum integer operations.

  - Documentation fixes.



                                     TXR 90
                                   2014-06-11


  Features

  - TXR has been ported to FreeBSD 9 and Solaris 10. These operating
    systems are officially supported going forward.  TXR's configure
    and build system has better portability support as a result.

  - call operator is a function now, like it should be.

  - Traling backslash in a dynamic regex is rejected as an error.

  - TXR no longer automatically prints out the bindings; this must be
    requested explicitly with -B. The -a and -l options now imply -B.
    The -b option for suppresing the automatic printing of bindings
    is deprecated.

  - New --args option, allows multiple logical command line arguments to be
    encoded in one physical argument which is useful in conjunction
    with very limited hash-bang (#!) scripting mechanisms on some systems.

  - New variable "stdlib" which expands to a path in the TXR installation.
    This will allow inclusion of standard modules. The stdlib variable
    automatically tracks relocation of the TXR installation.

  - New function for searching sequences for substrings: search.

  - New functions nullify and make-like for easily adapting list processing
    functions to correctly work on vectors and strings.

  - match-str function can now match from the end of a string, at various
    negative offsets.

  - New string comparison functions: str=, str<, str>, str<= and str>=.

  - string-lt function deprecated, replaced by str<.

  Bugs

  - rplaca and rplacd now return the cell rather than assigned value,
    and the return values are now documented.

  - Fixed a widespread bug which occurs when empty strings and vectors
    are treated as lists, due to the fact that they are not equal to
    the nil object.

  - Fixed completely broken string-cmp function, and changed its name
    to cmp-str.



                                     TXR 89
                                   2014-05-11


  Bugs

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

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

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

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

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



                                     TXR 88
                                   2014-04-04


  Features

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

  - New functions empty and last.

  - copy and length functions take hash tables now.

  - Word list literals and word list quasiliterals.

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

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

  Bugs

  - copy and length functions handle lazy strings now.

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

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

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



                                     TXR 87
                                   2014-03-22


  Features

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

  - New macro: when.

  Bugs

  - int-flo function was failing on negative numbers.

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



                                     TXR 86
                                   2014-03-16


  Features

  - Exposed the implementation of tries to user code.

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

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

  - New functions sh and run for running system commands.

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

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

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

  Bugs

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

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

  - Fixed breakage in sub-str over lazy strings.

  - Fixed possible crash in @(trailer) directive.

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

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

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

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

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

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

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

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

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

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



                                     TXR 85
                                   2014-03-07

  Bugs

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

  - Fixed broken "txr -v".



                                     TXR 84
                                   2014-03-07


  Features

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

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

  - New function log10 for base 10 logarithms.

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

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

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

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

  Bugs

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

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

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

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



                                     TXR 83
                                   2014-03-02


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

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

  Bugs

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

  - Fixed incorrect handling of trailing atoms in quasiquote.

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

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

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



                                     TXR 82
                                   2014-02-27


  Features

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

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

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

  - New function copy, for copying sequences.

  - Documentation improvements thanks to Roman Mishin. 

  Bugs

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

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


                                     TXR 81
                                   2014-02-25


  Features

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

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

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

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

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

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

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

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

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

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



  Bugs

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

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

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

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

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

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

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

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

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

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

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

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



                                     TXR 80
                                   2014-02-17


  Features

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

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

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

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

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

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

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

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

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

  Bugs

  - Removed bogus optimization from hash table implementation.

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

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

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

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

  - Doc bugs: missing descriptions of gethash and gensym.



                                     TXR 79
                                   2014-02-11


  Features

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

  Bugs

  - Hardening of code for handling excessively large vectors.

  - Bugfix in quasistring handling in TXR Lisp.

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



                                     TXR 78
                                   2014-02-06


  Features

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

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

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

  - New function: list*.

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

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

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

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

  Bugs

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

  - Fixed breakages in do operator.

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

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



                                     TXR 77
                                   2014-01-30


  Features

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

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

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

  - New update and hash-update functions.

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

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

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

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

    

  Bugs

  - Fixed neglected handling of result form in dohash syntax.

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

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



                                     TXR 76
                                   2014-01-23
                                   

  Features

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

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

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

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

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

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

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

  Bugs

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



                                     TXR 75
                                   2014-01-16


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

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

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

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

  Bugs

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

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



                                     TXR 74
                                   2014-01-13


  Features

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

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

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

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


  Bugs

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


                                     TXR 73
                                   2014-01-08


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

  Bugs

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



                                     TXR 72
                                   2013-12-17


  Features

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

  - Stream properties.

  - logand and logior functions become variadic.

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

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

  Bugs

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

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

                                   

                                     TXR 71
                                   2013-12-07


  Features

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

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

  - New *stdnull* stream for discarding data.

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

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

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

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

  - New errno function for accessing C errno.

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

  Bugs

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

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

  - Grammar and spelling in HACKING guide.



                                     TXR 70
                                   2013-11-22


  Features

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

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

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

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

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



                                     TXR 69
                                   2013-10-23


  Features

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

  Bugs

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



                                     TXR 68
                                   2013-10-07


  Features

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

  Bugs

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

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

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



                                     TXR 67
                                   2013-07-13


  Features

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

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

  Bugs

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

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



                                     TXR 66
                                   2013-05-16


  Features

  - Documentation completely filled in.

  - Added specfile for RPM builds.

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

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

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

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

  - New prop function for property list lookup.

  - New stat function for information about files.

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

  - Gapingly missing hexadecimal integer constants have been
    implemented.

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

  - Test form in for loop can be omitted.

  - New package-related functions.

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

  Bugs

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

  - Fixed nonworking building in a separate directory.

  - Fixed broken eval function.

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

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

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

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



                                     TXR 65
                                   2012-04-20


  Features

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

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

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

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

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

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

  - New function find-if.

  - Improved seeding of pseudo-random-number generator.

  - Configure script now diagnoses specification of nonexistent config
    variables.

  - Documentation improvements.

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

  Bugs

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

  Quiet Changes

  - First two arguments to the find function were reversed.



                                     TXR 64
                                   2012-04-06


  Features

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

  - Caching optimization in hash tables.

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

  Bugs

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





                                     TXR 63
                                   2012-03-30


  Features

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


  Bugs

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



                                     TXR 62
                                   2012-03-23


  Features

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

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

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

  Bugs

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

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

 
  
                                     TXR 61
                                   2012-03-15


  Features

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

  - split-str function works with regex objects now.

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

  - new *stddebug* stream used by debugger.

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

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

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

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

  Fixes

  - Fixed memory leak in string byte input stream.

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


                                     TXR 60
                                   2012-03-04


  Features

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

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

  - Improved hashing function for bignums.

  Bugs

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

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

  - numberp function no longer blows up on nil.

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

  - Fixed incorrectly formatted line number information in
    some exceptions.

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

  - Fixed showstopper bug in plus function.



                                     TXR 59
                                   2012-02-29


  Features

  - Implemented put-byte function on streams.

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

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

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

  Fixes

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

  - Broken hex-escaped character literals.

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

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

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



                                     TXR 58
                                   2012-02-25


  Features

  - Exception handling exposed in TXR Lisp.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  - Function remhash was found to be buggy and rewritten.



                                     TXR 57
                                   2012-02-14


  Features

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

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

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

  Bugs

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

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

  - Hex and octal character constants did not work.

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

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



                                     TXR 56
                                   2012-02-06


  Features

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

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

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

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

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


  Bugs

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

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

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

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



                                     TXR 55
                                   2012-01-26


  Features

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

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

  - Indexed elements and slices are assignable.

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



                                     TXR 54
                                   2012-01-21


  Features

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

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

  - New lazy append function (append*).



                                     TXR 53
                                   2012-01-11


  Features

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

  - TXR Lisp:

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

  Bugs

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



                                     TXR 52
                                   2012-01-07


  Features

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

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

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

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

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

  Bugs

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

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



                                     TXR 51
                                   2011-12-28


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

  - PRNG startup behavior improved.

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

  Bugs

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

  - Fixed bug in Lisp expression interpolation in quasiliterals.

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



                                     TXR 50
                                   2011-12-23


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

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

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

  - Vim syntax highlighting definition improvements.

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

  - More complete documentation.

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

  - Added memql function.

  Bugs

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

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

  - "make distclean" fixed.

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

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

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

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

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



                                    TXR 049
                                   2011-12-19


  Features

  - New functions for converting between characters and integers.

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

  - dohash establishes anonymous block.

  - Improvements in Vim syntax highlighting file.

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

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

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

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

  - Hashing functions improved for fixnums, literals and characters.

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

  - Quasiliteral strings supported in TXR Lisp.

  Bugs

  - Broken abs function fixed for bignums.

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

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



                                    TXR 048
                                   2011-12-13


  Features

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

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

  Bugs

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

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



                                    TXR 047
                                   2011-12-12


  Features

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

  - TXR Lisp:

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

  - Syntax highlighting definition update for all new operators.

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

  - Fix in rplacd to make lazy list programming feasible.

  - Reversed assoc and assq arguments throughout codebase.

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



                                    TXR 046
                                   2011-12-06


  Features
  
  - Vector-related functions exposed in Lisp interpreter.

  - Syntax added for specifying vector literals in code.

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

  Bugs

  - Broken get_line function over string input streams fixed.

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

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



                                    TXR 045
                                   2011-12-05


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

  Bugs

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

  - Bugs in quasiquote.

  - Handling of singleton clauses in cond operator.



                                    TXR 044
                                   2011-12-01


  Features

  - Lisp interpreter added.

  - Relaxed rules for what constitutes symbol names.


  Bugs

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

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

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

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




                                    TXR 043
                                   2011-11-23


  Bugs

  - Buggy @(eol) directive fixed.

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

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

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




                                    TXR 042
                                   2011-11-20


  Features

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

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

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

  - Lisp-style bindings output.

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

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

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

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

  Bugs

  - Horizontal @(some) directive hooked in.

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

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

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

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

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

  Internal

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

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

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

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

  Misc.

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




                                    TXR 041
                                   2011-10-30


  Features

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

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

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

  - New filters: :upcase and :downcase.

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

  - Filters can now be chained into compound filters.

  - Pattern matching functions can be used as filters.

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

  - @(cat) directive changes syntax.

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


  Bugs

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

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

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