-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRELNOTES
10708 lines (7759 loc) · 366 KB
/
RELNOTES
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
TXR 298
2024-12-17
Bugs
- listener: regression: txr won't start interactively
if ~/.txr-profile or ~/.txr_profile file is not present,
terminating with an error about nil being passed to abs-path-p.
TXR 297
2024-12-16
Features
- Lib:
- mapcar now has a synonym, map.
- copy: now handles range objects.
- Listener
- TXR now looks for .txr-profile and .txr-history files
with a dash; if those are not found, then it falls back on
trying .txr_profile and .txr_history (and will save the
history to the legacy name).
Bugs
- regex:
- regression in read-until-match and related function
- flaw in NFA state machine such that the new REGM_MATCH_DONE
state is not taken advantage of and we still read more
characters than necessary to match certain regexes.
- ffi: size calculation for structures with a flexible array
member is now done in the modern way, not the C99 way that
was changed by a defect report.
- string ranges:
- iteration of string ranges whose endpoints are identical strings
was wrongly producing an empty sequence rather than a sequence
of length 1 containing that string.
- length of reversed string ranges produced incorrect results
on some platforms
- assembler warning on loongarch64.
TXR 296
2024-08-07
Fifteenth Anniversary Edition
Features
- Lib:
- new cshuffle, cnshuffle functions which output cyclic permutations
- sequences:
- new wheref, whereq, whereql and wherequal functions:
companions to where.
- new functions find-maxes and find-mins: find multiple minimal/maximal
elements.
- new mapfun argument in keep-if, remove-if and keep-keys-if, allowing
output to be mapped through function.
- zip, transpose: more permissive; will not fail when trying to
produce strings, but a non-character object occurs.
- seq-like: new function which makes a sequence out of its second
and subsequent arguments which is of the same kind, if possible,
as its first argument.
- OOP:
- structs can now have special methods slot and slot-set
and special functions static-slot and static-slot set
- these dynamically handle the case when a slot is not found.
- JSON:
- JSON printing now renders struct objects.
- A "__type" property is emitted, giving the type.
- can be disabled by making *print-json-type* nil.
- new *read-json-int* variable
- controls whether JSON integers are read as integer objects or float.
- integers are defined as numbers without a decimal point, e or E.
Bugs
- TXR Pattern Language:
- spurious retention problem solved
- allows, e.g. @(repeat) through huge files without runaway memory.
- regex:
- the read-until-match function now avoids all unnecessary consumption
of input.
- this means that if data is being delimited by regex out of
a real-time source such as a socket, it will not hang waiting
for more input that is not yet available, even though the
record has already been delimited.
- GNU Awk's record separation has similar issues.
- hash tables:
- hash codes of struct instances and hash table objects being
wrongly reduced into positive fixnum range instead of using the
full pointer-sized unsigned type.
- forgotten change not made six years ago.
- JSON:
- flat-p argument in put-json and put-jsons now works correctly;
no stray newlines are emitted.
- sequences:
- sub function was returning an iterator in some cases resulting
in odd results like:
(partition 1..10 '(2 3)) -> ((1 2) (3) #<seq-iter: a24c380>)
- partition, split and split*
- infinite looping regression
- handling of negative indices (that are still negative after
subtracting length).
- split, split*: poor behavior for indices beyond length
TXR 295
2024-06-28
Features:
- TXR Pattern language:
- Promising solution found for spurious retention problem that has
plagued the project from nearly its beginning!
- Fix allows large files to be scanned without consuming more
and more memory.
- Lazy lists:
- New function lcons-force: recursively force.
- Printer:
- pprint prints buf objects as hexadecimal, rather than dumping
raw bytes.
- Quasistrings:
- Buffer objects interpolated into quasistrings now appear in hex as
contiguous digits, rather than as space-separated decimal numbers.
- Buffer and string values now support separation:
- if var is a string @{var ":"} will interpose : between
the characters.
- if it is a buffer, : will be interposed between pairs of
hex digits, not individual digits.
- Subprocesses:
- New functions for filtering data through external processes:
- map-command-lines, map-process-lines
- map-command-str, map-process-str
- map-command-buf, map-process-buf
- New mode option supported by open-process and related functions:
- mode syntax ?num, where num is a decimal number, specifies
an alternative file descriptor to be used as the data source
or sink by the returned stream.
- Structural Pattern Matching:
- new @(scan-all <pat>) pattern: like @(scan <pat>) but
gets all matches.
- Sequence iteration:
- New iter-cat function for mapping over multiple sequences as one.
- New copy-iter function to duplicate an iterator, at its current
iteration point, so the original and copy independently walk
the rest of the sequence.
- iter-begin and related functions now recognize floating-point
numbers and work with them directly, just like with integers,
rather than returning an opaque, stateful iterator object.
- Hash tables:
- New function copy-hash-iter.
- Combinations/Permutations:
- New functions permi, rpermi, combi and rcombi which
are like their counterparts without "i", but produce iterators
rather than lazy lists.
- Compiler:
- Update list of effect-free functions.
- Sequences:
- interpose function uses seq_iter and seq_build.
- length can now measure a string range like "AA".."ZZ".
- string ranges are no longer ascending or descending,
the individual characters are.
- Thus ranges like "AC".."CA" work: the left letter
counts up, the rightmost one counts down.
- Lib:
- lot of functions that were throwing exceptions of type
error now throw more specific type.
Bugs
- gc:
- inadequate marking in some iterator types.
- protect the symbols used for cobj_class registration.
- quantile: missing run-time type check for the state object,
being of the expected type.
TXR 294
2024-03-17
Features
- Compiler:
- Now generates inline code for chained functions and lambdas, such
as that arising out of the opip syntax.
- OOP:
- new special method length-< lets a lazy sequence object implement support
for being tested with the length-< function (is the length less than a
given integer without forcing existence).
- Lib:
- New hist-sort-by function: hist-sort with a mapping function.
- New functions cons-count and cons-find.
- New function rangeref for obtaining an intermediate value from
a range using an integer index as if it were a sequence.
- For consistency: because ranges can be treated as sequences.
- Pattern matching:
- End pattern in @(sme) and @(end) can be any pattern now, not
a list pattern.
- Internals:
- New framework introduced for gathering items into a sequence,
called "seq_iter".
- Takes into account the type of sequence being constructed up-front,
to avoid the overhead of collecting a list and then coercing it.
- Functions that have been improved with seq_build and in some
cases seq_iter: keep-keys-if, separate, separate-keys, tuples, mapcar,
mappend, mapdo, partition-by, partition-if, partition, split, split*,
zip, unique, find, rfind, window-map, append, nconc.
Bugs
- stability:
- gc problem in iter-begin.
- gc problem in sub-str on lazy string arg.
- gc issue in eval in code related to binding special variables.
- gc correctness issues in make-strlist-input-stream,
make-struct, make-lazy-struct, copy-search-tree,
make-similar-tree, copy-fun (for VM functions).
- build:
- fix in configure script for BSD grep.
- fixes in ordering issues in compilation of stdlib to actually achieve the
shortest bootstrapping time.
- ports:
- fixes for OpenBSD.
- Support PPC64 with Altivec more properly by saving and restoring
VR31 register. Fixes a reported failure to build and pass tests.
- Not a perfect fix: pragmatic whack-a-mole approach based on
empirically seeing which Altivec registers occur in the code,
needing saving.
- cygwin:
- fixed broken handling of drive-relative paths.
- handling of termination status in run and sh functions fixed
to be like that on POSIX platforms.
- documentation:
- source parameter of mmap documented.
- mmap: too low length confusingly diagnosed: as "zero-sized element type".
- hash-eql: always returning zero due to regression.
- mapcar, mappend, mapdo: avoid alloca request proportional to number of
args, switching to malloc over a certain size.
- list-vec: accidental use of int type to hold vector length: fail on
64 bit systems with vectors having more than 4G entries.
- misc:
- avoid realloc to size zero, since latest ISO C draft makes
it undefined behavior.
- keep-if: don't report as remove-if in errors.
TXR 293
2023-12-28
Features
- load:
- when a top-level load exits by returning from the load block, the block
value now becomes termination status of process.
- JSON:
- now supports Lisp comments as an extension.
- I/O:
- New functions read-objects, file-get-objects, file-put-objects,
file-append-objects.
- Hash Tables:
- New function hash-join, similar to hash-uni but usefully different.
Bugs
- TXR: bug in @{nil ...} variable match.
- compiler:
- compile-file can now handle top-level forms that
perpetrate a non-local exit, without requiring compile-only
around them.
- optimizer now watches for exceptions during constant folding,
similarly to how the front end does.
- listener:
- several bugs in auto compound expr mode fixed.
- perm, rperm, comb, rcomb functions:
- now support all sequence types, not only lists, vectors and strings.
- comb was skipping combinations: defective function repaired.
- glob:
- suppress duplicates generated when multiple double
star patterns are present (supported by the recent glob*).
- fix memory leak that can happen on early exit due to error
function performing a nonlocal control transfer.
- sh-esc family of functions (recently introduced):
- incorrect specifications overhauled.
- (rcons ...) print/read consistency issue fixed.
- Cygwin: termination status returned by (sh ...) and (run ...)
now has the correct integer value, or nil for abnormal exit,
like on Linux.
TXR 292
2023-11-20
Features
- Build:
- speed up compilation of stdlib with optimal compilation
order of several key files.
- Revised confusing build instructions in ./configure script.
- Makefile improvements:
- cruft removed; dependency generation simplified.
- mkdir invocations factored out to rule.
- DELETE_ON_ERROR: used now.
- Streams:
- A new protocol between the close-stream function and its
lower-level implementation allows delegate streams to
implement a reference counting discipline for closing.
- open-file now supports a "T" mode for O_TMPFILE (on Linux,
or anywhere else O_TMPFILE is supported).
- Sequences:
- New functions nested-vec and nested-vec-of for easily
constructing (simulated) multi-dimensional arrays.
- New mref accessor for multi-dimensional access.
- also has a side job calling curried functions.
- New csort-group function:
- Like sort-group, but uses csort instead of sort for key caching.
- New hist-sort function: make histogram of sequence, and sort
by descending frequency.
- New length-list-< function for testing whether a list is
shorter than a given length without traversing it beyond
that length.
- New length-< function for testing any sequence's length
against a value without traversing/forcing the sequence
to calculate its length.
- ref now documented as accessor, not just function.
- del operator now allowed on places that index into sequences
implemented by structures:
- requires both lambda and lambda-set methods.
- Strings:
- New str-esc function for generic character escaping.
- New shell escaping functions: sh-esc, sh-esc-all, sh-esc-dq
and sh-esc-sq.
- Packages
- New feature: local symbol renaming
- Symbols can be imported under alternative names.
- New use-sym-as function and :use-syms-as defpackage clause.
- Better idea than nicknaming packages (package-local nicknames).
- Functional library:
- New: left-inserting pipeline operators: lflow, lopip, loand.
- New: macros orf and lorf for condensing certain op syntax.
- New: tap macro, for expressing side effects in pipelines while passing
through the value.
- Syntactic places:
- New: ensure macro evaluates an expression and stores its value
into a place, if that place's current value is nil.
- Pattern matching:
- some match-case instances are now transformed into casequal.
- FFI:
- Now provides a setjmp macro, longjmp function as well
as a jmp-buf utility function that allocates a jmp-buf.
- Now possible to interact with libraries that use longjmp
for error aborts like libpng and such.
- POSIX:
- chdir function takes stream or file descriptor, which are
handled via fchdir.
- New glob* function to complement glob:
- glob* supports the ** (double star) operator for recursing,
via its own implementation, not relying on glob providing that.
- glob* has its own implementation of brace expansion.
- New rlink function which is like link, but resolves the target path
if it denotes a symlink.
- Listener:
- *listener-sel-inclusive-p* is now default, since most terminals
have block cursors by default.
- New feature: auto compound expression mode lets you omit
the parentheses.
- Math:
- The tofloat and toint functions are now generic via the
user-defined arithmetic struct mechanism.
- JSON:
- Allow integer objects to be printed rather than insisting on
numbers being floating-point.
- Allow lists (including lazy lists) to print as [ ... ]
rather than insisting on vectors.
- Windows Installer:
- Does not require admin privileges any more; will install for
just the current user if the user isn't admin.
- Documentation:
- big change: new hashing scheme for navigation and doc lookup.
- section titles now hashed in a more robust way that is resistant
against most kinds of edits.
- stdlib/doc-syms.tl file is now gone: one less thing to maintain.
- Numerous fixes in manual.
Bugs
- Compiler:
- numbers now externalized sanely in .tlo files:
- compile-file makes sure base 10 is used for integers
- floating point numbers written with sufficient precision
- Loading:
- load-args-process bugfix: :compile action must load.
- Streams:
- close-stream caches only successful result from underlying
function.
- a few close functions underneath close-stream were returning
nil in the successful case.
- OOP:
- Fix segfault looking up special method after the static slots
table of the type has been resized.
- Pattern matching:
- Missing autoloads for match-error and sys:match-pat-error,
causing compiled files containing pattern matching not to load.
- Awk macro:
- prn returns nil
- Search trees:
- bug: tree-delete-specific-node not using key fun.
- Lib:
- Two bugs in flatten* function.
- Bug in deletion of (ref ...) place: incorrect when object is list.
- Crypt:
- less strict error token detection for wider platform support.
- Time:
- time-utc and time-local methods must subtract gmtime, not add.
- time-parse-utc and time-parse-local, likewise.
- Build:
- Misspelled PLATFORM_LDLIBS corrected.
- Fix for _TIME_BITS being tied to _FILE_OFFSET_BITS
- Address autoload circular dependency involving stdlib/error.tl
that can fail builds under some library build orders.
- Vim:
- Fix lack of recognition for char escapes in quasilit.
TXR 291
2023-08-06
Features
- opip macro:
- now supports binding variables which are visible
to the rest of the chain.
Bugs
- symbol-function accessor: not supporting functions whose names are not
symbols, like (meth ...)
- Regression introduced in TXR 290.
- compiler: invalid constant folding of load-time values.
- Recent regression.
- Pattern Language: in output-side @(repeat), inability to specify :vars
together with :counter.
- Regression dating back to March 2016.
TXR 290
2023-07-29
Features
- Compiler:
- Deeper constant-folding optimizations, assisted
by data flow information.
- Data Integrity:
- SHA-1 digest now provided; it is in wide use.
- Lib:
- group-by, group-reduce and unique functions refactored to use sequence
iteration.
- Math:
- Numerous C99 math functions now exposed:
- cbrt, erf, erfc, exp10, exp2, expm1, gamma, j0, j1, lgamma,
log1p, logb, nearbyint, rint, significand, tgamma, y0, y1,
copysign, drem, fdim, fmax, fmin, hypot, jn, ldexp, nextafter,
remainder, scalb, scalbln, and yn
- All of these can be user-defined in a custom arithmetic struct.
- Environments
- Internal representation of top-level environments is simplified,
eliminating a level of indirection.
- New functions for lexical introspection:
- lexical-binding-kind, lexical-fun-binding-kind,
lexical-symacro-p and lexical-macro-p.
Bugs
- hash: out-of-bounds access in hash-iter-peek function causing instability
in hash iteration that depend on this function.
- crypt function:
- handle libxcrypt failure tokens properly, so that we treat them as an
error instead of returnig them to the application.
- md5: was totally broken on big endian.
- VM: compiled functions were not picking up redefinitions of functions that
they call, sticking with the old functions. This issue was uncovered during
work on the new representation of top-level environments, which also
happens to fix the problem.
- pattern matching:
- the above VM bug fix means that the double definition of
sys:non-triv-pat-p in the pattern matching module is handled right;
causing sys:transform-qquote to be expanded using the correct definition
of the function, exposing an obscure issue with quasiquoted hash
literals.
- another bug: variable patterns like @var were not seeing lexical
symbol macros, only global symbol macros, global variables and
lexical variables.
- environments: redefinition of symbol macros was found not to trigger cache
invalidation in VM descriptors, causing compiled code to keep seeing
the old definitions of the symbol.
- lib: the del operator now works with index lists, which is the access
notation like [obj '(1 2 4)] for picking out indices.
As a result of this, there is a change in semantics in how the
replace function handles index lists. If there are fewer replacement
items than indices, then instead of stopping, the replace function
deletes the specified indices. (Subject to -C option.)
- paths: rel-path function was considering empty strings to be
absolute paths, causing (rel-path "" "a") to be diagnosed as an
invalid mixture of absolute and relative paths.
- environments: bugfix in lexical-var-p and lexical-lisp1-binding.
TXR 289
2023-07-02
Features
- TXR Pattern Language:
- New @(push) directive uses @(output) syntax to push lines
back into input.
- Pattern Matching:
- New match-cond macro.
- Lib:
- New cached sorting functions, for situations when a fairly expensive
keyfun is used for sorting.
- Lisp:
- eval takes macro environment.
- integers and ranges are function-callable objects
- provides succinct indexed access in functional expressions, using
integers and ranges as higher-order functions.
- Hash Tables:
- Switched from chained hashing to open-addressing with linear probing.
- New hash-map function: populate a hash with keys from a sequence, and
values from a function over those keys.
Bugs
- hash tables: bug in initial hash mask calculation, caused zero bits,
causing some chains not to be used, reducing efficiency.
- gc bug in vector case of ssort function, causing crash.
- equal: fix broken cases in equality substitution.
- range objects were not treated as iterable in some situations,
for no good reason: e.g. (take 13 "AA".."BB") didn't work,
requiring (take 13 (list-seq "AA".."BB")) as a workaround.
TXR 288
2023-06-10
Features
- Lib:
- New keep-keys-if, separate-keys functions.
- Compiler:
- New clean-file function for removing compiled file
with name built-in path resolution strategy
harmonizing with compile-file.
- New compiler option log-level.
- level 1: info message when file is compiled.
- level 2: info message when top-level form is compiled.
- Modularization:
- New functions load-args-recurse and load-args-process
- Handle a build/load command passed in *load-args*.
- Provide a disciplined way to structure programs
into hierarchical library modules.
Bugs
- Obscure in bug in compile-file giving rise to a .tlo
that cannot be loaded, under certain conditions.
- Autoload issue affecting with-compilation-unit,
causing compiled files that use with-compilation-unit
not to load.
TXR 287
2023-06-03
Features:
- Lisp:
- New: progv special operator, similar to Common Lisp's
- New: compiler-let: binds dynamic variables in the
compiler's context, allowing control over the compiler
at the expression level.
- with-compile-options now implemented using compiler-let.
- Awk macro:
- redirection operators visible in wider scope
- new :fun clause for binding functions local to macro.
- Compiler:
- small optimizations: when all local functions in
a labels/flet block are unused, the frame is not
generated for them.
- Expander:
- Parameter list macros now work in nested lambda lists.
(This is also listed below under Bugs.)
- New expander-let macro for binding special variables
at macro-expansion time.
- Allows customization of macros which occur inside,
by having them respond to the values of the specials.
- Used in TL-WHO port of CL-WHO to fix CL-WHO bugs.
- Command line:
- The -e option evaluates multiple expressions from
the same argument string.
- They are read together before evaluation, almost
as if they were in the same progn.
- Listener:
- Evaluates multiple expressions in command line,
instead of complaining about trailing material.
- Lib:
- load function has new features:
- extra arguments may be passed to load, which are
dynamically bound to a special var called *load-args*
- a loaded file can bail early using using
(return-from load) or (return-from load <value>)
- the interrupted load function will then return that
value to its caller.
- thus loaded files can behave like functions with
arguments and return values.
Bugs
- Android: fixes for running on Android 13 via Termux.
- Environments:
- Fixed crash when certain built in variables are removed
with makunbound.
- Fixed (symbol-value ...) wrongly storing a value to the
top-level binding rather than the current dynamic binding.
- Fixed bug in the VM: getlx and setlx instructions
using dynamic lookup rather than global.
- Expander:
- Fixed bug in empty case of flets/labels causing
unrelated symbol macros to be strangely affected.
- Parameter list macros now work in nested lambda lists.
- Awk macro: fixed completely broken redirection operators.
- Parser:
- There is now a proper handler for fatal Flex errors, like
when a token is ridiculously long.
- Flex-generated default handler prints something and exits.
- Our handler throws exception.
TXR 286
2023-05-07
Features
- Hash tables:
- some internal code improvements/streamlining
- new hash-props function from instantiating a table from
alternating key/value arguments, requiring no temporary
list to be consed up.
- Sorting:
- New ssort and snsort functions: these are counterparts
of sort and nsort which are stable on vector-like
sequences.
- The nsort and sort function's quicksort
implementation now uses the Hoare partitioning
scheme instead of Lomuto:
- Observed a 21% improvement sorting a randomized
vector of a million items.
- The quadratic behavior on a sequence consisting
of a repeated item is gone.
- Time:
- New time-str-local and time-str-utc functions, which
reverse the arguments, for better
partial application.
- the time argument in time-{fields,struct}-{local,utc} is
now optional; if omitted, the current time is used as if
by calling (time).
- Structs:
- Small improvement in defstruct: if boa arguments are
defined referencing slots that don't exist in any
struct, this is now diagnosed.
- Compiler:
- Lots of new optimization work. There is now one more
optimization round, and *opt-level* now goes up to 6
rather than 7, 7 being the new default value. This
release makes 23 compiler commits.
Bugs
- Fixed incorrect scope in conda/condlet.
- Fixes for regressions preventing the source code of of
stdlib/ being used (.tl files, not .tlo), which is needed
for debugging some TXR problems.
- Fixed issue that happens when code is loaded that
generates warnings during error exception processing,
causing an "invalid re-entry of exception logic",
interfering with debugging TXR using an uncompiled
library (.tl files rather than .tlo).
- Fixed another issue using .tl files: interference
between library loading and the -C compat option.
Compatibility is temporarily disabled while
auto-loading.
- build macro: code rearranged to eliminate circular
dependency, preventing modules which depend on the macro
from loading.
- Pattern matching: ^#S() and ^H(()) quasiquote patterns
work now, thanks to a change in the parser.
- Compiler:
- Fixed incorrect evaluation order of function arguments
(when local variables are involved that are subject to
side effects during evaluation).
- Fixed issue with compiling defmacro:
- entire macro form was being retained
- yet errors not reported against the correct operator
name: e.g. (defstruct) says that defmacro has
insufficient arguments.
- fix also affects tree-bind and other operators.
- Fixes September 2022 regression in liveness
calculation, causing certain optimizations to be
forgone.
- Fixed incorrect blind register renaming across the
arguments of a close instruction, which are not
actually source operands of that instruction.
- Latent problem exposed when trying to replace V
register by T register more aggressively.
- Fixed incorrect live register calculation across catch
instruction.
- This has two clobber register operands.
- Representation of instruction live info was expanded
to handle two register defs.
TXR 285
2023-03-28
Features
- Lib:
- time (on platforms that have a timezone field in struct tm):
- functions which convert a destructured time into a
numeric time, like time-parse-utc, now take the time zone into
account, and add a displacement.
- functions which format time now via strftime now set the time
zone field in the underlying struct tm, so that the %z specifier
featured in glibc's strftime can be meaningfully used.
- New function: ignore: synonym of nilf, intended for suppressing
unbound variable warnings
- New function: arithp: tests for arithmetic objects, including
ranges and structures with + method.
- range/range*: these functions now support non-arithmetic
types: e.g (range "AAA" "ZZZ" 2) generates ("AAA" "AAC" ...
"ZZW" "ZZY").
- TXR Pattern Language:
- fix exception being thrown in matching a bound variable whose
value is a lazy list of strings rather than ordinary list.
- e.g. value captured with @(data ...)
- Structural Pattern Matching:
- @nil is now supported in predicates.
- @(< @nil 42) is like @(< @a 42) but no variable is bound.
- Syntax:
- The symbol t can be used in macro parameter lists and tree-bind,
to specify a pseud-variable which just throws away the
corresponding value.
- Compiler:
- New options mechanism:
- compile-options struct type
- *compile-options* special variable.
- with-compile-options macro
- New unused variable warnings are on by default.
Bugs
- build: fixed regression in building without CONFIG_GEN_GC
or CONFIG_DEBUG_SUPPORT, which are 1 by default.
- gc:
- premature reclamation bug in lisp_parse_impl which is used
internally and as the implementation for functions that parse
Lisp, regex and JSON.
- premature reclamation bug in implementation of FFI enum types:
neglect to traverse a struct member during gc marking.
- premature bug in constructor for FFI structs: neglect
to protect member types from gc in the loop that processes struct
members.
- printer:
- [] object now prints as [] rather than [. nil],
which isn't incorrect, just ugly.
- search tree objects now print as #T(...) beyond the maximum
printing depth, just like #H(...) and others.
- Vim:
- Fixed syntax highlighting for decimal integers and
uninterned symbols.
TXR 284
2022-12-30
Features
- OOP:
- new :inherit clause in defstruct so that inheritance
bases can be specified by clauses.
- Motivated by clauses being programmable.
- Allows defstruct clause macro to bring in bases.
- new feature: struct preludes.
- preludes can specify clauses to inject into specific
defstruct definitions (that have not yet been processed),
without those definitions mentioning anything.
- purely a macro-expansion-time feature.
- Lib:
- cat-str/join/join-with now allow nested sequences.
- System Functions:
- ftw function: the flags argument now defaults to ftw-phys
if omitted (do not follow symbolic links).
- compiler:
- optimizations around catch
- Awk macro:
- result of condition in condition-action clause is avaialble
via a new Awk variable named res.
Bugs
- Compilation from command line via --compile now
sets the self-path variable.
- Listener: drop security checks on Windows, where they
don't work and generate false positives.
- They are geared toward a multi-user system with
a bona fide POSIX security and file permission model.
- crypt: remove dubious validator.
- cannot reproduce the crash issue it was supposed to work around.
- read-once: now supports global variables properly.
- crypt: fix ridiculous stack usage, caused by giant context
structure for glibc's crypt_r.
- hashing: negative floating-point zero handled.
- math: expt with a zero exponent yields 1.0.
- though works that way already on all platforms, it is now documented and
assured.
- compiler:
- some functions were constant folded that must not be, because
they are required to allocate fresh objects each time they are called.
- an instance of runaway recursion in the compiler was fixed in
constant-folding code.
TXR 283
2022-10-16
Features
- Low Level:
- NaN boxing now works on Android, in spite of its pointer tagging.
- String objects no longer track their storage allocation size
on platforms that have malloc_usable_size.
- The word of storage in a string object thus made available has not yet
been put to a use.
- Lisp:
- New %fun% symbol macro provides name of current function.
- Separator commas are now allowed in numeric tokens.
- New functions
- macroexpand-params:
- expand parameter list macros made with define-param-expander.
- macroexpand-place:
- expand place macros made with define-place-macro
- macroexpand-match:
- expand macro patterns made with defmatch.
- macroexpand-struct-clause:
- expand defstruct macro clause made with define-struct-clause.
- Small performance improvements in function dispatch.
- functions with optional arguments no longer put through slow path
- this could be listed under Bugs below
- helper functions for fixed argument dispatch cases now handle
more cases themselves rather than defer to slow path.
- use of alloca has been eliminated from the creation of arguments on the
stack in cases when the size is statically know.
- OOP:
- new :postfini clause in defstruct, allowing for finalization
with order opposite to :fini
- relaxation of constraint: defstruct can specify multiple :init,
:fini, :postinit and :postfini clauses.
- optional arguments :delegate clause now have init expressions
that are not ignored, but specify the default value.
- thus delegates can now customize the defaulting of
optionals rather than being stuck with the target's behavior.
- when delegates specify an optional parameter that corresponds
to a non-optional target parameter, they can thus now
specify a default value, rather than being stuck with nil.
- Networking:
- New sockaddr-str function: parse various textual address