1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101
|
5.3.0
- Core libraries
- In (chicken process-context posix), the setters for current-user-id,
current-effective-user-id and current-group-id now check that the
new user/group value is a fixnum instead of blindly passing it on
to the C implementation (which would cause bogus user ids to be set).
Fixes #1787, thanks to Christopher Brannon.
- The srfi-17 module now exports the `getter-with-setter` and `setter`
procedures, not just the set! macro (thanks to Lassi Kortela)
- Fix hang in chicken-install -update-db on Windows (thanks to Mark
Fisher for reporting and Jani Hakala for debugging and patch).
- 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.10, which fixes behaviour
of irregex-replace/all with positive lookbehind so all matches are
replaced instead of only the first (reported by Kay Rhodes), and
a regression regarding replacing empty matches which was introduced
by the fixes in 0.9.7 (reported by Sandra Snan). Also, the
http-url shorthand now allows any top-level domain and the old
"top-level-domain" now also supports "edu" (fixed by Sandra Snan).
Also, a problem was fixed with capturing groups inside a kleene
star, which could sometimes return incorrect parts of the match.
Finally, "bol" handling was fixed to handle newlines consistently
so that multiple matches don't overlap (reported by Sandra Snan).
- 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).
- Made topological-sort behave better when dependency target is listed
multiple times by concatenating dependencies (fixes #1185).
- Module system
- Reexported macros now work when the reexporting module redefines
identifiers from the original (fixes #1757, reported by Sandra Snan).
- When using "except" in "import" to omit reexported macros,
they are really not imported (#1771, reported by Sandra Snan).
- 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)
- The default maximum heap size on 64-bit platforms is now the
theoretical maximum addressable memory size (#1675). Use -:m
if you would like to override this at run-time.
- 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.
- Added `-:R' runtime option to initialize rand() state
deterministically (should help with #1650 and benchmarking).
- Compiler
- Statically linked programs using built-in libraries are supported
again (fixes #1788, a regression from 5.2.0).
- Avoid re-using argvector when inline rest operations are being
used in CPS calls (#1703, thanks to Jakob L. Keuze).
- An `emit-types-file` declaration has been added, which corresponds
to the compiler flag of the same name (#1644, thanks to Marco Maggi
for the suggestion).
- Fixed a bug caused by a bad interaction between two optimizations:
argvector rest ops would be applied even if a procedure already got
its rest arg consed at the call site (#1756, thanks to Sandra Snan).
- Build system
- Fix build with tcc.
- Fix a few tests on Windows so the suite passes once again.
- 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.
- Fix Linux to MingW cross-compilation (#1768, thanks to Théo Cavignac)
- The `clean' target for make now also removes build configuration files.
- The `distclean' target for make has been removed (now `clean' does what
`distclean' used to do).
- Tools
- Fix a problem with egg installation scripts on Windows, where the
platform was not correctly identified, depending on the shell used
during installation of the core system (thanks again to Mark Fisher
for reporting and helping in finding the culprit).
- Fixed a bug in chicken-install (#1744) that would cause
`Error: (string->number) bad argument type: #!eof` in some cases.
- If chicken-install has a program prefix/suffix, it now writes to a
cache directory matching its program name (#1713, thanks to Alice Maz)
- Fixed bug in chicken-install regarding variable quotation on UNIX-like
systems which prevented installation into paths with spaces (#1685).
- Fixed a similar bug in chicken-install for paths with spaces on mingw
and mingw-msys (#1727, thanks to Josh Helzer for reporting and Vasilij
Schneidermann for the patch).
- Module system
- Fixed a memory leak when calling (import) multiple times in a row
on the same module (#1772; reported by "plugd" on IRC).
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
- 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
(contributed by Peter Bex)
- added new procedure `symbol-append' to the library unit
- the compiler-option `-optimize-level 0' is equivalent to
`-no-compiler-syntax -no-usual-integrations`
- internal rewritings of `map' and `for-each' ensure correct
evaluation order of the arguments and does a better job
at detecting non-list arguments (thanks to Jim Ursetto)
- `void' now takes arbitrary arguments and ignores them
- deprecated `noop' (from the `data-structures' unit) which
is now replaced by `void'
- the `time' macro now performs a major garbage collection
before executing the contained expressions and writes
the timings in a more compact format to the port given
by `(current-error-port)' instead of the standard output
port
- definitions of the form `(define define ...)' and
`(define-syntax define-syntax ...)' now trigger an error,
as required by R5RS (thanks to Jeronimo Pellegrini and Alex
Shinn)
- deprecated `random-seed' from the `extras' unit, since it
is identical to `randomize'
- added new procedure `create-temporary-directory' to the
`files' unit
- deprecated the optional path separator argument to
`make-pathname'
- slightly improved the performance of keyword argument
processing
- removed the deprecated `canonical-path' and `current-environment'
procedures from the `posix' unit
- warnings that mostly refer to programming style issues are
now coined `notes' and are only shown in the interpreter
or when debug-mode is enabled or when scrutiny is enabled
when compiling
4.5.0
- internal fixes of handling of alternative installation-prefix
in setup-api
- certain compiler-warnings that are in really just notes
and don't indicate a possible error (like reimport of
identifiers) are only shown with -S or in verbose mode
- fixed handling of VARDIR in `chicken-install' (thanks to
Davide Puricelli)
- `chicken-install -test' doesn't runs tests for dependencies
- when a non-else clause follows an else-clause in `cond',
`case' or `select' a warning (note) is shown in verbose
mode
- removed the deprecated `define-extension' and
`define-compiled-syntax'
- `chicken-uninstall' now always asks before removing
extensions, unless `-force' is given
- improved performance of keyword-argument processing slightly
- `export' outside of a module definition has no effect
- `number->string' now accepts arbitrary bases between 2 and 16
(thanks to Christian Kellermann)
- fixed `standard-extension' in `setup-api' module
- literal constants keep their identity, even when inlined
- Unit library: added `fxodd?' and `fxeven?'
- All hardcoded special forms have been replaced with
syntax definitions that expand into internal forms, this
allows redefinition and shadowing of all Scheme core forms
- faster implementations of `get' and `put!'
- faster implementation of `assq' in unsafe mode
- the `-sx' option prefixes each output line with `;'
- slightly better expansion performance
- more documentation of the C API (thanks to Peter Bex)
- `module' supports a shorthand form that refers directly
to a file to be included as the module body
- added runtime option `-:G' to force GUI mode (on platforms
that distinguish between GUI and non-GUI applications)
- removed the unsafe runtime library (`libuchicken'), this
simplifies and speeds up the build and reduces the risk
of executables loading library units from different
variants of the runtime system
- removed the `-unsafe-libraries' option from `chicken'
and `csc'
- removed bootstrapping target and bootstrapping files from
development repository; to bootstrap the system, either
use a release or development-snapshot tarball or fetch
a statically linked precompiled `chicken' binary from
http://chicken.wiki.br/chicken-projects/bootstrap/
- Jim Ursetto provided some fixes for building universal
binaries on Mac OS X
- `csc' now compiles and links Windows resource (.rc) files
when given on the command line
- `chicken-install' and `chicken-uninstall' have an embedded
manifest that suppresses the elevation dialog on Windows
Vista and later when UAC is activated (Thanks to Thomas Chust)
- the `install' program is not used in the build on mingw
and mingw/MSYS platforms, since this is broken on older
mingw versions
- line-number-information is now properly handled (in the
few places where it is used) correctly for included files;
the source file is given in trace-output in addition to
the line number
- removed compiler warning for shared objects compiled in
unsafe mode
- unboxing is now only done in unsafe mode
- in unsafe mode, pointer-accessors from the `lolevel' unit
are now handled intrinsically by the compiler
- `chicken-install' accepts now relative pathnames for the
`-prefix' option
- `define-record-type' now optionally allows using SRFI-17
setters as record-field modifiers
- `integer?' returns `#f' for NaN and infinite numbers
- `csc' now has an `-no-elevation' option for embedding a
manifest that prevents the elevation dialog on Windows
Vista and later when IAC is activated
- the `,d' csi command displays qualified symbols properly
- symbols starting with the `#\#' character trigger an
error when encountered by the reader
- Unit posix: `glob->regexp' now always returns a regular
expression object or optionally an SRE
- Unit posix: `terminal-port?' and `terminal-size' have been
implemented for Windows, the latter always returns `0 0',
though (thanks to Jim Ursetto)
- Unit regex: `regexp' now accepts a regular expression
object as argument
- Unit regex: removed `glob?'
- fixed bug in `chicken-install'/`chicken-uninstall' and
`chicken-status' that prevented collapsed command-line
options to be handled correctly.
- disabled runpath-fix for deployed applications for netbsd
(but resurrected providing a runpath at all, thanks to
Peter Bex)
- Peter Bex provided documentation for the `C_closure' C API
function
4.4.0
- the system can now be built with llvm-gcc and/or "clang" (the
LLVM C compiler which doesn't use the GNU C frontend)
- added new option `-trunk' to `chicken-install', which forces
building and installing the development version of extensions
in combination with `-t local'
- added new option `-deploy' to `chicken-install', which builds
extension for use in "deployed" applications (see below)
- added option `-deploy' to `csc', the compiler driver. With this
option `csc' can build fully self-contained application bundles
and double-clickable Macintosh GUI apps; see the "Deployment"
manual chapter for more information
- the directory given to the `-prefix' option of `chicken-install'
may now be a relative pathname.
- removed GUI-specific runtime library (`libchicken-gui') from
Windows build - GUI- and non-GUI applications now use the same
runtime library
- special forms of the foreign-function interface have been replaced
with an internal form and syntax to allow renaming and shadowing of
these forms
- the new `-private-repository' option in `csc' compiles executables
with the extension-repository path set to the directory from which
the program was started
- `csc': deprecated the `-W' and `-windows' options, added `-gui' as
a platform-independent replacement
- `require-extension'/`use' accepts now import-specifications
- user-defined extension-specifiers and `set-extension-specifier!'
have been removed
- `delete-file[*]', `rename-file', `create-directory', `file-copy',
`file-move', `delete-directory' and `change-directory' return their
argument/destination filename on success
- added the missing procedure `condition-variable-name' to the
srfi-18 library unit (Thanks to Joerg Wittenberger)
- the `glob?' function from the `regex' unit has been deprecated
- added the procedure `scan-input-lines' to the `utils' library unit
- added new runtime option `-:g' which enables GC debugging output
- reclamation of unused symbols in "symbol-gc" mode (`-:w') now only
takes place for symbols with an empty property-list
- on Windows loading of code compiled with [non-]GUI runtime libraries
will fail and produce an error message when the loading executable
is linked with a different runtime system
- on Windows, GUI libraries were not correctly linked by `csc'
- unit posix: added setter for `file-modification-time'
- the banner shows the branchname of the build, unless it's "master"
- the `-no-install' option to `chicken-install' is ignored when
building/installing dependencies
- `chicken-uninstall' takes a glob instead of a regular expression as
argument
- the rename and compare functions for low-level macro-definitions
accept now arbitrary s-expressions and renames/compares them recursively
- `number->string' handles negative-numbers with bases different from 10
correctly (thanks to Peter Danenberg)
- removed deprecated `setup-install-flag' and `setup-verbose-flag' from
the `setup-api' module
- added new option `-repository' to `chicken-install' (Thanks to Christian
Kellermann)
- removed `chicken-setup' stub program
- fix to `csc' to use the correct library when fixing dynamic load paths
(Thanks to Derrell Piper)
- removed html documentation from distribution (the wiki manual will
now be installed)
- fixed bug in `reexport' which caused syntax not to be correctly
reexported
- previous assignments to a toplevel variable that are separated by
side effect free expressions are removed
- fixed windows version of `find-files' (thanks to Jim Ursetto)
- documentation for extensions is not installed automatically by
`chicken-install' anymore
- changed binary version from "4" to "5", because the new runtime
libraries are not binary-compatible with previous releases; this
means all eggs have to be reinstalled and existing programs be
recompiled!
- added unboxing pass to compiler which results in partially dramatical
performance improvements for unsafe floating-point-intensive code;
unboxing is enabled on optimization levels 4 and 5
- removed rest-argument-vector optimization as it could conflict
with inlining (thanks to Sven Hartrumpf)
- renamed `pointer-offset' to `pointer+' and deprecated `pointer-offset'
- toplevel assignments that have no other side-effects can be eliminated
if it can be shown that the value is not used (the compiler will
generate a warning in this case)
- removed deprecated `-quiet' option in `chicken' program
- removed deprecated `run-time-macros' declaration
- removed deprecated `-v2' and `-v3' options in `csc' program
- removed deprecated `list-of' function (it is exclusively available
as `list-of?' now)
- removed deprecated `stat-...' functions in posix library unit
- removed deprecated `for-each-line' and `for-each-argv-line' procedures
in utils library unit
- added `fpinteger?' and `fpabs'
- deprecated `define-compiled-syntax'
- added new floating-point primitives `fpsin', `fpcos', `fptan',
`fpasin', `fpacos', `fpatan', `fpatan2', `fpexp', `fplog',
`fpexpt' and `fpsqrt'
- heavy cleanup of floating math functions which gives much better performance,
especially for code compiled in unsafe mode
- calling `assert' with a single argument shows the tested expression
on failure
- various bugfixes and cleaning up
4.3.0
- fixed bug in `move-memory!' that caused negative offsets to be accepted
(thanks to Jim Ursetto)
- removed tracing facility and apply-hook (see the "trace" egg
for a replacement for tracing and breakpoints)
- chicken-install(1): renamed `-host-extension' option to `-host'
- added support for a make(1) configuration file ("config.make")
- `chicken-install' now allows specifiying a proxy for retrieving
extensions over HTTP (thanks to Nicolas Pelletier)
- fixed bug in `cond-expand' that incorrectly renamed feature-identifiers
if the form was the product of a syntax expansion (reported by Thomas
Bushnell)
- import-libraries are only generated by the compiler if they don't exist
yet and if the content has actually changed (this simplifies makefile-
rules in some cases)
- it is now possible to pass a config-file to `make(1)' instead of specifying
all build-options as variables on the command-line (see README)
- removed compiler options for "benchmark-mode" and replaced them with a
new optimization level (5) (note that `-O5' does not imply fixnum mode
anymore)
- `hen.el' and `scheme-complete.el' are not bundled with the core system
anymore - `hen.el' is currently not maintained, and `scheme-complete.el'
has its own release cycle; both files are available, see
http://chicken.wiki.br/emacs
- removed meaningless benchmark suite and cleaned up
- added optional argument to `grep' that allows applying a function
to each matched item (contributed by Tony Sidaway)
- added extension-property `import-only', which makes it possible to
create extensions that have no runtime part
- the argument to `seconds->string', `seconds->utc-time' and
`seconds->local-time' is now optional and defaults to the value
of `(current-seconds)' (suggested by Mario Goulart)
- removed read-syntax for `syntax' form
- fixed bug in `get-condition-property'
- fixed bug in windows version of `process-execute'
- TCP timeouts throw exception of kind `timeout' to allow
distinguishing between timeouts and other errors
- removed some internal functions that manipulate environments
- fixed bugs in `standard-extension' (`setup-api' module) and added keyword
arguments for building static extensions and adding custom properties
- when cross-compiling, `chicken-install(1)' doesn't pass `-setup-mode'
(the host tools should not attempt to load target binaries)
- `installation-prefix' in the `setup-api' module was not always correctly
set
- the `-force' option in `chicken-install(1)' overrides the CHICKEN version
check
- disabled e-mail feature in `chicken-bug(1)', since it doesn't work
anyway, in the moment
- fixed bug in `reexport' that made it impossible to reexport core library
definitions
- fix in optimizer that sometimes caused C functions for inlined
procedures to be emitted multiple times (Thanks to Joerg Wittenberger)
- documented `define-compiler-syntax' and `let-compiler-syntax'
- printer for hash-tables shows current number of stores items
- when upgrading during installation of a dependency `chicken-install'
shows the version to upgrade to (Thanks to Christian Kellermann)
- Updated scheme-complete (Thanks to Alex Shinn)
- fix for pathnames with whitespace in 'runtests.sh' on Windows
- fix for 'normalize-pathname' with absolute pathname argument
- added 'decompose-directory' to unit files
- fix for 'local-timezone-abbreviation' - wasn't using the current time
so tz-name constant
- deprecated 'make-pathname' separator argument
4.2.0
- added compiler option `-emit-all-import-libraries'
- added `reexport'
- added compiler and interpreter option `-setup-mode'
- various minor performance improvements
- fix for 'create-directory' when parents wanted
- `for-each-line' and `for-each-argv-line' have been deprecated
- chicken-install tries alternative servers if server responds with error
- fixed load bug (ticket #72)
- new library procedure `get-condition-property'
- many mingw build fixes (thanks tp Fadi Moukayed)
- setup-api: deprecated `cross-chicken' (use `cond-expand' or
`feature?' instead)
- added topological-sort to data-structures unit; chicken-install
sorts dependencies before installing them
- "-optimize-level 2" enables inlining by default
- disable executable stack in assembly code modules (patch by
Zbigniew, reported by Marijn Schouten)
- csc now always exits with a status code of 1 on errors (patch by Zbigniew)
4.1.0
- The new parameter "parantheses-synonyms" and the command-line
option "-no-parantheses-synonyms" allow disabling list-like behaviour
of "{ ... }" and "[ ... ]" tokens
- The new parameter "symbol-escape" and the command-line
option "-no-symbol-escape" allows disabling "| ... |" symbol escape
syntax
- Added command-line option "-r5rs-syntax" to disable CHICKEN-specific
read-syntax
- Removed "macro?" and "undefine-macro!"
- Support for Microsoft Visual Studio / MSVC has been dropped
- The compiler provides now a simple flow-analysis pass that does
basic checking of argument-counts and -types for core library procedure
calls (new option "-scrutinize")
- New compiler-options "-no-argc-checks", "-no-bound-checks",
"-no-procedure checks", "-no-procedure-checks-for-usual-bindings",
"-types TYPEFILE" and "-consult-inline-file FILENAME"
- Added a "chicken-setup" stub-application to catch incorrect use of
this tool (which has been replaced in 4.0.0 with "chicken-install")
- Changed "setup-install-flag" and "setup-verbose-flag" to
"setup-install-mode" and "setup-verbose-mode" in "setup-api" module,
the old names are still available but deprecated
- Posix unit:
added "socket?", "block-device?" and "character-device?", deprecated
redundant "stat-..." procedures
- Added "directory-exists?"
- "(for-each (lambda ...) X)" is compiled as a loop
- The argument-count check for format-strings for "[sf]printf" with a constant
string argument is done at compile-time
4.0.0
- removed `apropos' and `apropos-list' from the "utils" library unit;
available as an extension
- removed texinfo and PDF documentation - this will possible be added back
later
- replaced PCRE regex engine with Alex Shinn's "irregex" regular expression
package
- removed `-extension' option
- removed `-static-extensions' csc option and added `-static-extension NAME'
- `regex' unit: removed `regexp*' and `regex-optimize'
- added `CHICKEN_new_finalizable_gc_root()'
- `length' checks its argument for being cyclic
- removed custom declarations and "link-options" and "c-options" declarations
- deprecated "-quiet" option to "chicken" program
- added "-update-db" option to chicken-install
- the compiler now suggests possibly required module-imports
- moved non-standard syntax-definitions into "chicken-syntax" library unit
- the pretty-printer prints the end-of-file object readably now
- alternative conditional execution paths have separate allocation computation
(previously the allocation of all alternatives was coalesced)
- removed unused "%kmp-search" from "srfi-13" library unit
- expander handles syntax-reexports and makes unexported syntax available
for exported expanders in import libraries
- added checks in some procedures in the "tcp" library unit
- the macro system has been completely overhauled and converted
to hygienic macros
- a macro-aware module system has been added
- added "-sx" option to csi
- removed the following deprecated functions:
[un]shift!
andmap ormap
byte-vector? byte-vector-fill!
make-byte-vector byte-vector
byte-vector-set! byte-vector-ref
byte-vector->list list->byte-vector
string->byte-vector byte-vector->string
byte-vector-length
make-static-byte-vector static-byte-vector->pointer
byte-vector-move! byte-vector-append!
set-file-position! set-user-id! set-group-id!
set-process-group-id!
macro? undefine-macro!
- the situation-identifiers "run-time" and "compile-time" have
been removed
- the compiler options "-check-imports", "-import" and "-emit-exports"
have been removed
- new procedures:
strip-syntax
expand
- new macros
define-syntax
module
export
- the following macros have been removed:
define-foreign-record
define-foreign-enum
define-macro
define-extension
- "local" mode, in which locally defined exported toplevel variables can
be inlined
- new options and declarations "[-]local", "[-]inline-global" and "-emit-inline-file"
- optimization levels changed to use inlining:
-optimize-level 3: enables -inline -local (but *not* -unsafe)
-optimize-level 4: enables -inline -local -unsafe
- increased default inlining-limit to 20
- support for cross-module inlining
- "make <VARIABLES> bench" runs the benchmark suite
- "chicken-setup" has been replaced by new command line tools
"chicken-install", "chicken-uninstall" and "chicken-status", which are
more flexible and allow greater freedom when creating local or application-
specific repositories
- extension-installation can be done directly from SVN repositories or a local
file tree
- enabled chicken mirror site as alternative download location
|