-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNEWS
2039 lines (1909 loc) · 100 KB
/
NEWS
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
5.2.1
- Core libraries
- Fixed an inadvertant error during error reporting in the `numerator`
and `denominator` procedures when passed non-finite flonums (#1730).
- Fixed a bug where optimisations for `irregex-match?` would cause
runtime errors due to the inlined specialisations not being
fully-expanded (see #1690).
- Irregex has been updated to upstream 0.9.8, which fixes behaviour
of irregex-replace/all with positive lookbehind so all matches are
replaced instead of only the first (reported by Kay Rhodes).
- current-milliseconds has been deprecated in favor of the name
current-process-milliseconds, to avoid confusion due to naming
of current-milliseconds versus current-seconds, which do something
quite different. Also, its definition has been tweaked to
guarantee that it returns the time since process startup. On
Windows, it will now return sane values after 24 days of uptime.
On UNIX, the values returned will be precise to the millisecond
instead of rounded down to the nearest second at startup (which
would result in erratic startup times).
- The default mode for files created by `file-open' has been changed
to 0666 (plus whatever change the effective umask applies), rather
than 0744 (see #1698).
- Fixed type database entry for "log" with second arg (fixes #1725).
- Runtime system
- Sleeping primordial thread doesn't forget mutations made to
parameters in interrupt handlers anymore. (See #1638. Fix
contributed by Sebastien Marie)
- A feature corresponding to the word size is available
regardless of the word size (#1693)
- Deprecated C_(a_i_current_)milliseconds in favor of
C_(a_i_)current_process_milliseconds to match the Scheme-level
deprecation of current-milliseconds.
- Officially deprecated C_pair() in favor of C_a_pair(); it has
been deprecated for years.
- At program cleanup, finalizers are only forced when the live
finalizer count is non-zero
- The symbol `srfi-87` has been added to the list of built-in
feature identifiers.
- Garbage collection algorithm has been changed to reduce thrashing
when heap is almost full, by growing the heap sooner. A new -:hf
option was added to tweak when heap growth should occur.
- Compiler
- Avoid re-using argvector when inline rest operations are being
used in CPS calls (#1703, thanks to Jakob L. Keuze).
- Build system
- Auto-configure at build time on most platforms. Cross-compilation
still requires PLATFORM to be set, and it can still be provided
manually, but it is no longer required in the common case.
5.2.0
- Core libraries
- Fix `memory-statistics` by returning semi-space bytes and used
semi-space bytes like the documentation says. Old implementation
returned full-heap size and (full-heap - used-semi-space).
- for-each and map now behave consistently in compiled and interpreted
mode, like in SRFI-1. They now stop when the shortest list is
exhausted instead of raising an exception (fixes #1422).
- There is now a srfi-88 module which contains just the three
procedures from the (chicken keyword) module defined by the SRFI.
- A feature identifier named "srfi-88" is now registered.
- The procedures `record-printer` and `set-record-printer!` and a
corresponding SRFI-17 setter have been added. These deprecate
`define-record-printer` which isn't a "real" definition (see #1294).
- On Windows, `decompose-directory` no longer crashes when a drive
letter is present in the supplied path string.
- irregex-replace[/all] have been fixed for empty matches, so they
will no longer drop characters and ignore the replacement (#1661).
- Irregex has been updated to upstream 0.9.7, which also improves
how empty matches are treated in irregex-fold and irregex-split.
- Runtime system
- Quoted empty keywords like ||: and :|| are now read like prescribed
by SRFI-88 in the corresponding keyword mode. Symbols containing
quoted empty prefixes or suffixes like ||:abc and abc:|| will be
read correctly as symbols now (fixes #1625, thanks to Andy Bennett).
- IEEE floating point negative zero is now properly handled: it can
be read, written and distinguished by eqv? and equal?, but not =
(fixes #1627, thanks to John Cowan).
- ##sys#check-exact and its C implementations C_i_check_exact and
C_i_check_exact_2 have been deprecated (see also #1631).
- When garbage collector is manually invoked from a finalizer, raise
an error instead of hanging forever (fixes #1586).
- define-record-type will now give an error if the constructor
definition refers to field that's not listed elsewhere (see #1633)
- Added new -:hu option to set the memory usage low watermark
percentage at which the heap should be shrunk, and changed the
calculation to actually reflect this (see #1379).
- Compiler
- Fixed a bug in lfa2 pass which caused "if" or "cond" nodes to be
incorrectly unboxed if the "else" branch had a flonum result type
(#1624, thanks to Sven Hartrumpf)
- Inline files no longer refer to unexported foreign stub functions
(fixes #1440, thanks to "megane").
- In some cases, rest argument lists do not need to be reified, which
should make using optional arguments and case-lambda faster (#1623).
- Values from foreign types which have an argument or return value
converter are no longer inferred to have the Scheme type which
corresponds to the raw foreign type, which was incorrect (#1649).
- Module system
- Trying to export a foreign variable, define-inlined procedure or
define-constant variable gives a friendly error instead of saying
the variable doesn't exist (fixes #1346).
- When modules are registered, they no longer pollute the global
environment with imports made in that module (fixes #1548)
- Tools
- The new "-module-registration" options causes module registration
code to always be included in the program, even when it has also
been emitted as a separate file (for example with "-J").
- chicken-install now correctly checks server response code to avoid
interpreting error response bodies (like 404, 500) as Scheme code.
- chicken-install now follows HTTP redirects when downloading eggs.
- chicken-install will now change to the correct drive before
attempting to change to the egg directory (fixes #1647).
5.1.0
- Core libraries
- Symbols ending or starting with a colon are now always pipe-quoted
when written by `write` to ensure they can be read back with a
different keyword-style setting.
- Read-write invariance of special symbols starting with #! other
than #!key, #!rest or #!optional is now preserved (#1572).
- When using (set-file-position!) on a port, its EOF status will now
be reset.
- In (chicken file posix), the values of perm/irgrp, perm/iwgrp,
perm/ixgrp, perm/iroth, perm/iwoth and perm/ixoth are now correctly
defined (they were all for "usr"; #1602, thanks to Eric Hoffman).
- In (chicken file posix), `file-truncate` now accepts also accepts
port objects, for consistency with other file procedures.
All such procedures from (chicken file posix) now have the correct
types in types.db (fixes #1609, thanks to Robert Jensen).
- Add the system-config-directory and system-cache-directory procedures
in the chicken.platform module. These procedures follow the XDG
specification and also give sensible results on Windows.
- Fix get-environment from (chicken process-context) to raise an
error when passed #f instead of segfaulting.
- Qualified symbols (##foo#bar style) are no longer encoded by a
byte prefix inside the symbol name. This ensures read-write
invariance of symbols which start with a low-byte character
(fixes #1077, except for keywords, which start with NUL bytes).
- Fix a missing export (list->s64vector) in SRFI-4.
- Runtime system
- Keywords are now distinct types; they are not a subtype of symbols.
- Use arc4random on FreeBSD (thanks to Tobias Kortkamp and gahr)
- Removed the unused, undocumented (and incorrect!) C functions
C_delete_symbol_table and C_set_symbol_table.
- Continuations which discard additional values beyond the first no
longer accept multiple values via direct invocation after being
captured through `call/cc`, only via `values` (revert of #1390,
due to #1601)
- SRFI-4 vector predicates, reference, set and length procedures
should now be faster in tight loops as they're inlineable (#757).
- Keywords are now interned in a separate keyword table, not in the
standard symbol table. This brings full read-write invariance
for symbols (they can now also start with NUL bytes). Keywords
no longer have plists. Fixes #1576.
- Increased the "binary compatibility version" to 11.
- Compiler
- Restored optimized implementations of =, +, -, /, * and quotient in
fixnum-arithmetic mode (fixes #1604 mostly; thanks to "chickendan").
- Added an optimization pass for reducing the amount of boxing of
intermediate floating point values, enabled by the "-lfa2" compiler
option.
- The "lfa2" pass is now enabled at optimization levels 2 or higher.
- Module system
- When you try to import the module you are currently defining into
itself, an error will be raised. This prevents an infinite loop in
the compiler when later trying to import that same module (fixes
#1506, thanks to Kristian Lein-Mathisen).
- Foreign function interface
- Improved hygiene in FFI macro expansions, which means you don't
have to import "scheme" or "(chicken base)" for them to work.
- Type system
- It is now possible to quote free variables in type declarations,
which acts as shorthand for `forall' (thanks to "megane")
- Tools
- csi now uses (system-config-directory) to find csirc and falls back to
$HOME/.csirc when needed.
- chicken-install now uses (system-config-directory) to find a user
defined setup.defaults file ; it also uses (system-cache-directory)
for its egg cache directory when the CHICKEN_EGG_CACHE environment
variable is not defined.
- Egg specifications
- Allows "cond-expand" and "error" forms in egg specification files.
- Add "c-object" and "object" properties to link separately compiled
C objects into CHICKEN code.
5.0.0
- Runtime system
- Added support for the full numeric tower, including various new
procedures taken from the "numbers" egg. All calculations will
now return exact numbers where possible, so code relying on flonums
being returned may need to be changed if rational numbers do not
provide the desired performance.
- Port directionality has been generalized from a simple input/output
flag to a bitmap, to allow for multidirectional ports.
- Weak symbol GC is faster, simpler, and can now collect all
unreferenced symbols instead of a maximum of 997 per major GC.
- The -:w option has been removed; symbols are now always collected.
- Increased the "binary compatibility version" to 9.
- Continuations which discard additional values beyond the first now
also accept multiple values via direct invocation after being
captured through `call/cc`, not just via `values` (#1390)
- Removed the deprecated C_locative_ref and C_mutate2 C functions.
- The trace buffer no longer holds on to thread objects, allowing them to
be garbage collected sooner (#1356, thanks to Kristian Lein-Mathisen)
- On Cygwin and MinGW, the "build-platform" now corresponds to the
tool chain used (gnu, clang, unknown) like on *nix, while the
software-version is now "cygwin" or "mingw32" instead of "unknown".
This also means the features list will now contain the tool chain
on all platforms.
- Symbols starting with #% are no longer treated specially and need
to be quoted with pipes. This makes the "%" sign available for use
in custom/user-defined sharp-sign read syntax.
- Compiler
- Fixed an off by one allocation problem in generated C code for (list ...).
- The "-scrutinize" compiler option has been removed.
- The "-module" compiler option (aliased as "-m") now expects a module name.
- The generated C output of the compiler is now deterministic: it
will be bit-for-bit identical when compiling the same Scheme file
with the same version of the compiler.
- the "-consult-type-file" and "-emit-type-file" options have been renamed
to "-consult-types-file" and "-emit-types-file", respectively.
- Tools
- The new "-link" option to csc allows linking with objects from extensions.
- The new "-libdir" option to csc allows overriding the runtime library
directory.
- The ambiguous "-l<libname>" option for csc has been removed (#1193).
- Removed deprecated "-n" shorthand for "-emit-inline-file" from csc.
- Removed "chicken-bug" tool.
- Core libraries
- Removed support for memory-mapped files (posix), queues
(data-structures), binary-search (data-structures), scan-input-lines
(utils), group-information (posix) object-eviction (lolevel), and
compile-file (utils). These are now available as eggs.
- Removed the srfi-1, srfi-13, srfi-14, srfi-18, srfi-69, and utils
units. These are now available as eggs.
- Added the `executable-pathname` procedure for retrieving a path to
the currently-running executable.
- Removed all support for SWIG.
- Removed interrupts-enabled declaration specifier.
- `sleep` now suspends the current thread when threading is enabled,
otherwise it sleeps the process. The new `process-sleep` procedure
in unit posix can be used to sleep the process unconditionally.
- `with-error-output-to-port' from the ports module has been renamed
to the more common `with-error-to-port', and `with-error-to-string'
has been added for completeness (thanks to Michael Silver).
- A new `make-bidirectional-port' procedure has been added to the
ports unit that will combine separate input- and output- ports into
a single bidirectional port.
- New `input-port-open?` and `output-port-open?` procedures have been
added for testing whether a port is open in a specific direction.
- An `include-relative` form has been added to the (chicken base) module.
This works like `load-relative` but for textual inclusion.
- Keywords are now always written in "portable" style by WRITE, so
that the reader's keyword style doesn't need to match the writer's.
- The environment variable `CHICKEN_PREFIX` has been removed.
- Added the `glob->sre` procedure to the irregex library.
- Removed the `get-host-name' and `system-information' procedures.
These are available in the "system-information" egg.
- Removed the `eval-when`, `select` and `ensure` macros. These are
available in the "miscmacros" egg.
- Removed the require-extension-for-syntax macro.
- Renamed bit-set? to bit->boolean because of swapped argument order
with respect to SRFI-33 and SRFI-60, which was confusing (fixes
#1385, thanks to Lemonboy).
- file-{read,write,execute}-access will now raise an exception when
the file doesn't exist or some other non-access related problem is
detected (fixes #1386, thanks to Vasilij Schneidermann).
- `change-file-mode` was renamed to set-file-permissions! and SRFI-17
generalized set! support has been added for `file-permissions`.
This procedure now also accepts a file descriptor or a port.
- `file-permissions` now returns one value: the permission integer.
- `read-file` has been renamed to `read-list`.
- `read-all` was dropped, as `read-string` with #f as its NUM argument
is equivalent.
- `read-lines` and `read-all` no longer accept a string naming a file,
only ports.
- The procedures for random numbers have been reimplemented;
access to system-specific entropy is available, together with a reasonably
good pseudo random number generator (WELL512).
- `glob` now returns an empty list for non-existent or inaccessible
directories, instead of erroring out.
- `file-copy' and `file-move' have been renamed to `copy-file' and
`move-file', for consistency with `delete-file' and `rename-file'.
- `rename-file' now refuses to overwrite an existing file unless an
optional "clobber" argument is provided.
- The `r4rs` module no longer exports `eval`, which was not in R4RS.
- `process`, `process*` and `process-execute` now expect lists of the form
(("NAME" . "VALUE") ...) instead of the previous (("NAME=VALUE") ...)
as their environment argument.
- `repository-path` is now a parameter containing a list of strings instead
of a string, as the search path for libraries can now contain multiple
directories.
- `file-read-access?`, `file-write-access?` and `file-execute-access?` have
been renamed `file-readable?`, `file-writable?` and `file-executable?`
into the (chicken file) module.
- Module system
- The compiler has been modularised, for improved namespacing. This
means names from the compiler should not leak out into the compiled
program's (macro) namespace anymore.
- The core units have been converted to modules under the "chicken"
namespace.
- Added support for list-style library names.
- The "use" and "use-for-syntax" special forms have been removed
in favor of "import" and "import-for-syntax" to reduce confusion.
- Module imports are now lexically scoped: identifiers provided by
an (import ...) inside (let ...) won't be visible outside that let.
- Modules implementing an interface can now correctly export extra
identifiers (bug reported by Martin Schneeweis, fix by "megane").
- Syntax expander
- Removed support for (define-syntax (foo e r c) ...), which was
undocumented and not officially supported anyway.
- Removed support for normal "lambda" forms as syntax transformers,
which has been deprecated since 4.8.0.
- define and friends are now aggressively rejected in "expression
contexts" (i.e., anywhere but toplevel or as internal defines).
- define-record and define-record-type now create record types
which are tagged with the module in which they're defined, so
predicates no longer return #t for records with the same tag
defined in another module. This tag is now also available under
an identifier that matches the record type name (fixes #1342).
- `include` now splices included expressions in the context in which
the inclusion appears and does not treat the expressions as toplevel
expressions by default.
- Eggs management
- Egg-installation and building has been completely overhauled.
- .meta + .setup files have been merged into a single declarative
".egg" file.
- More static checks for egg descriptions, simplified generation
of OS-specific build + install commands that is (hopefully)
more practical for package maintainers.
- Egg sources are cached locally to reduce download and rebuild
times.
- Dropped many obscure or unimportant options and features from
`chicken-install`: (`-keep-installed`, `-reinstall`, `-proxy`,
`-no-install`, `-username`, `-password`, `-init`, `-deploy`,
`-keep-going`, `-scan`, `-csi`, `-show-depends`, `-show-foreign-depends`,
`-prefix`.
- Added new "-from-list" option to chicken-install.
- Eggs can now be installed and located in multiple directories,
using the `CHICKEN_REPOSITORY_PATH` +
`CHICKEN_INSTALL_REPOSITORY`
environment variables.
- Static compilation of eggs is now fully supported and static
versions of compiled eggs are available by default.
- In a statically built chicken, the egg-tools ("chicken-install", "...-status",
"...-uninstall") are still available, but only support static compilation
of eggs.
- Foreign function interface
- The foreign type specifier "ssize_t" is now accepted, and "size_t"
arguments now only accept positive integers. Return values of
type size_t are no longer truncated on 32-bit platforms.
4.13.0
- Security fixes
- CVE-2017-6949: Remove unchecked malloc() call in SRFI-4 constructors
when allocating in non-GC memory, resulting in potential 1-word
buffer overrun and/or segfault (thanks to Lemonboy).
- CVE-2017-9334: `length' no longer crashes on improper lists (fixes
#1375, thanks to "megane").
- CVE-2017-11343: The randomization factor of the symbol table was
set before the random seed was set, causing it to have a fixed value
on many platforms.
- Core Libraries
- Unit "posix": If file-lock, file-lock/blocking or file-unlock are
interrupted by a signal, we now retry (thanks to Joerg Wittenberger).
- char-ready? on string ports now also returns #t at EOF, as per R5RS;
in other words, it always returns #t (thanks to Moritz Heidkamp)
- Unit srfi-4: Fixed typo that broke SRFI-17 generalised set! syntax
on s8vectors (thanks to Kristian Lein-Mathisen).
- Large literals no longer crash with "invalid encoded numeric literal"
on mingw-64 (#1344, thanks to Lemonboy).
- Unit irregex: Fix bug that prevented multibyte UTF-8 character sets
from being matched correctly (Thanks to Lemonboy and Chunyang Xu).
- Runtime system:
- The profiler no longer uses malloc from a signal handler which may
cause deadlocks (#1414, thanks to Lemonboy).
- The scheduler no longer indirectly hangs on to the old thread
when switching to a new one, which caused excessive memory
consumption (#1367, thanks to "megane").
- C++ programs no longer fail with a symbol lookup error when
compiled with debugger support (-d3 or -debug-info).
- Syntax expander
- Renaming an identifier twice no longer results in an undo of the
rename (fixes #1362, thanks to "megane").
- Build system
- Fixed broken compilation on NetBSD, due to missing _NETBSD_SOURCE.
- Fixed compilation on DragonflyBSD due to no feature macro support
in its standard C library (thanks to Markus Pfeiffer).
- Compiler
- The scrutinizer no longer uses 'fixnum as the type for fixnums
that might not fit into a fixnum on 32-bit architectures.
- Foreign function interface
- Correctly calculate memory requirements of Scheme objects produced
from foreign types with "const" qualifiers, avoiding memory
corruption (#1424, thanks to Vasilij Schneidermann and Lemonboy)
- Do not read beyond temporary stack buffer, which could lead to
a crash when returning from a foreign callback (#1428).
4.12.0
- Security fixes
- CVE-2016-6830: Fix buffer overrun due to excessively long argument
or environment lists in process-execute and process-spawn (#1308).
This also removes unnecessary limitations on the length of
these lists (thanks to Vasilij Schneidermann).
- CVE-2016-6831: Fix memory leak in process-execute and
process-spawn. If, during argument and environment list
processing, a list item isn't a string, an exception is thrown,
in which case previously malloc()ed strings weren't freed.
- CVE-2016-9954: Irregex has been updated to 0.9.6, which fixes
an exponential explosion in compilation of nested "+" patterns.
- Compiler:
- define-constant now correctly keeps symbol values quoted.
- Warnings are now emitted when using vector-{ref,set!} or one
of take, drop, list-ref or list-tail with an out of range index
for vectors and proper lists of a definitely known length.
- The scrutinizer will no longer drop knowledge of the length of a
vector. It still drops types of its contents (which may be mutated).
- Fixed incorrect argvector restoration after GC in directly
recursive functions (#1317).
- "Direct" procedure invocations now also maintain debug info (#894).
- Syntax expander
- DSSSL lambda lists have improved hygiene, so they don't need
the chicken or scheme modules to be imported in full (#806).
- The let-optionals* macro no longer needs "quote", "car" and "cdr"
to be imported and bound to their default values (#806).
- Runtime system:
- C_locative_ref has been deprecated in favor of C_a_i_locative_ref,
which is faster because it is inlined (#1260, thanks to Kooda).
- The default error handler now truncates very long condition
messages (thanks to Lemonboy).
- Weak symbol GC (-:w) no longer drops random symbols (#1173).
- The number of arguments to procedures, both via "apply" and direct
invocation, are now limited only by the C stack size (#1098).
- "time" macro now shows peak memory usage (#1318, thanks to Kooda).
- Avoid crashes in ffi callbacks after GC (#1337, thanks to cosarara).
- Core libraries:
- Irregex has been updated to 0.9.5, which fixes matching of all "bow"
occurrances beyond the first with irregex-fold (upstream issue #14).
- Keywords are more consistently read/written, like symbols (#1332).
- SRFI-39: When jumping out of a parameterized dynamic extent,
"parameterize" now remember the actual values, so when jumping back
in, they are restored (fixes #1336, thanks to Joo ChurlSoo).
This was a regression caused by the fix for #1227.
- Tools:
- "chicken-install"
- When installing eggs in deploy mode with "-keep-installed", eggs
under the prefix won't unnecessarily be reinstalled (#1144).
- Added new option "-no-install-deps" which inhibits automatic
installation of dependencies, useful with "-prefix" (#1298).
4.11.0
- Security fixes
- Specialisation rules for string-{ref,set!}, bit-set?
and move-memory no longer use unchecked C functions which could
result in undefined behaviour, including buffer overruns (#1216).
- Platform support
- CHICKEN now supports the Linux X32 ABI (thanks to Sven Hartrumpf).
- Tools
- Feathers now has a more neutral color scheme and larger font size.
- With the -dir option, feathers can now correctly find source code.
- Runtime system:
- The calling convention of CPS procedures has been changed to
use "argument vectors" instead of C calling convention.
- The C API of C_values(), C_do_apply() and how to invoke CPS
functions has changed. The C_procN() macros have disappeared.
The manual example in "Accessing external objects" for C_values
has been updated. See also the "numbers" egg for examples on
how to support pre- and post-4.10.1 CHICKENs simultaneously.
- Apply hack is no longer used; the limitation of 128 arguments
has been lifted for platforms which had no apply hack.
- Increased the "binary compatibility version" to 8.
- Delivery of signals in other OS-level threads is now dealt with
in a more robust way (#1232) (thanks to Joerg Wittenberger).
- Compiled programs with large literals won't crash on startup (#1221).
- Comparisons of closures now behave in a stable way, whether or not
the code was compiled with the -no-lambda-info option (#1041).
- The signal handling code can no longer trigger "stack overflow" or
"recursion too deep or circular data encountered" errors (#1283).
- Compiler:
- Specializations on implicit "or" types like "number" or "boolean" now
work, removing the requirement for the inferred types to match
declared types exactly. Specializations are matched from first to
last to resolve ambiguities (#1214).
- Compiler rewrites for char{<,>,<=,>=,=}? are now safe (#1122).
- When requesting to emit import libraries that don't exist, the
compiler now gives an error instead of quietly continuing (#1188).
- Don't silently truncate huge literals (thanks to Claude Marinier).
- Core libraries
- try-compile from setup-api cleans up temporary output files (#1213).
- SRFI-18: thread-join! no longer gives an error when passed a
thread in the "sleeping" state (thanks to Joerg Wittenberger)
- SRFI-18: mutex-lock! will not set ownership of mutexes when
passed #f as the owner (#1231), not disown a mutex from owner if
locking fails for timeout and not keep the last thread which held
a mutex until the next lock (thanks to Joerg Wittenberger).
- SRFI-39: When a parameter's "guard" procedure raises an exception,
"parameterize" now correctly resets the original values of all
parameters (fixes #1227, thanks to Joo ChurlSoo).
- Irregex has been updated to 0.9.4, which fixes severe performance
problems with {n,m} repeating patterns (thanks to Caolan McMahon).
- Unit "posix": The following posix procedures now work on port
objects: file-stat, file-size, file-owner, file-permissions,
file-modification-time, file-access-time, file-change-time,
file-type and all procedures using file-type. These are:
regular-file?, symbolic-link?, block-device?, character-device?
fifo? and socket?.
- Unit "posix": When "file-close" is interrupted it will retry,
to avoid leaking descriptors (thanks to Joerg Wittenberger).
- Unit "data-structures": alist-{update[!],ref} were made consistent
with srfi-1 in the argument order of comparison procedures.
- Unit "lolevel": locative-ref has been fixed for locatives of u32
and s32vectors (thanks to Joerg Wittenberger for pointing this out).
- string->number now signals exceptions if passed a bad base instead
of segfaulting (#1272; reported by "Tilpner" on IRC).
- Tools
- A debugger is now available, known as "feathers", which allows
basic source-level debugging of compiled Scheme code.
- A statistical profiler has been added, enabling sampling-based
runtime profiling of compiled programs.
- "chicken-install"
- When installing eggs in deploy mode, already satisfied
dependencies aren't reinstalled every time (#1106).
- "chicken-uninstall"
- -prefix and -deploy options were added, matching chicken-install.
- "chicken-status"
- -prefix and -deploy options were added, matching chicken-install.
- The -sudo and -s options for chicken-install and chicken-uninstall
now honor a "SUDO" environment variable (thanks to Timo Myyrä).
- Syntax expander
- Mixed internal define/define-values are now correctly ordered, so
later defines can refer to earlier define-values (#1274).
4.10.0
- Security fixes
- CVE-2014-6310: Use POSIX poll() on Android platform to avoid
potential select() buffer overrun.
- CVE-2014-9651: substring-index[-ci] no longer scans beyond string
boundaries.
- CVE-2015-4556: string-translate* no longer scans beyond string
boundaries.
- Core libraries
- alist-ref from unit data-structures now gives an error when passed
a non-list, for consistency with assv/assq/assoc.
- Unit tcp now implicitly depends on ports instead of extras.
This may break programs which don't use modules and forgot to
require extras but use procedures from it.
- SRFI-13: fix string-copy! in cases source and destination strings'
memory areas overlap (#1135).
- SRFI-1: Check argument types in lset and list= procedures (#1085).
- Fixed another, similar bug in move-memory! for overlapping memory.
- Fixed broken specialisation for move-memory! on pointer types.
- Fixed broken specialisation for irregex-match-num-submatches.
- Fixed bug in make-kmp-restart-vector from SRFI-13.
- Removed deprecated implicit expansion of $VAR- and ~ in pathnames.
The ~-expansion functionality is now available in the
"pathname-expand" egg (#1001, #1079) (thanks to Florian Zumbiehl).
- normalize-pathname has been simplified to avoid adding trailing
slashes or dots (#1153, thanks to Michele La Monaca and Mario Goulart).
- Unit srfi-4:
- write-u8vector has been made more efficient (thanks to Thomas Hintz).
- read-u8vector has been made more efficient (thanks to Andy Bennett
for pointing this out and testing an improvement).
- Unit lolevel:
- Restore long-lost but still documented "vector-like?" procedure (#983)
- Unit "files":
- normalize-pathname no longer considers paths starting with ".//"
as absolute (#1202, reported by Haochi Kiang).
- Unit "posix":
- set-file-position! now allows negative positions for seek/cur (thanks
to Seth Alves).
- file-mkstemp now works correctly on Windows, it now returns valid
file descriptors (#819, thanks to Michele La Monaca).
- create-directory on Windows now creates all intermediate
directories when passed #t as second parameter.
- Runtime system:
- Removed several deprecated, undocumented parts of the C interface:
C_zap_strings, C_stack_check, C_retrieve, C_retrieve_proc,
C_retrieve_symbol_proc, C_i_foreign_number_vector_argumentp,
C_display_flonum, C_enumerate_symbols
- Removed several deprecated and undocumented internal procedures:
##sys#zap-strings, ##sys#round, ##sys#foreign-number-vector-argument,
##sys#check-port-mode, ##sys#check-port*
- SIGBUS, SIGILL and SIGFPE will now cause proper exceptions instead
of panicking (thanks to Joerg Wittenberger).
- Module system
- Allow functor arguments to be optional, with default implementations.
- Fixed a bug that prevented functors from being instantiated with
built-in modules.
- Fixed generation of import libraries for instantiated functors
(#1149, thanks to Juergen Lorenz).
- Syntax expander
- define-values, set!-values and letrec-values now support full lambda
lists as binding forms
- cond expands correctly when a constant is used in combination with =>
(thanks to Michele La Monaca)
- C API
- Removed deprecated C_get_argument[_2] and
C_get_environment_variable[_2] functions.
- C_mutate2 has been deprecated in favor of C_mutate
- chicken.h can be included in C++ programs in strict C++11 mode
without compiler errors on Linux (thanks to "Izaak").
- Foreign function interface
- The foreign type specifier "scheme-pointer" now accepts an optional
C pointer type (thanks to Moritz Heidkamp and Kristian Lein-Mathisen).
- Type hinting for foreign-primitives now allows returning multiple
values when no return type has been specified.
- Compiler
- Fixed an off by one allocation problem in generated C code for (list ...).
- Build system
- MANDIR was renamed to MAN1DIR and TOPMANDIR was renamed to MANDIR
in order to comply with standard Makefile practice in UNIX.
- INCDIR was renamed to CHICKENINCDIR, and now derives from
INCLUDEDIR, which defaults to $(PREFIX)/include
- BINDIR, LIBDIR, SHAREDIR, INCLUDEDIR, MANDIR, MAN1DIR, DOCDIR,
CHICKENINCDIR and CHICKENLIBDIR will now also be taken from
the environment, if present (like PLATFORM, DESTDIR and PREFIX).
- Tools
- "csc"
- On Cygwin, -static now works again (thanks to Michele La Monaca)
- "chicken-install"
- When using chicken-install -retrieve, and an error occurs during
retrieval (or the egg doesn't exist), the egg's directory is
now properly cleaned up (#1109, thanks to Alex Charlton)
- "chicken"
- The -r5rs-syntax option did nothing; this has been fixed.
4.9.0
- Security fixes
- CVE-2014-3776: read-u8vector! no longer reads beyond its buffer when
length is #f (thanks to Seth Alves).
- CVE-2013-4385: read-string! no longer reads beyond its buffer when
length is #f.
- CVE-2013-1874: ./.csirc is no longer loaded from the current directory
upon startup of csi, which could lead to untrusted code execution.
(thanks to Florian Zumbiehl)
- CVE-2013-2024: On *nix, the qs procedure now single-quotes everything
instead of relying on a blacklist of shell characters to be escaped.
On Windows, it properly duplicates double-quote characters. (thanks
to Florian Zumbiehl)
- CVE-2013-2075: Use POSIX poll() in other places where select() was
still being used. (thanks to Florian Zumbiehl and Joerg Wittenberger)
- CVE-2012-6122: Use POSIX poll() on systems where available. This avoids a
design flaw in select(); it supports no more than FD_SETSIZE descriptors.
- Core libraries
- Fix subvector when the TO optional argument equals the given vector
length (#1097)
- Unit extras now implicitly depends on ports. ports no longer
implicitly depends on extras. This may break programs which don't
use modules and forgot to require ports but use procedures from it.
- Support has been added for the space-safe R7RS macro "delay-force".
- Export file-type from the posix unit (thanks to Alan Post).
- SRFI-4 s8vectors now work correctly in compiled code on PowerPC and ARM.
- thread-join! now works correctly even if the waiting thread was
prematurely woken up by a signal.
- unsetenv has been fixed on Windows.
- The process procedure has been fixed on Windows.
- Nonblocking behaviour on sockets has been fixed on Windows.
- Possible race condition while handling TCP errors has been fixed.
- The posix unit will no longer hang upon any error in Windows.
- resize-vector no longer crashes when reducing the size of the vector.
- Distinct types for boolean true and false have been added to the
scrutinizer.
- Fixed bugs in string-trim-right, string-index-right and
string-skip-right, from SRFI-13
- read-line no longer returns trailing CRs in rare cases on TCP ports (#568)
- write and pp now correctly use escape sequences for control characters
(thanks to Florian Zumbiehl)
- posix: memory-mapped file support for Windows (thanks to "rivo")
- posix: find-file's test argument now also accepts SRE forms.
- numerator and denominator now accept inexact numbers, as per R5RS
(reported by John Cowan).
- Implicit $VAR- and ~-expansion in pathnames have been deprecated (#1001)
- Fixed EINTR handling in process-wait and when reading from file ports.
- Irregex is updated to 0.9.2, which includes bugfixes and faster submatches.
- Compile-time expansions for "[sf]printf" are slightly more efficient.
- Removed the deprecated "always?", "never?", "shuffle" and "none?" procedures.
- Fixed problem "make-pathname" that returned an absolute path if given
a relative one without a directory argument.
- The implementation of promises has been made more efficient.
- Removed the deprecated "c-runtime", "null-pointer?" and "pointer-offset"
procedures.
- The deprecated alias "mutate-procedure" for "mutate-procedure!" has
been removed.
- On 64-bit systems the feature identifier "64bit" is registered.
- "process-fork" accepts an optional argument that specifies
wether other threads should be terminated in the child process.
- The "signal/bus" signal identifier was missing.
- Added setter-procedure for "signal-mask".
- Added "recursive-hash-max-length" and "recursive-hash-max-depth"
parameters (srfi-69).
- Platform support
- CHICKEN can now be built on AIX (contributed by Erik Falor)
- CHICKEN can now be built on GNU Hurd (contributed by Christian Kellermann)
- Basic support has been added for building Android and iOS binaries (see
the "README" file for caveats and pitfalls) (contributed by Felix Winkelmann
from bevuta IT GmbH)
- Added support for 64-bit Windows (consult the "README" file for more
information).
- Runtime system
- finalizers on constants are ignored in compiled code because compiled
constants are never GCed (before, the finalizer would be incorrectly
invoked after the first GC). (Reported by "Pluijzer")
- The call trace buffer is now also resizable at runtime via ##sys#resize-trace-buffer.
- C_zap_strings and ##sys#zap-strings (undocumented) have been deprecated.
- Special events in poll() are now handled, avoiding hangs in threaded apps.
- When invoking procedures with many rest arguments directly (not via APPLY),
raise an error when argument count limit was reached instead of crashing.
- When the maximum allowed heap size is reached, panic instead of crashing.
- The code generated for mutating data destructively is partially inlined
and thus slightly more efficient.
- Fixed incorrect code in the foreign argument conversion for
"unsigned-integer64" (#955). For unsigned-integer, integer64 and
unsigned-integer64, disallow floating-point numbers. Fix behavior
on 32-bit systems.
- On systems that provide sigprocmask(2), segmentation violations, illegal
instruction signals, bus errors and floating-point exceptions are now caught
and trigger normal error-processing (including a backtrace). The handling
of these so called "serious" signals can be disabled by passing the
"-:S" runtime option to executables.
- Reclamation of unused interned symbols (enabled with the "-:w" runtime option)
works much better now.
- Build system
- The tests can now be run without having to first install CHICKEN.
- Fixed a dependency problem that made it impossible to build the distribution
tarball on Windows with the mingw compiler.
- Increased the "binary compatibility version" to 7.
- Tools
- "csc"
- "-z origin" is now passed as a linker option on FreeBSD when
compiling for deployment (thanks to Jules Altfas & Vitaly Magerya)
- "-deploy" works now on FreeBSD (thanks to Jules Altfas and
Vitaly Magerya), OpenBSD and NetBSD (see README for NetBSD).
- added "-oi"/"-ot" options as alternatives to "-emit-inline-file"
and "-emit-type-file", respectively; "-n" has been deprecated.
- .c/.o files are no longer overwritten when they have the same basename
as a Scheme source file (i.e. "csc foo.scm foo.c -o foo" works now).
- "chicken-install"
- "-deploy" now correctly installs dependencies of
deployed eggs under the deployment directory instead of globally.
- Full URI syntax is now supported for proxy environment variables
(thanks to Michele La Monaca)
- "chicken-status"
- Added -eggs command line option to list installed eggs
- misc
- Removed the deprecated "-v" options (use "-version" instead) in various
core programs.
- The runtime linker path for compiled executables was not set correctly
on FreeBSD systems. This has now been fixed.
- Removed the deprecated "make" and "make/proc" facility from the
"setup-api" module; also removed the deprecated "required-extension-version"
and "required-chicken-version" procedures.
- Syntax
- Added the aliases "&optional" and "&rest" as alternatives to "#!optional"
and "#!rest" in type-declarations (suggested by Joerg Wittenberger).
- Vectors, SRFI-4 number vectors and blobs are now self-evaluating for
R7RS compatibility. Being literal constants, they are implicitly quoted.
- For R7RS compatibility, named character literals #\escape and #\null are
supported as aliases for #\esc and #\nul. WRITE will output R7RS names.
- The CASE form accepts => proc syntax, like COND (as specified by R7RS).
- letrec* was added for R7RS compatibility. Plain letrec no longer behaves
like letrec*.
- Compiler
- the "inline" declaration does not force inlining anymore as recursive
inlining could lead to non-termination of the compiler (thanks to
Andrei Barbu).
- Type-analysis ("scrutiny") is enabled by default now, unless
"-optimize-level 0" or "-no-usual-integrations" is given.
- The "-scrutinize" compiler option has been deprecated.
- A new lightweight flow-analysis pass ("lfa2") has been added.
Enable by passing the "-lfa2" option to the compiler.
- The deprecated options "-disable-warning", "-heap-growth", "-heap-shrinkage"
and "-heap-initial-size" have been removed.
- Removed the deprecated "constant" declaration.
- Removed the deprecated "-lambda-lift" and "-unboxing" compiler options.
- Removed the deprecated "-V" compiler option.
- Generated names for formal parameters of foreign functions are slightly
more informative.
- Unused references to variables that name intrinsics can be removed.
- In the flow-analysis pass, matching of combinations of "list"/"list-of" and
"or" types with has been made more reliable.
- Fixed various bugs in the type database.
- Syntax expander
- added "require-extension-for-syntax" and "use-for-syntax".
- Extended syntactic definitions are now available by default in all
evaluated code, particularly in code evaluated at runtime in compiled
applications.
- Removed the deprecated variant "(define-compiler-syntax (NAME . LLIST) BODY ...)"
of "define-compiler-syntax".
- C API
- Deprecated C_get_argument[_2] and C_get_environment_variable[_2] functions.
- Removed the deprecated "__byte_vector" type.
4.8.0
- Security fixes
- CVE-2012-6125: Improved hash table collision resistance and added
randomization to prevent malicious external causes of collisions.
All SRFI-69 procedures accept extra arguments to control randomization
for testing/debugging.
- CVE-2012-6124: On 64-bit machines the "random" procedure no longer
truncates result values (which caused very nonrandom results for very
large values). Note that random shouldn't be used for
security-critical code.
- CVE-2012-6123: Added checks for embedded '\0' characters in strings
passed to some C functions on a lower level than CHICKEN's FFI.
- Build system
- version information has been moved into a separate unit to make the
build-version shown in the banner and accessible through library
procedures more accurate, this also speeds up the build on version-
changes (thanks to Jim Ursetto for contributing this)
- the build was made more reliable with respect to cross-compilation
and custom installation names
- the test-suite is now working on the mingw32 platform (with
a few tests disabled due to missing functionality)
- the version and branch of the sources are now properly compiled
into the core libraries and shown in the "csi" and "chicken"
version headers
- The default target library name for an installation configured for cross-
compilation is now "libchicken" and independent on any particular
setting of PROGRAM_PREFIX/PROGRAM_SUFFIX (thanks to Otavio Salvador)
- Compiler
- Fixed bug in handling of symbols in constant-definitions (thanks to Peter
Bex)
- Stricter check for value-part of constant definition (thanks to Kon Lovett)
- Fixed bug that caused argument-signatures of external definitions to be
incorrectly modified during optimization (thanks to Peter Bex)
- Failing constant-folding expressions now produce a compile-time warning
- Fixed various bugs in the internal type-database (thanks to Kon Lovett and
Peter Bex)
- Fixed incorrect optimization rules for some fp-rounding and fixnum operators
- added "-specialize" option and "specialize" declaration which enables
optimizations of uses of core library procedures based on type-
information gathered during flow analysis
- "-optimize-level 3" and higher now implies "-specialize"
- added option "-strict-types" and "-emit-type-file"
- progress-information is now only shown with "-debug p"; the "-verbose"
option only shows informational but noncritical messages
- added optimizations for some library procedures
- variable propagation for global variable accesses is now done in certain
situations
- the algorithmic complexity of the closure-conversion pass has been
reduced which speeds up compilation noticably for large files
- the "-uses" option handles whitespace in unit lists given on the
command line (thanks to Santosh Rajan)
- the alternative branch in a conditional is dropped when the condition
is known to be a non-boolean value (suggested by Joerg Wittenberger)
- implemented numerous fixes and improvements for flow analysis
- fixed a bug in the compiler that could cause some variable bindings
to be optimized away in certain situations involving inlining
- added an experimental optimization called "clustering" (enable
with the compiler option of the same name)
- the optimizations done by the compiler are now listed as a comment
in the generated C file
- the type-information obtained during flow-analysis ("scrutiny") is
now used for performing type-sensitive optimizations of calls to
most of the core-library procedures
- deprecated the "constant" declaration specifier
- "unboxing" optimization has been completely removed - the implementation
was unreliable and unmaintainable; the "-unboxing" compiler option will
still be accepted but will produce a warning
- Peter Bex contributed an optimization to the analysis pass that
greatly reduces compile time for source code containing deeply nested
lexical bindings
- procedures that are known to have the value of a core library procedure
that is a "standard" or "extended binding" will be inlined
- enhanced line number tracking to get better error messages from
the scrutinizer.
- hygiene bugs related to compiler-syntax were fixed.
- the local flow-analysis was sometimes reporting multiple warnings
for the same type-conflict.
- the time/space-complexity of some algorithms used in the compiler
were reduced resulting in much better compile-times especially
for large source files.
- Interpreter
- ",q" leaves the currently active REPL invocation instead of
terminating the process (as suggested by John Cowan)
- ",m" properly switches between modules (thanks to Christian Kellermann)
- Core libraries
- Cleaned up the set of available internal SRFI-feature-identifiers
- Fixed bugs in "make-pathname" and "normalize-pathname" (thanks to Jim Ursetto)
- The reader is now more consistent when parsing symbol- and keyword names
that are fully or partially escaped (thanks to Kon Lovett)
- The printer now does a better job at escaping certain single-character
symbol names
- Unit "lolevel"
- deprecated "null-pointer" and "null-pointer?"
- Fixed a bug in the Windows implementation of "file-type" (thanks to
Jim Ursetto)
- Fixed a bug in the implementation of "current-milliseconds" that could
result in integer-overflow
- Fixed an incorrect type-check in "list-ref" (thanks to Sven Hartrumpf)
- Disabled "-setup-mode" when compiling extensions for deployment (thanks
to Ivan Raikov)
- Got rid of some warnings in the C runtime system that were triggered on
the SunPro C compiler (thanks to Joe Python)
- Fixed bug in "string->number" that caused out-of-range characters to
be accepted for base > 10 (thanks to Jim Ursetto)
- added "foldl" and "foldr" procedures, which are more efficient and
have a more consistent argument order than the corresponding
SRFI-1 procedures
- "shuffle" has been deprecated
- added "queue-length"
- "queue->list" allocates and returns a fresh list now
- invoking a parameter-procedure with an argument will return the new
value
- added new procedure "quit"
- port-procedures now check correctly for argument-ports being open
(thanks to Peter Bex)
- "repl" accepts an optional evaluator procedure (suggested by John
Cowan)
- added a setter procedure to "signal-handler" ("posix" unit)
- EINTR is properly handled for input routines that may block
waiting for input
- the implementation of R5RS evaluation environments is now fully
standards compliant
- "file-exists?" and "directory-exists?" work now properly for files
> 2GB (EOVERFLOW handling in stat(3) system call)
- fixed bug in implementation of "fifo?"
- the procedure returned by "condition-predicate" accepts any type
of argument now