forked from mario-goulart/chicken-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNEWS
1421 lines (1352 loc) · 69.1 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
4.9.1
- Security fixes
- Use POSIX poll() on Android (CVE pending).
- 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).
- Fixed another, similar bug in move-memory! for overlapping memory.
- Fixed broken specialisation for move-memory! on pointer types.
- 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).
- Unit lolevel:
- Restore long-lost but still documented "vector-like?" procedure (#983)
- 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).
- 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*
- Module system
- Allow functor arguments to be optional, with default implementations.
- Fixed a bug that prevented functors from being instantiated with
built-in modules.
- Syntax expander
- define-values, set!-values and letrec-values now support full lambda
lists as binding forms
- 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
- Foreign function interface
- The foreign type specifier "scheme-pointer" now accepts an optional
C pointer type (thanks to Moritz Heidkamp and Kristian Lein-Mathisen).
- 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)
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
- blobs have a readable textual representation ("#{...}")
- "find-files" does not follow symlinks by default (as it did previously)
- also, the old non-keyword argument signature for "find-files" is not
supported anymore
- added "alist-update" ("data-structures" unit)
- "irregex-replace" returns the original string instead of #f when the
regex does not match
- irregex "real" built-in utility pattern now accepts a leading sign
- added "change-directory*" ("posix" unit)
- number parsing has been made more reliable and standards compliant
- deprecated "none?", "always?" and "never?"
- library procedures that take ports as arguments now all perform checks
on port-direction and open/closed state
- "mutate-procedure" has been renamed to "mutate-procedure!" - the old
name is still available but deprecated
- deprecated C_hash_string and C_hash_string_ci functions in the C API in
favor of the more secure versions C_u_i_string_hash, C_u_i_string_ci_hash
- a number of bugs in the irregex regular expression engine have been
fixed; it has been updated to upstream release 0.8.3
- "with-input-from-file", "with-output-to-file", "with-input-from-pipe" and
"with-output-to-pipe" now properly restore the standard input/output
ports in case the body thunk escapes
- symbols with a single-char print-name where not always properly escaped
when printed readably
- the "make" facility of the "setup-api" module has been deprecated,
please use the "make" extension when your egg requires this during
setup.
- Core tools
- "csc"
- The environment-variables "CHICKEN_C_INCLUDE_PATH" and
"CHICKEN_C_LIBRARY_PATH" can now be used to add default include-
and link-directories to C-compiler invocations
- "-O5" passed expensive optimization flags to the C compiler which
could expose C-Compiler bugs, depending on the compiler version
(thanks to Sven Hartrumpf for pointing this out).
- "-rpath" is ignored on OS X (thanks to Kon Lovett).
- Fixed handling of "-output-file" (it was being ignored)
- "chicken-install"
- Added option "-override", which allows retrieving extension-
versions from a file - this may be useful to ensure specific
versions of a complete set of eggs are installed
- Added option "-keep-installed"/"-x" that only installs explicitly
named extensions given on the command line, if they are not
already installed
- Added option "-list" that lists all extensions available
- Added option "-csi" to specify what interpreter should be used
to execute the setup-script of an installed extension
- Added option "-scan" that scans a local directory for the highest
available extension versions available
- Added option "-reinstall" that reinstalls all currently installed
eggs, keeping their versions, if possible
- Fixed bug with "chicken-install -test" when multiple extensions where
given on the command line (thanks to Kon Lovett)
- installing subdirectories works now on Windows.
- fixed handling of "-force" when a "chicken" dependency version did
not match
- added new option "-show-foreign-depends" which lists foreign egg
dependencies (if available)
- added new option "-show-depends" which lists egg dependencies
- added support for "or"-dependencies where a dependency is considered
installed if one of a set of candidates is available
- "chicken-profile"
- fixed some bugs in the profiler and the runtime support code for
profiling (thanks to Sven Hartrumpf)
- fixed broken percentage calculation (thanks to "megane")
- "chicken-status"
- Added option "-list" that dumps versions of installed extensions
in a format suitable for "chicken-install -override ..."
- the "pattern" argument is now actually treated as a pattern and not
as a regex
- Core syntax
- "assert" shows the line number of the form when a second argument
is not given or is a literal string
- "parameterize" now correctly omits invoking the guard procedure when
the old value is restored (thanks to Joo ChurlSoo)
- added ":", "the" and "assume" syntax for declaring types
- added "define-specialization" form to declare type-driven procedure
call rewrites in compiled code
- Syntax expander
- Fixed a bug that caused imported identifiers to leak into the
macroexpansion/compile-time environment (reported by Christian Kellermann)
- Fixed a bug in the processing of extended lambda-lists (thanks to Peter Bex)
- Peter Bex fixed a bug that caused bound variables to be incorrectly
renamed in quoted literals (thanks to Matthew Flatt)
- fixed devious bug in the invocation and generation of transformer
procedures
- using normal "lambda" forms as transformers for local or global
syntax definitions is deprecated - one should use "syntax-rules",
"er-macro-transformer" or "ir-macro-transformer" from now on
- Runtime system
- fixed handling of "inf" and nan" floating-point predicates for Solaris
(thanks to Claude Marinier)
- support for re-loading of compiled files has now been completely
removed
- the maximum length of strings is no longer limited to a 24-bit
number on 64-bit architectures but can be 56 bits.
- string-comparison handles embedded '\0' characters.
- numerical predicates handle infinity and NaN correctly.
- deprecated "[+-]nan", "[+-]inf" and other notations "accidentally"
accepted by CHICKEN due to the underlying C library's strtod() function,
standardizing on "[+-]nan.0" and "[+-]inf.0" from R6RS (and soon R7RS),
when displaying numbers only these forms are generated now.
- signals are queued to some extent and the interrupt handling has
been cleaned up somewhat
- the interpreter handles SIGINT directly - loading the "posix" unit
is not needed anymore to handle this feature
- changed default nursery size slightly and fixed a bug that caused
incorrect (too small) nursery sizes on 64-bit platforms
- deprecated the compiler option "-heap-initial-size", "-heap-growth"
and "-heap-shrinkage"
- the assembly-language stub routine for the implementation of "apply"
was broken for Sparc64 systems and has been disabled for this platform
- signal masks were accidentally reset upon GC for some platforms; use
sigsetjmp/siglongjmp on BSD, Linux, MacOS X and Haiku
- Type system
- added new type-specifiers "input-port", "output-port", "(list-of T)"
and "(vector-of T)"
- the type-specifiers "(vector T ...)" and "(list T ...)" represent
fixed size lists and vectors now
- added qualified types ("forall"), optionally with type constrains
- added the "define-type" special form and type-abbreviations
- added "compiler-typecase", a compile-time typematching form
- Module system
- Added "interfaces", which are named groups of exports
- Added "functors", which are parameterized modules
- Modules can now be aliased
- New syntax:
(define-interface NAME EXPORTS)
(functor (NAME ...) EXPORTS ...)
- Extended syntax of "module" for aliasing and functor-instantiation
- the "scheme" module has been integrated into the core library and
is not installed as a separate import library anymore
- added core module "r4rs" containing only bindings for R4RS identifiers
- added core module alias "r5rs" for "scheme" module
- added "module-environment" which returns an evaluation environment
for the bindings of a module
- fixed bugs related to using "export"/"reexport" in combination with
wildcard ("*") module export lists (thanks to "megane")
- Foreign function interface
- locatives are allowed as arguments declared "c-pointer"
- "int32" was not properly detected as a valid foreign type (thanks
to Jim Ursetto)
4.7.0
- Build system
- On BSD, libchicken.so is linked with -lpthread, as this seems
to be required for linking libraries that require pthreads
- The C header-files are now installed in a subdirectory below
the "PRFIX/include" directory to allow installation of multiple
chickens with different PROGRAM_PREFIX/PROGRAM_SUFFIX settings
in the same prefix; to avoid conflicts with existing CHICKEN
headers, it is recommended to completely remove any old
installation before installing the new version
- the PROGRAM_PREFIX and PROGRAM_SUFFIX configuration settings
are applied to generated files and directories which allows
perform differently named installations into the same PREFIX
- increaded binary-compatibility version from 5 to 6, which
means installed extensions in an existing installations will
have to be re-installed
- bugfixes in mingw/msys makefiles
- Sven Hartrumpf contributed a bugfix to the internal helper
script for creating distribution directories
- Peter Bex has cleaned up the makefiles heavily, making the
build more maintainable and easier to modify; thanks to all
who helped testing this new build
- renamed the makefile to `GNUmakefile' to catch using the
a make(3) other than GNU make
- configuration-header fix for BSD systems (thanks to Peter Bex
and Christian Kellermann)
- Core libraries
- the `regex' library unit has been removed and is separately
available as an extension which should be fully backwards-
compatible
- `irregex' is now a core library unit and replaces the `regex' API
- "extras" unit
- fixed pretty-printer output of certain escaped character
sequences inside strings (thanks to Mario Domenech Goulart,
thanks to Kon Lovett for pointing out a missing test-file)
- The pretty printer did not escape some control characters correctly
(reported by Alan Post)
- control-characters in symbol-names are now properly escaped if
the symbol is printed readably (thanks to Alaric Snell-Pym
for pointing this out)
- the deprecated `random-seed' function has been removed
- "files" unit
- fixed bug in `normalize-pathname'
- `file-copy' and `file-move' check whether the source-file is a
directory
- `delete-directory' now optionally deletes directories recursively
- "irregex" unit
- Peter Bex has contributed various bugfixes and performance
enhancements
- "library" unit
- Added "condition->list" (thanks to Christian Kellermann)
- The reader accepts now escaped octal character codes in string
literals
- Read-syntax can return zero values to indicate ignored objects
- R5RS output output routines now always return a "void" result
- "\|" was not correctly escaped when occurring inside
symbol print names
- added `condition->list', contributed by Christian Kellermann
- added `equal=?'
- removed deprecated `getenv', `left-section', `right-section',
`project', `c-runtime' and `noop'
- added missing import-library entry for `vector-copy!' (thanks
to Jules Altfas)
- circular or excessively deeply nested data generates a more
useful error message when encountered by `equal?'
- `list-tail' gives now a better error message when passed a
non-list argument
- fixed bug in `getter-with-setter' that modified the first
argument if it already had a setter procedure attached
- fixed incorrect size of internal data vector used in `time'
(thanks to Kon Lovett)
- "lolevel" unit
- removed deprecated `global-bound?', `global-make-unbound',
`global-ref' and `global-set!' procedures
- added support for `pointer-vectors':
- make-pointer-vector
- pointer-vector?
- pointer-vector-length
- pointer-vector-ref
- pointer-vector-set!
- "posix" unit
- "close-input-pipe" did not return the status code of a
terminated process on Windows (reported by Mario Domenech Goulart)
- added `file-creation-mode' (suggested by Mario Domenech Goulart)
- "setup-api" unit
- `required-extension-version' and `required-chicken-version' have
been deprecated
- "srfi-18" unit
- removed deprecated `milliseconds->time' and `time->milliseconds'
procedures
- `make-mutex' incorrectly created mutexes as initially owned by
the current threads (thanks to Joerg Wittenberger)
- the file-descriptor handling in the scheduler has been simplified
and performs some sanity checks
- deadlock in the scheduler now terminates the process instead of
attempting to throw an error
- added some sanity checks to the scheduler
- "tcp" unit
- Fixed bug in "tcp-abandon-port" (reported by Jim Ursetto)
- "utils" unit
- `compile-file' now returns `#f' when the compilation fails,
instead of raising an error
- Compiler
- Removed unreliable lambda-lifting optimization (now, really!);
the "-lambda-lift" option is still accepted but produces a
warning
- When "-scrutinize" is given, installed ".types" files will be
automatically consulted for extensions and used units
- Fixed optimizer bug in handling of "let" forms with multiple
bindings which could result in toplevel assignments being
silently dropped (reported by Moritz Heidkamp)
- the `-accumulate-profile' option did not provide a way to
specify the target profile data file - now `-profile-name'
must always be given when accumulated profiling is done
(thanks to Taylor Venable)
- added `-module' option, which wraps the code into an implicit
module
- removed check for unsafe toplevel calls in safe mode
- intrinsic handling of `exact->inexact' and `string->number' is
now more efficient
- fixed bug in leaf-routine optimization (thanks to David
Dreisigmeyer)
- unit-toplevel entry-points are now named differently, which
may break binary-compatibility with existing compiled Scheme
code modules
- fixed invalid dropping of unused external entry-points in
block-mode
- fixed incorrect lambda-list check in scrutinizer (thanks to
Alan Post)
- Kon Lovett reported numerous bugs in the type-database used
by the scrutinizer
- `-fwrapv' is disabled on OpenBSD, since the default compiler
does not support this option (thanks to Christian Kellermann)
- on Solaris `gcc' is used by default, override `C_COMPILER'
to use the Sun compiler instead
- declaring a function `notinline' will prevent direct-call
optimization for known procedure calls
- the implementation of overflow-detection for arithmetic operations
on fixnums have been replaced and now allow using the full 63-bit
range of fixnums on 64-bit systems
- fixed serious inlining-bug (thanks to Sven Hartrumpf)
- constant-folding in the compiler has been simplified and
is more reliable (thanks to Sven Hartrumpf)
- optimization-levels 3 and higher imply `-unboxing -inline-global'
- added new declaration `unsafe-specialized-arithmetic' which allows
optimizing unboxed floating-point arithmetic in safe mode
- removed `scrutinize' declaration
- the warning shown when unimported identifiers are used in compiled
modules now also shows the name of the procedure where the
identifier is referenced (suggested by Alaric Snell-Pym)
- Documentation
- Added list of installed files to README
- Documented remaining "c...r" standard procedures (thanks to
Juergen Lorenz)
- The manual is now installed in HTML format in
PREFIX/share/chicken/doc, many thanks to Jim Ursetto for
contributing is excellent `manual-labor' extension which made
this possible
- Foreign function interface
- Added support for missing "(const [XXX-]c-string)" foreign type
(thanks to Moritz Heidkamp)
- removed deprecated `pointer', `nonnull-pointer', `byte-vector'
and `nonnull-byte-vector' types
- added missing result-type handling for `unsigned-integer64'
(thanks to Moritz Heidkamp)
- added `foreign-type-size' macro
- added the new foreign type `size_t' (suggested by Moritz
Heidkamp)
- added the missing `unsigned-integer64' foreign type (thanks
to Moritz for catching this)
- added new foreign type `pointer-vector' which maps to `void **'
and provided a low-level API in the `lolevel' library unit for
manipulating pointer vectors
- Runtime system
- Fixed typo in "runtime.c" (thanks to Sven Hartrumpf)
- Little-endian detection on MIPS systems was not correct (thanks
to Christian Kellermann)
- Fixed bug in handling of runtime-options with arguments (also
reported by Christian Kellermann)
- `equal?' does not compare procedures recursively anymore
- fixed incorrect use of alloca.h on OpenBSD (thanks to
Christian Kellermann and Alan Post)
- checks for NaN and infinity are now done using ISO C99
operations, which required various changes to `chicken.h'
to make the code compile in ISO C99 mode
- remaining debris regarding MSVC builds has been removed
- fixed bug in argument-type check for 64-bit integer (thanks
to Kon Lovett)
- increased default trace-buffer size from 10 to 16
- fixed bug in low-level termination routine (thanks to
Jeronimo Pellegrini)
- the scheduler handles violations of internal invariants
regarding threads slightly more gracefully (thanks to Jim
Ursetto)
- fixed broken sleep-time conversion (thanks to Karel Miklav)
- repaired broken handling of multiple finalizers that referred
to the same object (reported by Moritz Heidkamp)
- fixed problem with reader and escaping of single-char symbols
- Syntax expander
- For-syntax syntax definitions where not correctly retained inside
modules
- Peter Bex fixed various critical bugs in the expander
- The simplification for quasiquote expressions was unable
to handle certain circular data (reported by Moritz Heidkamp)
- `syntax-rules' now supports tail-patterns and is now fully
SRFI-46 compatible - many thanks to Peter Bex for implementing
this
- Peter Bex provided a bugfix for resolution of primitive imports
- handling of internal definitions with shadowed defining
forms is now done correctly - fix once again from Peter Bex
- corrected non-standard behaviour of quasiquote with respect
to nested quasiquotations - another bugfix by our mighty macro
master
- removed stub-implementation of `define-macro'
- handled case where a global redefinition of `cons' influenced
a non-inlined internal use in the expander (thanks to David
Steiner)
- `define-record' now allows defining SRFI-17 setter procedures
for accessing slots
- the expansion of DSSSL lambda-lists uses now `let-optionals*'
internally instead of `let-optionals' and so allows
back-references to earlier formal variables; this also results in
faster and more compact code for argument-list destructuring
(thanks to Alan Post)
- new "implicit renaming" macro facility contributed by Peter Bex
(see `ir-macro-transformer')
- parameters are now settable and can be modified using `set!'
(SRFI-17)
- added a SRFI-17 setter to `list-ref'
- added literal blob syntax ("#{ ... }")
- Tools
- chicken-install
- option "-deploy" does not compile deployed extensions with
"-setup-mode" anymore to avoid problems with dynamic loading on
some platforms (specifically Mac OS X)
- option "-deploy" option did not copy the correct library
(including the version-number) (thanks to Christian Kellermann)
- added support for proxy-authentification (thanks to Iruata Souza)
- when installing from a local directory `chicken-install' now
removes existing `*.so' files in that location to avoid stale
binaries when the `make' syntax is used in setup scripts
- chicken-bug
- removed disabled e-mail support
- csc
- removed `-static-extension' option
- removed deprecated `-windows' option
- fixed incorrect use of `chicken.rc' on non-Windows platforms
in `-gui' mode (thanks to "ddp")
- when compiling in C++ mode, the compiler will be called with the
`-Wno-write-strings' option
- `-frwapv' has been added to the default C compiler options
- csi
- the ",m" toplevel command now accepts "#f" to switch back to
the initial empty module context (suggested by Christian Kellermann)
- fixed broken `,g' toplevel command
- deprecated `script' feature identifier (use `chicken-script'
instead)
- options `-p' and `-P' and `-e' imply `-no-init'
- the call-trace reported will not include exception-handler code
anymore (suggested by Christian Kellermann)
4.6.0
- the licenses used in all components of the core system have
been collected in the LICENSE file (Thanks to Peter Bex)
- Added new compiler option `-no-module-registration' which
omits generation of module registration code, even when
generation of import libraries has not been enabled
- running `chicken' without arguments now hints at the
existence of `csi' and `csc'
- `caar', `cdar' and `cddr' generate faster code
- calls to `list', `vector' and the internal structure
allocation primitive that take 1 to 8 arguments generate
faster code
- `chicken-install' now checks the version of the setup
configuration file `setup.defaults'
- added option `-exact' to `chicken-status' and `chicken-uninstall',
which treats the pattern argument as the literal name of the
extension to be listed/deinstalled
- `assert' shows line-number information, if available
(suggested by Alejandro Forero Cuervo)
- interpreted code records the lexical-environment at call-
sites, which can in case of an error be inspected with the
new `,c', `,f' and `,g' csi toplevel commands
- the evaluation-result history in `csi' can be inspected and
cleared (to reduce memory load) with the toplevel commands
`,h' and `,ch'
- unit `data-structures': deprecated `left-section' and
`right-section'
- fixed bug that caused the static syntax-environment of
syntax exported by a module to be incomplete
- module `setup-api': Documented the `version>=?' and
`extension-name-and-version' proceedures
- unit `posix': `utc-time->seconds' is considerably
faster on Mac OS X (thanks to Jim Ursetto);
added new procedure `file-type'
- the `time' macro now shows the correct number of minor
garbage collections
- the immediate-object check inside the marking procedure
of the garbage collector has been manually inlined which
results in a significant GC speedup, depending on memory
load
- unit `srfi-18' and `scheduler': various bugfixes (thanks
to Joerg Wittenberger)
- unit `srfi-4': bugfix in 8-bit vector allocation routines
(thanks to Kon Lovett)
- added `-:H' runtime option to dump heap state on exit
- fixed missing change in Makefile.cygwin (thanks to John Cowan)
- fixed bug in `let-optionals' macro that caused problems when the
rest-variable was actually named `rest' (thanks to Alejandro
Forero Cuervo)
- when Scheme files are translated to C++ or Objective-C, `csc'
will register the feature-identifiers `chicken-scheme-to-c++'/
`chicken-scheme-to-objc' ar compile-time
- fixed bug in expansion of `#!key' parameters in lambda-lists
- debug-output for forcing finalizers on exit goes to stderr now
(thanks to Joerg Wittenberger)
- the installation routines for extensions automatically add
version-number information if none is given in the extension
property list (suggested by Alejandro Forero Cuervo)
- `standard-extension' accepts `#f' now for the version number
and will use the version that has been obtained via
`chicken-install'
- `fifo?', `symbolic-link?', `directory?', `regular-file?', `socket?',
`character-device?' and `block-device?' now accepts file-descriptors
or filenames
- `find-files' takes keyword arguments, now (including the options
to process dotfiles and ignore symbolic links); the old argument
signature is still supported but deprecated
- removed dependency on `symbol-append' in some macros used in
srfi-4.scm to be able to compile the system with older chickens
- fixed bug in script that generates development snapshot
- added build-variable `TARGET_FEATURES', which can be used to pass
extra options enabling or disabling fetures for a system configured
for cross-compilation
- added compiler and interpreter option `-no-feature FEATURENAME' that
disables predefined feature identifiers
- code compiled with interrupts disabled will not emit inline files
for global inlining since they may execute in a context where
interrupts are enabled
- the `setup.defaults' file that holds download sources for
`chicken-install' now allows aliases for locations
- CHICKEN systems build from cross-compilation now by default
transparently build and install extensions for both the host
and target parts of the cross-compilation setup; the options
`-host' and `-target' can now be used to selectively build
an extensions for the host- and the target system, respectively
- also added `-host' and `-target' options to `chicken-status' and
`chicken-uninstall'
- `chicken-install' now respects the `http_proxy' environment variable
(contributed by Stephen Eilert)
- the `srfi-4' library unit has been heavily cleaned up and optimized
- optimization-level 3 now enables global inlining
- fixed the case that declarations listing global identifiers did not
correctly rename them
- deprecated `-N' option shortcut for `-no-usual-integrations' option in
`csc'
- `csi' now offers a toplevel command `,e' for invoking an external
editor (suggested by Oivind Binde)
- the `describe' command in `csi' now detects many circular lists
(contributed by Christian Kellermann)
- `csi' doesn't depend on the `srfi-69' library unit anymore
- when a closing sequence delimiter is missing or incorrect, the
reader also reports the starting line of the sequence
- the reader signals an error when a file contains certain characters
that indicate that it is a binary file
- procedure-information shown by the printer for procedures is now
corrected for some library procedures that where missing the correct
information; `getter-with-setter' copies procedure-information objects
into the newly created accessor procedure, if available
- calls to some known pure standard- or extended procedures are removed, if
the procedures are called with side-effect free arguments and the
result is not used (this can also by enabled for user procedures with
the `constant' declaration)
- fixed some build-system bugs related to installation
- fixed a problem in the C runtime code that prevented it to be compileable
without a configuration header-file
- the makefile-target to build a bootstrapping `chicken' executable
performs multi-stage build now
- changed error message when required extension is out of date (thanks to
Mario Goulart)
- documented library units loaded by default in `csi' (thanks to Moritz
Heidkamp)
- added `boot-chicken' makefile target to simplify bootstrapping
the system from sources and documented this in the README
(suggested by Jim Ursetto)
- CHICKEN can now be built on haiku (contributed by Chris Roberts)
- on Solaris, the system can be compiled with the SunPro C compiler
(thanks to Semih Cemiloglu)
- removed the `-disable-warnings' compiler option and `disable-warnings'
declaration specifier
- `fx/' and `fxmod' generate now faster code in safe mode
- cleaned up manual pages
- slightly optimized variable- and procedure-access
- in the compiler `-debug-level 2' implies `-scrutinize'
- internal compiler-transformation for `for-each' and `map'
apply now with any expression as the procedure argument
- the compiler warns about non-intrinsic exported toplevel variables
which are declared to be safe
- `csc' didn't handle the `-verbose' option (thanks to Mario Goulart)
- the `,d' command in `csi' now detects circular lists (thanks to
Christian Kellermann)
- strings passed to C runtime functions and which are converted to
0-terminated C strings are now checked for not containing embedded
`\0' characters (thanks to Peter Bex)
- errors in user-defined record printers are caught and shown in the
output instead of throwing an error to avoid endless recursion when
an error message is printed
- a feature identifier named `chicken-MAJOR.MINOR' is now defined
to simplify conditionalization of code on the CHICKEN version
- `getter-with-setter' copies the lambda-information (if available) from
the getter to the generated procedure
- `time' uses a somewhat more concise output format and outputs timing
information to stderr instead of stdout
- added a new chapter on cross-development to the manual
- added the `safe-globals' declaration specifier
- split up manual chapter `Modules and macros' into two chapters
(named `Modules' and `Macros', respectively - suggested by
Mario Goulart)
- the last 5 non-precompiled regular expressions are now internally
cached in compiled form, which speeds up repeated matching of
the same uncompiled regular expression dramatically
- added the new procedure `yes-or-no?' to the `utils' library unit
- added a `bench' makefile target that runs some non-trivial
benchmark programs
- added `install-target' and `install-dev' makefile target for
installing only target system libraries in cross-mode and
development files (static libraries and headers)
- added `[-]no-procedure-checks-for-toplevel-bindings' compiler
option and declaration
- usage of unimported syntax in modules gives more usable
error messages; in particular, used but unimported FFI forms are
now detected
- invalid syntactic forms (mostly `()') encountered by the compiler
or interpreter show the contextual form containing the expression,
or, if indicated by the context warns about missing imports
- simplified manual pages of all core tools - they now refer to
the output shown by invoking `<tool> -help'
- added new option `-feature FEATURE' to `chicken-install' tool
to pass feature-identifiers to invocations of `csc'
- removed deprecated `-host-extension' option from `chicken-install'
- `chicken-status' in a system built for cross-compilation now
lists extensions installed in the target prefix, unless the
new `-host' option is given on the command line
- `chicken-uninstall' in a system built for cross-compilation now
removes extensions installed in the target prefix, unless the
new `-host' option is given on the command line
- added missing entry for `finite?' to the `chicken' module
exports
- added new procedure `port-closed?' to the `library' unit