1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833
|
Standard ML of New Jersey
Version 110
December 9, 1997
------------------------------------------------
This file contains an edited version of the cummulative README files
going back to 109-README.
======================================================================
109-README
Version 109 of Standard ML of New Jersey (SML/NJ) is an internal working
version that is probably stable enough for use by brave souls. The
transition from Version 93 to the next general release involves a complete
reworking of almost the entire system. Version 109 is perhaps 90% of the
way there, but there are still changes to come. Also, users should be
aware that there may be further changes in some of the new interfaces before
the next general release.
This version works on the following machine/OS combinations:
Alpha; OSF/1 (V 2.0 or later; does not work under V 1.3)
HPPA; HPUX 9.x (requires gcc; may work under 10.x, but we haven't tested it)
MIPS; Irix 4.x
MIPS; Irix 5.x
RS/6000; AIX 3.x and AIX 4.x
SPARC; SunOs 4.x
SPARC; Solarix 2.x
x86; Linux
x86; Solaris 2.x (thanks to Mikael Pettersson)
Here is a list of the files in the distribution. Note that, unlike in previous
versions, you do not need the compiler source (109-sml-nj.tar.Z) to install
the system.
109-README This file
109-INSTALL Installation instructions
109-doc.tar.Z Misc. documentation.
109-config.tar.Z Configuration/installation scripts (REQUIRED)
109-runtime.tar.Z Run-time system source (REQUIRED)
109-sml-nj.tar.Z Source for compiler (optional)
109-cm.tar.Z CM source
109-ml-yacc.tar.Z ML-Yacc source
109-ml-lex.tar.Z ML-Lex source
109-ml-burg.tar.Z ML-Burg source
109-smlnj-lib.tar.Z SML/NJ Library source
Compiler binaries for specific architectures:
109-bin.alpha32.tar.Z Alpha binaries
109-bin.hppa.tar.Z HPPA binaries
109-bin.mipseb.tar.Z Big-endian MIPS binaries
109-bin.rs6000.tar.Z RS/6000 binaries
109-bin.sparc.tar.Z Sparc binaries
109-bin.x86.tar.Z Intel x86 binaries.
KNOWN BUGS
In addition to reported open bugs, version 109 suffers from the following
problems:
- virtual memory usage can be significantly higher than in 0.93, although
physical memory usage and garbage collection overhead is down.
- there is only partial documentation (what little there is can be
found in the doc directory).
- stopping sml using ^Z and then restarting it causes sml to lose contact
with the terminal input stream under Irix 4.0.5. This doesn't appear to
be a problem with Irix 5.x.
CHANGES FROM 108 to 109
There have been many changes in the SML/NJ API since 108. Most of these changes
are related to moving towards the new Standard ML Standard Library (SMLSL). We
expect to make a draft of the SMLSL Manual available on the WWW in early
February 1996; this will be announced on the comp.lang.ml newsgroup.
Here is a list of the more significant changes (in no particular order):
- We have implemented a first pass at the SMLSL I/O interfaces. There are
two structures: TextIO and BinIO that implement text and binary I/O
stacks. There are three levels to an I/O stack: the imperative level,
which supports dynamic binding of I/O streams; the stream level, which
supports a functional style of input; and a primitive I/O level, which
supports unbuffered I/O. There is also an IO structure that is mostly
compatible with the 0.93 IO structure. This structure will move into
a compatibility library by version 110.
- The IO structure no longer supports execute_in_env and execute. These are
Unix specific operations and don't belong in an OS independent module.
There is now a Unix structure that supports a somewhat more sophisticated
version of these operations; in addition, the Posix structure provides full
access to the IEEE Std. 1003.1b POSIX API.
- The exportFn operation now has a new type:
val exportFn : (string * ((string * string list) -> OS.Process.status)) -> 'a
As before, the first argument is the name of the file to export the heap image
to, and the second is the function to be exported. The type of the exported
function has changed: its first argument is argv[0] (i.e., the command
name), and the string list is the list of command-line arguments.
To get access to the environment, use OS.Process.getEnv, or
Posix.ProEnv.environ.
- The Array and Vector (and monomorphic versions) now provide a collection of
iteration operations (e.g., app, foldl, ...). Note that opening both the
Array and List structure will result in the iterators from the first
structure opened to be masked by the second.
- The functions Array.arrayoflist and Vector.vector have been renamed
Array.fromList and Vector.fromList. There is a top-level function
vector that is bound to Vector.fromList.
- The Integer structure has been renamed Int.
- There is full support for unsigned integers (called words in the SMLSL).
SML/NJ supports three sizes: 8-bit (structures Word8, Word8Vector, and
Word8Array), 31-bit (structure Word31 (aka Word)), and 32-bit (structure
Word32). Word literals are overloaded over the various sizes (they default
to Word.word). The syntax of a word literal is: 0wddd (decimal) and
0wxddd (hexadecimal). For example: 0w1, 0wxFF, 0w128.
- The Bits and ByteArray no longer exist. Use words for bit operations and
Word8Array/Word8Vector for sequences of bytes.
- The Pack{16,32}{Big,Little} structures provide support for the packing/unpacking
of word values from Word8.word arrays and vectors.
- There is a Date structure that provides conversions between time values and
dates. This is a partial implementation of the SMLSL interface.
- The SML/NJ Library has been overhauled to better conform to the SMLSL. In this
first pass, we mostly eliminated redundant modules. We expect that for version
110 we will update some of the interfaces to follow the naming conventions
of the SMLSL. Here is a summary of the Library changes:
- The ListUtil structure has been deleted: most of its operations can be
found in the List and ListPair structures of the SMLSL.
- The StringUtil structure has been deleted: most of its operations can be
found in the String, Substring, and Char structures of the SMLSL.
- The StringCvt structure has been deleted: conversions from strings can
be found in the various structures (e.g., Int.fromString, Bool.fromString).
- The MakeString structure has been deleted: conversions to strings can
be found in the various structures (e.g., Int.toString, Bool.toString).
- The Path structure has been deleted: use the OS.Path structure instead.
- The CType structure has been deleted: use the operations in the Char
structure instead.
- Version 109 does not support CML or eXene (108.5 was the last version to
do so). A new implementation of CML is currently being tested; it should
be available by March. Once the new version of CML is stable, we expect to
have eXene ported fairly quickly.
- The General.union datatype was eliminated.
- The structure System.Signals has been replaced by a pair of new top-level
structures: Signals and UnixSignals. The interface of the Signals structure
is also different.
Warning: it is likely that this interface will continue to evolve.
CHANGES FROM 107 to 108
There were substantial changes in many aspects of the system. Many of these
changes have to do with the migration towards a new standard basis for SML
(this basis will be supported by at least two other SML implementations).
Note that while we believe those parts of the new basis that we have
implemented to be fairly stable, it is quite possible that there may be
further minor changes.
The following structures have been deleted or significantly changed:
General changed to conform with the new basis.
List this has been changed to conform to the new basis
System.CleanUp interface and implementation have changed
System.Control various flags eliminated (e.g., gcmessages)
System.Directory deleted
System.Timer deleted
System.Unsafe.SysIO many functions deleted (moved to Posix.IO).
The following structures have been added:
ListPair
OS
OS.FileSys, OS.Path, OS.Process
Posix
Posix.Error, Posix.FileSys, Posix.IO,
Posix.ProcEnv, Posix.Process, Posix.Signal,
Posix.SysDB
Substring
Time
Timer
These, and other changes, are described in more detail below:
- We have switched from using SC to CM for separate compilation. CM is
both faster and significantly more robust than SC. CM is required to
install and used the libraries that are included in the distribution.
There is a user's manual for CM in the doc directory.
- The General structure has been modified to conform with the standard
basis. These changes include the elimination of the inc and dec
functions (which were also available at top-level).
- The old List structure has been replaced with one conforming to the new
basis. Here is a summary of the changes:
* the functions List.nth and List.exists are no longer at top-level
* the function List.app requires its first argument to return unit.
* the functions List.fold and List.revfold have been replaced by
List.foldr and List.foldl. Furthermore, they have the type:
(('a * 'b) -> 'b) -> 'b -> 'a list -> 'b
I.e., the second and third arguments are swapped.
* There is a function List.concat, which implements the common idiom:
fold (op @) l []
* The exception Nth no longer exists. The function List.nth raises the
General.Subscript exception.
* The opening of the List structure causes the top-level binding of
String.concat to be masked, which may introduce type errors.
- There are new basis structures Time and Timer, which support access to
the current time of day, and to system timing. The time type is now abstract.
The structure System.Timer does
- The new OS structure provides generic support for operating system
operations. Programs written using this interface should work on
UNIX, WindowsNT, Window95, and MacOS implementations of SML. The
structure OS.FileSys provides operations on the file system (these
replace the old System.Directory structure); the structure OS.Path
provides pathname manipulation; and the structure OS.Process provides
simple process management.
- The new standard basis specifies a POSIX 1003.1a binding for SML/NJ. This
has mostly been implemented (the Posix.Tty structure is missing). Many of
the UNIX functions in System.Unsafe.SysIO and System.Unix have been
superseded by their POSIX equivalents.
- The new ListPair structure supports operations on pairs of lists.
- The new Substring structure supports various string searching and
manipulation operations. Also, the Char and String structures have
been enriched.
- The function System.exn_name has moved to SMLofNJ.exnName.
- The function System.system has been deleted; use OS.Process.system instead.
CHANGES FROM 106 to 107
Most of the changes are compiler improvements and bug fixes. Most of the
visible changes have to do with a reorganization of the ML callable C code.
- eXene has been ported to 107, and a snapshot is included in the release.
This is very much a working version, but there is some high-level
documentation in eXene/README.
- the function System.Unsafe.CInterface.c_string has been deleted (ML strings
are always NULL terminated in 107). Also, the type of c_function has changed.
- the function System.Unsafe.CInterface.syscall has been eliminated.
- the implementation of System.Directory.getWD has been fixed. We now use
the POSIX getcwd() to implement this.
- The ML callable C library in the run-time has been split into a collection
of libraries, which are organized by related function. This organization
should make it somewhat easier to add C code to the system. See the file
notes/HOWTO-ADD-C-CODE for more information.
CHANGES FROM 103 to 106
The last working version that was made available via ftp was 103; here is
a list of the major changes since then:
- Version 106 uses a new run-time system with a multi-generational
collector. This affects users and installers of the system in
several significant ways:
- The new run-time separates the run-time executable from the
ML heap images. This means that an application (e.g., sml-sc)
consists of a run-time system and a heap image. The run-time
executables depend on the architecture and OS, while the heap
image depends on the application and architecture. There is a
standard driver shell script that gets created as part of the
installation process (see the 106-INSTALL file for details).
The "exportML" and "exportFn" commands generate heap images.
- The new collector tends to use more virtual memory than the
old collector, but less physical memory. The virtual memory
performance will be improved before the next release, but you
may have trouble running this on machines with small swap spaces.
- Version 106 supports characters as a first class type. Character
literals are written as length one strings preceeded by "#" (e.g.,
#"a", #" ", #"\"", #"\128"). The structure Char defines various
operations on characters. As a result of this change, the signature
of the String structure has changed. In particular, the functions
String.length, String.ord and String.ordof no longer exist, and the
functions implode and explode have different types. The old versions
can be defined roughly as follows:
val length = String.size
val ordof = Char.ord o String.sub
fun ord s = ordof(s, 0)
val explode = (map Char.ord) o String.explode
val implode = String.implode o (map Char.chr)
The Ord exception is no longer raised, instead Subscript is raised.
Also, the Chr exception has been moved to the Char structure.
- As a result of the changes to the String and the addition of the Char
structure, ML-Lex, ML-Yacc, the SML/NJ Library, and CML have been changed.
In the case of ML-Lex and ML-Yacc, you will have to regenerate your
parsers/scanners using the new version, if you want to use 106. There
were significant changes to some of the interfaces in the SML/NJ library
(e.g., CType, CharSet), but the changes to CML are all internal. We
haven't ported eXene to 106 yet, but that will be done soon.
- Version 106 has a different signature for the Array and Vector structures.
The exceptions Subscript and Size have been moved to the General
structure.
- Version 106 has generic monomorphic array and vector signatures (MONO_ARRAY
and MONO_VECTOR). Currently, the only implementation of these are the
CharVector and CharArray types, but the RealArray structure will be
switched over soon. The type CharVector.vector is the same as String.string.
- Versions are now numbered as integers (i.e., 106 instead of 1.06). The
signature of Compiler.Version has changed.
- The get_fd_out function was removed from the IO signature.
CHANGES FROM 0.93 to 1.03
- The top-level environment was restructured; stuff that used to be in
System has been split into System and Compiler. Note that the System
side of this split is definitely NOT stable; it will change again in
substantial ways.
- The bootstrapping process has changed radically from version 0.93.
If you don't know about sml-scb and "bin files", this version
is probably not for you.
- The "source groups" tool has been replaced with "SC", which generally works
better.
======================================================================
109.1-README
This version fixes a number of small bugs in 109, adds support for
FreeBSD (thanks to Jeff Hsu), and fixes some problems with PowerPC
systems running AIX. Note that there may still be some problems in
the FreeBSD port. It also contains a new version of CM, which should
be more robust. This new version now creates a "CM" directory where
it puts bin files and dependency information (instead of ".depend",
".mipseb", etc.).
For more information, see the 109-README file in the 109 distribution.
======================================================================
109.4-README
This version of SML/NJ incorporates a completely new implementation
of the module system. While this new implementation fixes a number
of outstanding bugs, it may not be completely robust yet.
======================================================================
109.6-README
NOTES on SML/NJ 109.6
In this version of SML/NJ, we have removed the old I/O interfaces (0.93).
We recommend that you wait until 109.7 before migrating your code,
however, since the new I/O interfaces are going to undergo some changes.
We have also removed the overloaded makestring and print functions.
To convert primitive types to strings, use Int.toString, Bool.toString,
etc. The top-level print function is now bound to TextIO.print, which
takes a string argument. Note that TextIO.print always flushes its
output stream, so it is not the most efficient way to do output.
Versions of SML/NJ since 109.4 incorporate a completely new implementation
of the module system. While this new implementation fixes a number of
outstanding bugs, it may not be completely robust yet.
======================================================================
109.7-README
NOTES on SML/NJ 109.7
In version 109.6, we removed the old I/O interfaces; in this version,
we have provided an implementation of the current I/O API. We do not
expect any further significant changes.
We have also removed the overloaded makestring and print functions.
To convert primitive types to strings, use Int.toString, Bool.toString,
etc. The top-level print function is now bound to TextIO.print, which
takes a string argument. Note that TextIO.print always flushes its
output stream, so it is not the most efficient way to do output.
Versions of SML/NJ since 109.4 incorporate a completely new implementation
of the module system. While this new implementation fixes a number of
outstanding bugs, it may not be completely robust yet.
======================================================================
109.11-README
The major change over 109.10 is the addition of 32-bit signed
integers (provided by the Int32 structure). The default int
type is still 31-bits.
exportML and exportFn now automatically add the architecture
suffix to a heap image (and the @SMLload option does the
same). Thus, one can write scripts to generate heap images
in an architecture independent way, while still being able to
support multiple architectures.
======================================================================
109.14-README
This version of SML/NJ has a number of substantial changes over
109.11 (109.12 and 109.13 were not made available for ftp). The
most significant change is that we now use the ``value restriction''
rule for polymorphism (aka Wright's rule). Under this rule, a let
binding is polymorphic iff the r.h.s. is a value. Using this restriction
allows the type system to be simplified by removing the weak/imperative
type variables.
The structures LargestInt, LargestWord and LargestFloat have been
renamed LargeInt, LargeWord and LargeReal (resp.) to be in compliance
with the new basis specification.
This version includes a new version of CML. See src/cml/README for
more information.
We have revised the SML/NJ Library API to follow the naming conventions
used by the SML Basis. This version of the SML/NJ library is missing
a couple of modules, but is otherwise fairly complete. We have not yet
written any documentation on porting applications to the new API.
======================================================================
109.15-README
This version of SML/NJ is not much different from 109.14, but has a
number of bug fixes and minor code clean-up.
======================================================================
109.16-README
Here is a list of changes from 109.15 to 109.16:
- heap images now have a ".arch-opsys" suffix. This avoids problems
with mixing heap images between SunOS and Solaris. The run-time system
will automatically generate the correct suffix on export and loading.
- a number of minor internal changes to the run-time system.
- changes to CM, including a change in the way that stable libraries
are handled.
- The OS.IO interface was modified to correctly implement the SML'96
Basis Library.
- The Compiler.Index structure has been removed; this also changes the
interface to Compiler.Source.
- A number of changes/additions have been made to CML as part of the
porting of eXene. EXene now mostly compiles under 109.16, but there
are a few missing features in CML that must be implemented before eXene
will work again.
======================================================================
109.17-README
Changes since 109.16:
- Date.toString and Date.fmt have been implemented
- renamings:
use_stream is now useStream
use_file is now useFile
eval_stream is now evalStream
- ml lexer now supports #line directives inside comments.
The syntax is: (*#line n.m filename *)
n is the line number for the comment and
m is an optional column number
filename is an optional source file.
- numerous internal changes and bug fixes.
=====================================================================
109.18-README
Version 109.18 has several new user-level features, as well as improvements
in SML'96 basis compliance.
Changed:
--------
Autoloading:
The most significant new feature is that we now enable autoloading
of library modules in the standard interactive environment. Autoloading
is a feature of CM that allows library modules to be loaded on demand.
This means that one can use library modules in the interactive
top-level loop, without having to load the library manually. For
example, here is an interaction:
Standard ML of New Jersey, Version 109.17, September 6, 1996 [CM; autoload enabled]
GC #0.0.0.0.1.4: (8 ms)
- Format.format "[%d]" [Format.INT 5];
[Autoloading...]
...
[Autoloading done.]
GC #0.0.0.0.3.41: (9 ms)
val it = "[5]" : string
-
The default configuration is to enable autoloading of the SML/NJ Util
and Unix libraries. You can edit config/targets prior to installation
to change this.
Library:
We have added a new application library to the SML/NJ library, which provides
support for parsing and generating HTML. The library can be included in an
application by adding "html-lib.cm" to your sources.cm file. There is no
documentation yet, but the source code can be found in src/smlnj-lib/HTML.
Bug fixes:
----------
ml-lex:
There is a bug in ml-lex (109.17) when using the %count flag.
The yylineno variable should get reinitialized to zero on each
call to makeLexer, but instead is globally allocated and never
reset.
pickling:
There was a bug in the way integers were read from pickles --
negative integers were not read back correctly.
datatype printing:
Fixed a bug in datatype printing. Despite large values of printDepth
and printLength, printing recursive datatypes terminated too quickly
with "-".
output buffering for TextIO:
The output buffering mode for TextIO outstreams is now set correctly on
initialization. If the underlying I/O device is a TTY, then the buffering
mode is LINE_BUF; otherwise, it is BLOCK_BUF.
Internal:
--------
Integer/word conversions:
Primitive operators have been created for integer/word conversions.
This implementation optimizes the composition of multiple conversions.
For example, something like:
val f = Word.toInt o Word.fromLargeWord o Word8.toLargeWord
gets translated into 3 primitive operations. The combination of
these three simplifies to a word32 copy. With a smart register
allocator that copy can be eliminated.
SEE basics/primop.sig for a more detailed explanation.
*WARNING*: Word.toInt was previously implemented incorrectly -- it
was implemented identically to Word.toIntX! Further, there were
many places in the compiler where Word.toInt was used where
Word.toIntX was intended. Note: (Word.toInt o Word.fromInt) is
not the identity function. In user code, this error will usually
manifest itself by an Overflow exception being raised unexpectedly.
cm:
Added further support for autoloading of bin files.
=====================================================================
109.18-README-2nd
Since putting out 109.18 we have discovered a bug in the autoloading
mechanism in CM. If you try and open a top level structure in the
interactive environment, you get an exception raised. If this is
something that you need to do, then the workaround is to turn
autoloading off. Execute:
CM.autoloading(SOME false);
=====================================================================
109.19-README
1 0 9 . 1 9 N E W S
Added
C Interface:
The SML/NJ C interface is included with this version. It consists
of two parts: a runtime component (src/runtime/c-libs/smlnj-ccalls)
and an SML/NJ library (src/smlnj-c). See the README file in the
library for instructions on installing and using this interface.
Autoloading:
Autoloading has been more robustly integrated.
Autoloading is a mechanism to hook CM entities (groups and libraries)
into the interactive top-level loop without actually pre-loading
them. SML/NJ's compilation manager, CM, has provided an undocumented
implementation of the autoloader for a while. Beginning with
version 109.18 we use this mechanism by default to offer
convenient access to the SML/NJ library from the interactive loop.
With CM it is generally not possible to use SML's ``open'' syntax at
top-level. This restriction is necessary to make dependency analysis
tractable. However, for the special case of analyzing interactive
input this restriction can be lifted. All versions beginning 109.19
and later permit unrestircted use of ``open'' in the interactive loop --
regardless of whether autoloading is enabled or not.
See section on Autoloading interface.
Changed
Top-level environment:
We have cleaned up the top-level environment some more to bring it
closer to the SML'96 specification. The most notable effect is that
Int.quot, Int.rem, Int.min and Int.max are no longer top-level
identifiers, and quot and rem are no longer infix.
Bug Fixes
Recursive datatypes:
The RECty problem when printing recursive datatypes has been fixed.
Internal
Parallel copy:
MLRISC and all the associated code generators have a parallel copy
instruction that performs register-register copies in parallel.
The semantics of the parallel copy imposes fewer dependencies on
the individual registers, thus enabling even more copies to be eliminated,
and it is also very compact. The compactness improves compile time and
space usage, thus encouraging increased usage of splits in the
intermediate program.
---------------------------------------------------------------------------
Autoloading Interface
autoloading:
Structure CM contains the following definitions:
val autoloading: bool option -> bool
This function is used for enabling and disabling the autoloader. With
an argument of NONE one can query the current status without actually
changing it. The function always returns the previous setting.
autoload:
val autoload: unit -> unit
val autoload': string -> unit
These functions behave like make and make', except they don't actually
load any module. Later, when CM sees a use of some symbol that is
exported by the entity (only structures, signatures, functors, and
functor signatures are tracked), then all necessary compilation units
will automatically be linked into the running system.
autoList:
val autoList: unit -> string list
This returns a list of all entities that are currently registered for
autoloading.
clearAutoList:
val clearAutoList: unit -> unit
clearAutoList erases CM's memory of autoloaded modules.
=====================================================================
109.20-README
1 0 9 . 2 0 N E W S
This version is primarily a launching pad for the Win32 and WindowsNT
port, slated for 109.21. If you are using 109.19 and do not need any
of the bug fixes here, then there is no reason to upgrade.
Changes:
Compiler:
Added source for Win32 port
(run-time system support hasn't yet been merged in).
Further clean-up and bug fixing in Sockets interfaces.
We got rid of the NetRPCDB structure, since RPC is not otherwise
supported. The sockets API should be pretty stable now, and soon
there should be some documentation.
Minor interface change to SockUtil structure; added additional operations.
CM:
Changed interface to CMR.retarget. Retarget now takes the bindir,
cpu, and os as parameters.
Bug fixes
Compiler:
Fixed a code generation bug exhibited in floating point equality.
Example code removed duplicate floating point numbers from a list.
Insufficient patterns used to implement conversion primops.
Bug triggered by aggressive inlining.
Fixed a bug in conversion primops reported in comp.lang.ml.
CM:
Fixed bug with not using CM_PATH when exported via exportML.
Library:
Fixed a bug in BinarySetFn.intersect and IntBinarySet.intersect.
config:
Fixed a bug in the configuration of freebsd and netbsd.
Internal
Pseudo-op directives are now an abstract type in the MLRisc framework.
This means that MLRisc and all the code generators can be specialized
over a level of pseudo-ops relevant to the needs of the compiler.
Pseudo-ops in MLRisc are migrated 'wholesale' into the flowgraph of
target machine instructions.
=====================================================================
109.21-README
1 0 9 . 2 1 N E W S
Changed:
Compiler:
Some unimplemented operations in the Socket structure
were implemented.
Some internal changes were made to the implementation of I/O to
better support Win32.
CM:
The batch compiler (CMB.make) now generates bin files to the
directory "bin.<arch>-<opsys>", where <arch> is one of:
{sparc, mipseb, mipsel, rs6000, hppa, x86, alpha32}
and <opsys> is one of:
{unix, win32}.
CML
now supports sockets.
New:
This version includes eXene (for the first time since 108.5). The examples
have not yet been ported to SML'96, and eXene hasn't really been tested
much, but we expect that it should still work. One big improvement: eXene
now understands symbolic hostnames for specifying the display (e.g.,
"glove:0.0" instead of "135.205.48.199:0.0").
=====================================================================
109.22-README
1 0 9 . 2 2 N E W S
The main changes in this version, besides many bug fixes, are:
o SML'96 floating point compliance.
o Profiling support.
o Merge of UNIX and Win32 runtime sources.
This file is available as 109.22-README.html from:
ftp://ftp.research.bell-labs.com/dist/smlnj/working/109.22
Note
(*--------------------*)
Bug List:
The bug report records have been brought up to date. The relevant
files are available in the directory:
ftp://ftp.research.bell-labs.com/dist/smlnj/working/bugs
See the file README.bugs in that directory for further information.
DEC Alpha, OSF/1 3.2
There is a bug in OSF1 version 3.2 that causes an infinite loop during
installation. See the 109.22-README.OSF file for details and a workaround.
Win32 Runtime:
Currently, building the win32 runtime requires MS Visual C++ 2.0
or greater, MASM 6.11 or greater, and NMAKE 1.5 or greater. The
runtime is built via the command
nmake /f mk.x86-win32
from the DOS prompt in the src/runtime/objs directory.
The distribution contains a heap image, runtime system, and command
to run sml under Win32, namely:
o sml.x86-win32
o run.x86-win32.exe
o sml.cmd
sml.cmd is just: run.x86-win32 @SMLload=sml.x86-win32
Bug fixes
(*--------------------*)
Printing:
Some bugs affecting printing of datatype values have been corrected
(see bug 1092).
Printing of type names has been improved, but there will continue to
be some spurious "?"s in type paths until the latest module system is
incorporated. This should be done by 109.23.
Top level slowdown:
The main problem that caused slowdown of the top-level (bug 1060)
has been fixed.
Runtime system:
Installation on Linux 2.0 should now work.
Fixed a bug in implementation of polling on systems with select().
Fixed a problem with compiling system using the Solaris assembler
on Sparc.
SML/NJ library:
Fixed a bug in Array2.column.
CML:
Fixed a bug in {TextIO,BinIO}.endOfStream
Wrapped the call to OS.IO.poll with an exception handler to avoid
problems with interrupts on some systems.
Added the UnixEnv structure to the CML library (imported from the
SML/NJ library).
eXene:
fixed uses of polymorphic equality on reals (use Real.== instead).
use DISPLAY shell variable with EXeneRun.run (instead of EXENE_DISPLAY).
Changes
(*--------------------*)
SMLNJ Library:
The type array type in MONO_DYNAMIC_ARRAY is now an eqtype.
Runtime:
Merged Win32 sources into the main run-time source tree.
Profiling:
Timing and call-count profiling are now supported by the
structure Compiler.Profile. Set the mode to LATENT to
generate profiling instrumentation, and to ACTIVE to generate
timing sampling. Since profiling uses a time quantum of 10ms,
it is questionable as to whether the numbers are actually useful.
Floating Point:
User level changes:
The Real64 and IEEEReal structure is now SML'96 compliant.
See http://cm.bell-labs.com/cm/cs/what/smlnj/index.html.
There are two significant user level changes:
o The type real is no longer an eqtype, and
o floating point arithmetic does not generated overflow or
divide-by-zero exceptions.
1.0 / 0.0 returns 'inf', and 0.0 / 0.0 returns 'nan'.
Trapping semantics can be obtained by wrapping the necessary operators
with isNormal, e.g.:
fun op +(x, y) = let
val ans = Real.+(x,y)
in
if Real.isNormal ans then ans else raise General.Overflow
end
It is important to check that existing floating point programs are
resilient to inf's and nan's as input. Inf's behave as one would
expect, and the only thing to remember wrt nan's is that any operation
over a nan returns a nan, and a nan compares false with anything else,
including itself! All nan's are quiet nan's, which is to say that their
use does not signal an exception.
This simple semantics usually requires very little change to existing
programs. The Math64 structure required almost no change to work
correctly with inf's and nan's. For example:
- Math.atan (1.0/0.0);
val it = 1.57079632679 : real (* pi/2 *)
-
Known bugs:
With the exception of pattern matching reals, there are a few
very minor bugs which will be cleared up in the next version.
Most of these should go undetected in the interim.
o Negative 0.0 is not correctly represented internally. Therefore
1.0 / ~0.0 returns inf instead of ~inf (minus infinity).
o Reals should not be allowed in pattern matching.
o Real.toInt does not support all the IEEE rounding modes.
o Real.signBit does not handle ~0.0
o Real.class does not distinguish between quiet and signalling nan's.
o Real.nextAfter is not implemented (needs assembly code).
Internal changes:
All the 14 IEEE comparison operators have been added from the CPS
language onwards. The pre-CPS phases should be careful not to
rewrite (for example):
if Real.>(x,y) then e1 else e2
into,
if Real.<=(x,y) then e2 else e1
=====================================================================
109.22-README.OSF
There is a bug in OSF Version 3.2 and older that prevents SML/NJ
109.22 from being built. Here is a small example that illustrates
the problem:
int main (void)
{
double f = 1.0;
while (f != 0.0) {
printf ("f = %g\n", f);
f = f * 0.5;
}
return(0);
}
In SML/NJ we generate instructions with the /SUD extension; that is to
say with: software completion, underflow enabled, and dynamic rounding
mode set. In order to get this extension, it is necessary to compile
the above with the following flags:
cc -fprm d -fptm su -resumption_safe
where:
-fprm d specifies dynamic rounding mode
-fptm su specifies software completion with underflow enabled
-resumption_safe ensures that registers do not clash in the trap
shadow.
The output of the above program compiled in this way is:
f = 7.90505e-323
f = 3.95253e-323
f = 1.97626e-323
f = 9.88131e-324
f = 4.94066e-324
f = 4.94066e-324
f = 4.94066e-324
...
(infinite loop)
However, if compiled without dynamic rounding using:
cc -fptm su -resumption_safe
things work correctly, and the program terminates after printing
4.94066e-324. It appears that the OS is having trouble completing
instructions that involve dynamic rounding. This problem does not
exist in Digital Unix 4.0 (the successor to OSF/1 v3.2). The flags to
get /SUD under Digital Unix 4.0 are:
cc -fprm d -ieee -scope_safe y.c
Two solutions exist:
a) Upgrade to Digital Unix 4.0.
b) See if there is a patch for OSF 3.2.
In the interim, I have created a tar file under osf3.2 that contains
bin files using the /SU extension. This is wrong, but it will only
exhibit incorrect behavior when computations go outside the normal range
and the rounding mode has been changed from the default. This will
never occur in pre 109.22 programs.
=====================================================================
109.23-README
1 0 9 . 2 3 N E W S
This version is intended to fix installation bugs discovered in
109.22 that proved to be major impediments.
Bug Fixes:
The Posix.Error structure now agrees with the documentation.
Changes to the run-time system to support the Posix.Error structure.
A bug in the CML Mailbox implementation has been fixed.
Installation:
OSF/1 v3.2 and older:
There is a bug in OSF/1 v3.2 and older that prevents SML/NJ from
being built correctly. See:
http://cm.bell-labs/cm/cs/what/smlnj/NEWS/109.22-README.OSF
As a temporary workaround the 109.23-bin.alpha32x-unix.tar.Z file
must be used with OSF/1 -- not 109.23-bin.alpha32-unix.tar.Z.
See the 109.23-INSTALL file.
For retargetting, "alpha32x" should be used as the cpu target
name.
HPUX:
Problems with CML sockets on HPUX should now be fixed (this mostly
affects eXene), but has not been tested.
=====================================================================
109.24-README
S M L / N J
1 0 9 . 2 4 N E W S
[[ Apologies for announcing another version right after announcing
version 109.23. A disk failure is to blame for the late announcement
of 109.23. ]]
This working release contains several major changes, all in
preliminary stages. The compiler elaboration phase has been almost
completely rewritten, and the translation targets a new typed
lambda intermediate language.
Many old bugs in the module system are fixed. While we believe this
version is robust new bugs are expected, as the system has not had the
chance to be rigorously stress tested.
Changes:
o The front-end is rewritten to support efficient and correct
elaboration of (an approximation of) Standard ML 1996 plus
higher-order modules. More complete conformance to SML '96
will be available in future releases.
o The compiler now uses a new typed intermediate language
(FLINT) and a new set of type-directed compilation techniques.
Most of these are work-in-progress and their benefits will be
visible in future releases.
o The compiler no longer imposes any restrictions on datatype
definitions during signature matching or functor application.
For example, consider the declarations
signature SIG =
sig
type 'a t
datatype 'a foo = A
| B of 'a t
val f : 'a -> 'a t
end
functor F(S : SIG) =
struct
fun g x = S.B(S.f x)
end
structure S =
struct
datatype 'a foo = A
| B of 'a * 'a foo
type 'a t = 'a * 'a foo
fun f x = (x, A)
end
structure T = F(S)
Compiling the above code in pre-109.24 will produce the following
error messages:
stdIn:13.15-13.18 Error: The constructor B of datatype foo
has different representations in the signature and the structure.
Change the definition of the types carried by the constructors in the
functor formal parameter and the functor actual parameter so that
they are both abstract, or so that neither is abstract.
This is no longer the case in 109.24. Furthermore, data constructors
such as "B" in structure S will still use untagged record
representations.
Keywords:
'where' is a new keyword.
Incompatibilities:
Pattern matching against real constants is not allowed.
=====================================================================
109.25-README
S M L / N J
1 0 9 . 2 5 N E W S
1 February, 1997
This working release contains further SML'96 compliance and fixes many
bugs introduced by the front end rewrite introduced in version 109.24.
Ftp as usual from ftp.research.bell-labs.com:/dist/smlnj/working/109.25.
SML'96: Opaque signature constraints:
109.25 adds support for opaque signature matching, including a new
token ":>". To illustrate, after the following definitions
signature S =
sig
type t
val x : t
val f : t -> int
end;
structure Trans : S =
struct
type t = int
val x = 3
fun f y = x
end;
structure Opaque :> S =
struct
type t = int
val x = 3
fun f (y: t) = x
end;
we can do
Trans.f 4;
because Trans.t is equivalent to int. But Opaque.t is abstract
(or "opaque"), so
Opaque.f 4;
will fail to type check, though
Opaque.f(Opaque.x);
type checks and returns 3.
The definition of Opaque is equivalent to the 0.93 declaration
abstraction Opaque : S =
struct
type t = int
val x = 3
fun f (y: t) = x
end;
Opaque signature constraints can also be used for functor result
signatures to make the result structure abstract, as in
functor OpaqueF () :> S =
struct
type t = int
val x = 3
fun f (y: t) = x
end;
Now when you define a structure by calling OpaqueF, as in
structure Opaque = OpaqueF ();
the type Opaque.t will be abstract. The old "abstraction"
keyword did not allow one to define such abstract functors.
WARNING: The abstraction keyword will be eliminated in some future
release, so you are encouraged to replace uses of abstraction
with opaque signature constraints using ":>".
Bug Fixes:
- Added List.Empty exception to top-level.
- Int and word literals are now represented by infinite
precision (IntInf.int) values instead of strings.
These are still being converted to int/word in the translate phase,
but we will eventually push this representation
all the way back to the code generator. This will facilitate more
complete constant folding and retargeting to 64-bit machines.
- Some DEC Alpha machines running OSF1/3.2 generate an illegal
instruction error when executing:
cvtqlv $f0,$f0
which happens to be a perfectly legal instruction for the alpha.
This instruction was used to compute floor. To
get around this a different procedure that does not involve
cvtqlv has been used.
- Eliminate the spurious error message for non-generalization type
variables
- Fixed part of the expandTycon bug.
- In pre-109.24, all abstype decs also exports the data constructors;
this is fixed by modifying the elabABSTYPE function.
- Modify the entityExp definition to correctly implement the
datatype generativity in functor body
- Fixing the Compiler bug on InlInfo: Wrong field in INL_STR !
- The top-level function print is now dynamically bound (initially
to TextIO.print). This binding can be changed via the SMLofNJ.Internals
structure.
- Fixed a bug in {TextIO,BinIO}.canInput, where an exception would
be raised instead of being caught internally.
- Fixed the problem with turning profiling on, then off, and then
back on.
- Fixed bug 1114, which involves a problem installing a prettyprint
function for a datatype created by a functor application.
- Fixed bug 1115 relating to vector patterns.
CML:
- Added documentation for the Multicast and TraceCML library modules.
- Made minor improvements to the implementation of TraceCML.
- Changes the the SML/NJ system (available in 109.25) now make it possible
to use the top-level print function in CML programs (it gets dynamically
rebound to CML's version of TextIO.print when a CML program starts running).
- Renamed CML.atEvt to CML.atTimeEvt.
- Added SimpleRPC:SIMPLE_RPC to the CML library.
- Fixed a bug in the I/O manager for the case when two I/O events became
enabled for the same thread at the same time.
=====================================================================
109.26-README
S M L / N J
1 0 9 . 2 6 N E W S
26 March, 1997
This version is primarily a bug fixing version and is likely to be
more robust than previous versions. The critical bugs are down to 24,
and we hope to shoot down all of these before 109.27. This is
definitely the best time to report bugs you think are critical.
This file is organized into the following categories:
- SML'96 Compliance
- Top Level Changes
- Numbered Bug Fixes
- Bug fixes without numbers
- Bugs reclassified as "not a bug", obsolete, or unreproducible
- CML
- SMLNJ-LIB
- CM
SML'96 Compliance
-----------------
Allows the datatype replication feature (declarations and
specifications of the form "datatype t = datatype A.B.s").
The "datatype replication" feature is described in appendix G of the new
Definition of Standard ML (Revised) (Section G.6). The syntactic form
is:
datatype tycon = datatype longtycon
and it can be used either as a declaration of a type or a specification
in a signature.
The purpose of datatype replication is to define a local alias of an
existing datatype, definied or specified earlier in the program or in
the top level basis. A datatype replication declaration binds a new
name to the datatype designated by the longtycon identifier, and it implicitly
introduces the dataconstructors of that datatype into the local scope.
Here is an example of a datatype replication declaration.
structure R =
struct
datatype t = A | B
end
structure S =
struct
datatype s = datatype R.t
fun f A = true
| f B = false
end
val x = S.f(R.A)
In a specification, the datatype designated on the right hand side can
be an actual datatype in the current scope, or it can refer to a datatype
specified earlier in the signature. Examples of both kinds appear in
the following example.
structure R =
struct
datatype t = A | B
end
signature SIG =
sig
datatype u = C | D
structure S :
sig
datatype t1 = datatype R.t
datatype t2 = datatype u
end
end
The datatype keyword on the right hand side of a datatype replication
declaration or specification is a quotation device. Thus
datatype t = u
defines t as a datatype with a dataconstructor u, while
datatype t = datatype u
defines t to be an alias of the existing datatype u. The datatype
replication is strictly an alias and does not generate a new type
or dataconstructors.
This is the last new feature of SML 96 to be added to SML/NJ. However,
the treatment of sharing constraints is still more liberal than that
allowed in SML 96, so in version 109.27 or 110 the SML 96 restrictions
on sharing will be implemented and this is expected to break some code.
Top Level Changes
-----------------
The option type is no longer in general, but lives in its own structure.
Numbered Bug Fixes
------------------
274. weakness lost with flex record pattern
863. Compiler bug: PPObj.switch: none of the datacons matched
889. Compiler bug: PPObj.switch: none of the datacons matched
905. type insecurity with local around functor declaration
949. bad type error caused by integer literal overloading
952. unsound imperative types (same as 905)
1000. top-level printing of multiple occurrences of the same name
1011. mod operator causes core dump on Alpha
1022. image files grow
1066. uninstantiated VARty in pickmod
1097. implimentation of floor_a primitive on Alpha
1101. puzzling type error message
1103. OS_IO signature is not bound at top level
1105. message for uncaught exceptions has duplicated "exception"
1108. String.maxSize missnamed as String.maxLen
1116. performance problems in top level loop (check?)
1123. secondary error: nongeneralizable type variable
1124. exception STRANGE raised by compiler
1126. subscript error in prettyprinting
1130. printing datatype value
1137. Compiler bug: TransTypes: unexpected FORMAL kind in tycTyc-h
1139. Compiler bug: Translate: unexpected type variables in mkPE
1141. functor decl produces Compiler bug: ExpandTycon: expandTycon 2
1142. size of exportFn image
1143. Word.andb combined with toInt broken on x86
1144. exception Compile: "imported objects not found or inconsistent"
1145. large memory consumption
1148. ALPHA32.PRIM.ASM floor_a still uses unimplemented instruction
1149. spurious "nongeneralizable type variable" messages
1153. core dump
1155. type abbreviation identical to spec does not match (+ secondary)
1156. subscript raised for intmap entry that exists
1157. div and quot give incorrect answers
1158. datatype representation incorrect
1161. Win32.FileIO.getFileTime' not accessing correct time stamp
1162. uncaught exception Io: filePosIn failed on "foo" ...
1164. compiler bug after failure to generalize explicit type var
1166. where type causes Compiler bug: TypesUtil: tycStamp PATHtyc u
1171. where type on opaque functor result signature
Bug Fixes without numbers
-------------------------
As a temporary measure the compiler prints "<poly-record>" for top
level polymorphic values, e.g. (3, fn _ => 3). This will be fixed
more completely in 109.27.
Fixing the coredump bug caused by duplicate top-level declarations.
For example, in almost any versions of SML/NJ, typing
val x = "" val x = 3
would lead to core dump. (related to bug 1000)
Fixed bug in reduction of (TEST(n,m) o COPY(p,n)) to
COPY(p,m) when m = p.
Fixed various bugs in which a register may be overwritten before being used.
Real.isNormal 0.0 returned false. When the unbiased exponent is ~1023, an
explicit check for 0.0 must be performed.
Got rid of structure rebinding, since inlining is now preserved.
Moved stuff from System to SMLofNJ.
Fixed bug related to constant folding of operands to div. Manifest by
things like ~10 div 10000 giving incorrect answers.
Fixed a random access bug in TextIO and BinIO.
Several other undocumented bugs have also been fixed.
Bugs reclassified as "not a bug", obsolete, or unreproducible
--------------------------------------------------------------
481. redeclared constructors
865. inference for flex record patterns
886. unclear error msg regarding flex records
893. Bind exception while recompiling compiler with representation off
937. installing HOL90 on Alpha
946. runtime assertion failure on x86-linux
947. Compiler bug: not found in spill
955. Compiler bug: PPVal.switch: none of the datacons matched (Compiler)
967. Compiler bug: translate.transpath on unexpected access
977. sml > "a non-tty device" can cause GC failures
1054. sequential withtype is broken
1080. "Compiler bug: SigMatch.lookStr 2a" during signature match
CML
---
added a mechanism to catch attempts to execute CML without
proper initialization.
added mSwap and mSwapEvt functions to SyncVar structure.
a number of bug fixes in the SyncVar structure.
Fixed bugs in the implementation of the pauseHook and schedulerHook in
RunCMLFn (missing atomicBegin).
Fixed bug in implementation of TraceCML when TraceToFile was set as the
destination.
Fixed bug in random access support in BinIOFn and TextIOFn (bug also in
SML/NJ implementation).
Added logging/unlogging for global mailboxes.
Fixed bug in the TraceCML.unwatchThread. Also changed the implementation
to avoid potential races between unwatching a thread and its termination.
Various changes to the Scheduler module to improve robustness. Added
an exception handler around the function in enqueueTmpThread. Replaced
enqueueCurThread with enqueueAndSwitchCurThread, which keeps the thread
ID bookkeeping in the same place. And fixed a bug(?) where atomicSwitchTo
was failing to set the current thread ID properly.
Added sendPoll operation on channels to CML structure.
SMLNJ-LIB
---------
Added a bunch of new operations to the ordered map modules (BinaryMapFn,
IntBinaryMap, ListMapFn, IntListFn, and SplayMapFn). THe new operations
are:
val unionWith : ('a * 'a -> 'a) -> ('a map * 'a map) -> 'a map
val unionWithi : (Key.ord_key * 'a * 'a -> 'a) -> ('a map * 'a map) -> 'a map
val intersectWith : ('a * 'a -> 'a) -> ('a map * 'a map) -> 'a map
val intersectWithi : (Key.ord_key * 'a * 'a -> 'a) -> ('a map * 'a map) -> 'a map
val filter : ('a -> bool) -> 'a map -> 'a map
val filteri : (Key.ord_key * 'a -> bool) -> 'a map -> 'a map
val mapPartial : ('a -> 'b option) -> 'a map -> 'b map
val mapPartiali : (Key.ord_key * 'a -> 'b option) -> 'a map -> 'b map
Added IOUtil : IO_UTIL structure to the Util library. This provides
support for dynamically rebinding stdIn and stdOut.
Added KeywordFn functor to the Util library. This provides support for
implementing scanners, where keyword recognition is done outside the
basic lexical analysis.
Fixed several bugs in the ListSetFn functor.
CM
--
CM's automatic dependency analyzer now understands all new syntactic
elements of SML'96 (opaque signature matching, "where type = ...")
Treatment of nested comments in entity descriptions has been
changed: See notes below.
Interface to Tools in CM has changed. See notes below.
CM Comment Style
----------------
Scheme-style comments (semicolon 'til end-of-line) are no longer
recognized when nested within ML-style comments. Therefore, one can
now freely use ";" in ML-style comments. However, removing an
entire section of a description file by surrounding it with "(*" "*)"
no longer works in the rare case when Scheme-style comments contain
unbalanced ML-style comments.
OK: (* a few comments; and then some more... *)
BAD: (* this is not needed now...
not-needed1.sml
...
not-neededk.sml
star-paren.sml ; handles cases of *)
still-not-needed.sml
...
*)
CM Tool Configuration
---------------------
To fix a problem related to the interaction between CM's tools and
stable libraries I had to rework the Tools interface. Fortunately,
the implications for using the interface are small, although it will
be necessary for anyone who is currently using auxiliary tools not
distributed with CM to make minor updates to the code.
The major difference to earlier versions is that the filenames passed
to "rule"s, "validator"s, and "processor"s are all relative to the
directory that contains the corresponding description file ("the
context"). Furthermore, for the duration of the execution of a
"validator" or a "processor" CM changes its current working directory
to that context directory.
Example:
$ cat sources.cm
Group is
parser/sources.cm
program.sml
$ cat parser/sources.cm
Group is
parser.grm
$
Now, when running CM.make (); ml-yacc will be invoked with
its current working directory set to ./parser, and the file it
is called with is parser.grm.
There is one remaining catch:
The "rule" function associated with each of CM's tool classes might
also want to run with the cwd set to the context directory. However,
most of the time this is not necessary (the "rule" calculates the names
of the tool's targets given the name of its source). Some ``strange''
tools might actually want to inspect the content of the source in
order to be able to determine the target names.
I implemented a simple optimization that avoids unnecessary calls to
OS.FileSys.chDir when running rules by passing a "rule context" to
each rule. The rule itself can then choose to pass a "rule thunk" to
the "rule context", to have the code run with the proper cwd set, or
it can simply choose to ignore the "rule context". In the latter case
the cwd will in general not be set to the context, which means that
the source file name will not be resolved correctly when presented to
the OS' filesystem interface.
To make things easier to use (and to make this explanation more
difficult) "simple rules" have been added. They have the same type
that "rules" used to have. By calling CM.Tools.dontcare one can
conveniently convert a simple rule to one of the new ``fanzy'' rules.
Have a look at cm/tools/tools.sig.
It is very likely that all you need to do is replacing <yourrule>
(which now are of type simplerule) with (dontcare <yourrule>) at the
time when you register a class with CM using addToolClass. There are
examples for how this is done in
cm/srctypes/{yacc,lex,burg,rcs}source.sml
cm/noweb/nwsource.nw
=====================================================================
109.26-README-WIN32-SMLNJ
Notes on the Win32 SML/NJ working version.
This note describes:
(1) changes in the win32 binaries from the previous distribution
(2) installation of win32 binaries for Windows NT (3.51 or later)
and Windows 95
(3) compilation of the SML/NJ runtime for win32
(4) building sml and tools under win32
Decompressing (gunzip) and untarring (tar -xvf) 109.26-win32-smlnj.tar.gz
yields this README file and 109.26-win32-smlnj-binaries.tar which contains
win32 SML/NJ images and executables.
(The tools "tar" and "gunzip" for win32 can be found on
june.cs.washington.edu:pub/ntemacs/utilities/)
Bugs and questions to sml-bugs@research.bell-labs.com
109.26 Changes for Win32
------------------------
Win32 SML/NJ uses the same src tree as the Unix platforms.
The previous win32 binary distribution was 109.25.
Here are the major changes for 109.26:
o fixed filetime bug that caused sml-cm to skip necessary compiles
o SML/NJ C interface enabled by default
o various runtime cleanup
Installing Win32 SML/NJ binaries
--------------------------------
At this point, we assume you have ftp'd the SML/NJ Win32 distribution,
uncompressed it (gunzip) and untarred it (tar -xvf). The resulting
109.26-win32-smlnj-binaries.tar file contains the images and executables.
Select and create a directory for the installation. Here we'll use c:\smlnj\
Create an environment variable called SMLNJ_HOME and set it to c:\smlnj\
In NT, environment variables are usually set via ControlPanel->System.
In 95, they may be set per session with 'set' from a shell prompt or,
more persistently, via the 'autoexec.bat' startup file.
Uncompress and untar the binary distribution in c:\smlnj\
This will create the \bin subdirectory. This directory is structured
similarly to the Unix distributions. That is, scripts to run sml and the tools
are in \bin\, runtime executables are in \bin\.run\ and heap images
are in \bin\.heap\
You may now want to put %SMLNJ_HOME%\bin in your PATH.
To conserve space, you can remove heap images (in \bin\.heap\) corresponding
to unneeded tools. You can also use sml-cm in lieu of sml; however,
sml-cm uses a bit more space (disk and memory).
Invoking the sml.bat, sml-cm.bat, ml-lex.bat, ml-yacc.bat and ml-burg.bat
scripts now respectively runs the compiler and tools.
Compiling the runtime
---------------------
The following third-party tools are required to build the SML/NJ runtime
for win32:
(a) MS Visual C++, 2.0 or later
(b) MS Assembler (MASM), 6.11 or later
(c) MS NMAKE (part of VC++), 1.50 or later
(It should be straight forward to port to other compilers, assemblers,
and make utilities.)
Make sure the above tools are in the PATH environment variable and that
the default locations for compiler include files are being used.
To build the runtime, issue the command
nmake /f mk.x86-win32
in SML/NJ's src\runtime\objs directory.
Place the resulting 'run.x86-win32.exe' file in the bin\.run\ directory.
Win32 SML/NJ runtime builds have only been tested on NT hosts.
Compiling the compiler and tools
--------------------------------
Current Win32 SML/NJ development is being done in a ksh environment.
In particular, we're using the MKS toolkit, but other ksh implementations
for NT that have Unix tools (grep, sed, etc.) should work.
The compiler can be built from a set of bin files using src\sml-nj\xmakeml
sml-cm is used in the conventional manner to compile the compiler
(make sure %SMLNJ_HOME%\bin is in your PATH).
The tools sml-cm, ml-lex, ml-yacc and ml-burg may also be built in the
conventional manner by issuing the "build" command in the respective
directories.
Place the resulting '*.x86-win32' images in the bin\.heap directory.
Win32 SML/NJ compiler/tool builds have only been tested on NT hosts.
=====================================================================
109.26.1-README
SML/NJ Version 109.26.1
This minor version was created mainly to fix a bug in the type checker
introduced in 109.26 (bug 1177). This bug prevented the library
smlnj-lib/html from compiling. The bugs fixed in 109.26.1 include
12. loss of information in value printing
1160. Compiler bug: PPAbsyn: unexpected absyn expression in ppExp'
1176. compiler bug printing type in error message
1177. inappropriate nongeneralizable type variable error
1182. Error: Compiler bug: PPType: printTyvar
The type checker has also been modified to give precedence to the
type of the defining occurence of function names in fun decs and
val rec decs. This will give more sensible error messages when
defining and applied occurrences of function identifiers conflict
in recursive function declarations.
Further bug fixes and improvements are due in 109.27, which will be
available during the week of April 7, 1997.
=====================================================================
109.27-README
SML/NJ Version 109.27
This version is mainly a bug fix version, with a couple more SML '97 language
features added. The next point version expected to be 110, which should
complete the conversion to SML '97 by implementing changes in the behavior
of sharing constraints, a language change that may break a fair amount of code.
Numbered Bug Fixes:
12. loss of information in value printing
317. eqtypes and abstype
788. "open" reports an error (it should always work) (== 847)
797. error in example "fol" in mlyacc
847. opening structures with variables conflicting with constructors
936. failure translating abstype declarations
1049. extraneous unresolved flex record error (classified "not a bug")
1052. crash on closing an input source
1136. sharing causes a type to loose its equality property (== 1152)
1146. core dump on x86/linux
1152. opaque signature matching with sharing looses equality property
1160. Compiler bug: PPAbsyn: unexpected absyn expression in ppExp'
1167. Compiler bug: boxity
1169. problems printing polymorphic records (cosmetic fix)
1170. where type problem
1176. Compiler bug printing type in error message
1177. inappropriate nongeneralizable type variable error
1178. Overloaded constants in patterns
1182. Error: Compiler bug: PPType: printTyvar
1184. Compiler infinite loop
1185. Compiler bug of DECON on data constructors
1187. Compiler bug: Translate: unexpected tyvar LBOUND in mkPE
1188. Compiler bug: Unify: instTyvar
1189. Opening Real crashes system
1190. Exception values matching against exceptions in signatures
1191. pattern matching in presence of datatype replication
1192. datatype replication not implemented inside of expressions
- a few redundant matches in the compiler are fixed.
Type Checking
-------------
The type checker has been modified to give precedence to the type of
the defining occurence of function names in fun decs and val rec decs.
This will give more sensible error messages when defining and applied
occurrences of function identifiers conflict in recursive function
declarations.
Language Changes
----------------
1. Simultaneous where type defintions in signatures
Simultaneous type definitions in where clauses are now supported
(fixing bug 1170). Thus one can write declarations like
signature S' = S where type A.t = B.s list and type 'a u = int -> C.v
2. Explicit binding of type variables in value declarations.
It is now possible to add explicit type variable bindings to val, val
rec, and fun declarations. For example:
fun ('a,'b) f(x: 'a, y: 'b list) = (x, hd y)
Within their scope, such type variables act like type constants, i.e.
they cannot be instantiated to other types. They are generalized at the
associated declaration to yield a polimorphic type. Thus the function
f defined above has the type (All 'a, 'b).('a * 'b list) -> ('a * 'b).
This fixes bug 1178.
Basis Changes
-------------
This version has a partial implementation of the proposed SML'97
2-dimensional arrays. The functions Array2.copy, Array2.appi,
Array2.modifyi and Array2.foldi are not implemented yet (they
will raise the Fail exception).
=====================================================================
109.28-README
S M L / N J
1 0 9 . 2 8 N E W S
23 May, 1997
This version consist of bug fixes, changes to CML, and the last
set of language changes that make this implementation strictly
conforming to SML'97. The language changes are related to sharing
constraints and may require user code modifications.
Numbered Bugs fixed:
1015. formatting of real numbers is broken
1019. floats and Word32 in same closure
1035. spurious secondary error message
1037. inconsistent type sharing with DEFtycs (Compiler bug)
1040. Match exception after unbound signature name
1042. sig match failure produces "Compiler bug: ElabMod: rebind(TYCspec)"
1079. constructor types omitted when printing structure signature
1100. Compiler bug secondary error elaborating bad functor (SML96)
1113. inappropriate error message for missing @SMLload arg
1138. undefined signature generates secondary error
1150. secondary error - Compiler bug: ModuleUtil: fctId
1151. equality on reals admitted (actually fixed in 109.26 or earlier)
1174. Compiler bug: SigMatch:packElems: STRspec (secondary error)
1175. uncaught exception RegMap
1179. unmatched type specification leads to a Compiler bug error (1174)
1194. Compiler bug: TypesUtil: extractDcons
1195. wrong unit type for CharVector.app
1198. unnecessary "?." in printed type name
1200. where type problem, rhs within current signature
1201. ltUnbound in curried functor with where structure
1202. Unbound in functor with where structure clause on parameter sig
1203. structure def spec doesn't work
1204. invalid paths in lhs of where clauses
Language Changes.
Several more changes have been made to make the language conform more
strictly to the SML'97 revised definition, and these changes will
require user code to be modified. The changes are:
1. Scope of sharing constraints.
The paths in sharing constraints must now refer to components specified
within the signature containing the sharing constraint. For example
signature S =
sig
type t
structure A :
sig
type s
sharing type s = t
end
end
is no longer legal, because the path t in the sharing constraint refers
to something outside the immediately enclosing signature. To make this
signature legal, it can be rewritten in a couple ways:
signature S =
sig
type t
structure A :
sig
type s = t (* replacing sharing by a type definition *)
end
end
or
signature S =
sig
type t
structure A :
sig
type s
end
sharing type A.s = t (* lifting the sharing out a level *)
end
As a consequence of this restriction, it is no longer possible
to have "definitional" sharing constraints, which equate an
element of the current signature with a type or structure global
to the signature. For types, these sharing constraints can be
replaced by either type definition specs or "where type" clauses.
Here is an example using "where type".
(* Old form *)
signature S =
sig
structure A : S0
sharing type A.t = U.s (* illegal because U.s is global to signature *)
end
(* New form *)
signature S =
sig
structure A : S0
where type t = U.s (* where clause modifying signature S0 *)
end
Now what about the corresponding situation involving structure
sharing instead of type sharing:
signature S =
sig
structure A : S0
sharing A.B = U.C (* illegal because U.C is global to signature *)
end
In SML '97, the only way to fix this is to replace the definitional
structure sharing with a bunch of where type definitions:
signature S =
sig
structure A : S0
where type B.t = U.C.t
and type 'a B.s = 'a U.C.s
and type B.E.u = U.C.E.u
...
end
where the number of where type definitions depends on how many types
within A.B actually have to be defined for the purpose of the code
using signature S. Since this set of types may not be obvious, one
can make sure by adding where type definitions for all the types
specified within A.B's signature.
In SML/NJ, we are providing an additional construct, the "where
structure" clause, to make it simpler to replace definitional
structure sharing. The new version using "where structure" would be:
signature S =
sig
structure A : S0
where structure B = U.C
end
We also provide a structure analogue of type definition specs, so
one can also write something like:
signature S =
sig
structure A :
sig
structure B : SIGB = U.C (* structure definition spec *)
...
end
end
Here the signature SIGB is mandatory, even though one could in
principle derive B's signature to be that of U.C.
2. No sharing with rigid types
The type elements refered to in type sharing constraints now have to
be "flexible", meaning that they are not defined in terms of other
types.
Thus the following example is illegal:
signature S =
sig
type s = int
type t
sharing type t = s
end;
This could be rewritten either as
signature S =
sig
type s = int
type t = s
end;
or
signature S =
sig
type s
type t
sharing type t = s
end
where type s = int;
This restriction applies also to type sharing implied by structure
sharing. However, SML/NJ weakens the restriction by always allowing
structure sharing when the structures involved have the same signature.
Thus
signature S1 =
sig
type t = int
end
signature S2 =
sig
type t
type s = string
end
signature S3 =
sig
structure A: S1
structure B: S2
sharing A = B
end
is illegal, because it induces the sharing A.t = B.t where A.t is
"rigid" (i.e. defined). However, we allow
signature S3 =
sig
structure A: S1
structure B: S1
sharing A = B
end
In our experience, structure sharing almost always relates structures
with the same signature, so practically speaking most structure
sharing constraints will continue to work.
CML changes
-----------
The installation process now supports the creation of "cml-cm," which is
a version of sml-cm with autoloading of CML enabled. One still needs to
use RunCML.doit to run CML programs, but this allows interactive composition
of CML code (w/o direct use of CM).
=====================================================================
109.29-README
S M L / N J
1 0 9 . 2 9 N E W S
http://cm.bell-labs.com/cm/cs/what/smlnj/index.html
13 June, 1997
The changes in this release are primarily to get SML/NJ in compliance
with the SML'97 Basis Library specification. This version is expected
to be the last point version before the 110 beta release.
Basis Changes:
--------------
- Moved Chr exception from Char:CHAR to General:GENERAL.
- Added SML90 signature and structure.
- Removed old RealArray structure and added Real64Vector and
Real64Array structures. These are also known as RealVector
and RealArray.
- added map and mapi functions to Vector:VECTOR, MONO_VECTOR (and
instances), and String:STRING.
- fixed the type of Byte.packString.
- added Substring.span operation and General.Span exception.
- added List.getItem and removed StringCvt.scanList.
- changed pollErr/isErr to pollPri/isPri in OS.IO.
- added CommandLine:COMMAND_LINE structure. Also added getCmdName
to SMLofNJ structure.
- added fromCString/toCString to Char structure (fromCString isn't implemented
yet). Also fixed implementation of Char.toString.
- added fromCString/toCString to String structure (fromCString isn't implemented
yet).
- many changes to the Posix structures:
- cleaned up the sharing constraints in POSIX signature
- replaced offset type by Position.int in FileSys and IO
- removed Posix.FileSys.file_type and moved isDir etc. predicates
into Posix.FileSys.ST structure.
- replaced the Posix.FileSys.nlink type with int.
- changed the return type of Posix.FileSys.ST.size (removed the option)
- renamed Posix.IO.Flock to Posix.IO.FLock.
- Replaced Posix.TTY.V.index type by int.
- Removed "cf" and "tc" prefixes from the names of operations in
the Posix.TTY structure.
SML/NJ Library changes
----------------------
- Added collate operation to ORD_MAP signature.
- Added compare operation to ORD_SET signature.
- Changed the type of and intersectWith[i] in the ORD_MAP signature to be
more general.
- Changed the type of the map function in the ORD_SET signature to return
a new set (instead of a list).
CML and eXene changes
---------------------
- Minor changes to track the changes in the basis APIs.
Run-time system changes
-----------------------
- The run-time system now recognizes the option @SMLcmdname=xxx, which
overrides the name taken from argv[0]. This is used by the .run-sml
script to pass in the command-name that the system was invoked by.
Assembly output
---------------
- It is now possible to print the target machine flowgraph during various
phases of back end optimization. This feature is only available on the
DEC Alpha and Hppa.
Compiler.Control.CG contains:
datatype mlrisc_phase =
NO_PHASE
| AFTER_INSTR_SEL (* after instruction selection *)
| AFTER_RA (* after register allocation *)
| AFTER_SCHED (* after instruction scheduling *)
| PHASES of mlrisc_phase * mlrisc_phase
val printFlowgraph : mlrisc_phase ref
val printFlowgraphStream : TextIO.outstream ref
Setting the variable printFlowgraph to the back end phase of interest
directs the flowgraph output to printFlowgraphStream (or TextIO.stdOut
by default). Using AFTER_SCHED does not currently print anything.
=====================================================================
109.30-README
S M L / N J
1 0 9 . 3 0 N E W S
http://cm.bell-labs.com/cm/cs/what/smlnj/index.html
13 June, 1997
The changes in this release are primarily to get SML/NJ in compliance
with the SML'97 Basis Library specification. This version is expected
to be the last point version before the 110 beta release.
Bugs fixed:
-----------
802. missing signature PRETTYPRINT
842. sharing constraints in functor sig [moot in SML96]
855. sharing in signatures [moot in SML96]
1212. where structure when signatures differ [same as 1232]
1214. Increased make time
1224. representation foulup
1225. SMLofNJ.Internals.GC.doGC doesn't work
1227. Unaligned access generated from floating-point arrays
1228. various Real functions on Alpha (partial fix)
1229. Bugs in unionWith, unionWithi of smlnj-lib
1230. bus-error due to representation problem
1231. Compiler bug: ModuleUtil: unexpected binding in extractInfo
1232. consistent definitional specs seen as inconsistent
Compiler:
---------
* Syntax Change: "where structure" => "where"
The "structure" keyword has been dropped from the (not-yet-standard)
"where structure" clause. The new syntax is
<sigexp> where <longstrid1> = <longstrid2>
where longstrid1 is interpreted within the sigexp, while longstrid2
is interpreted in the context environment of the whole phrase (meaning
that longstrid2 cannot refer to components specified in sigexp.
The reason for this change is to make the "where" syntax consistent
with "sharing" syntax, where structure sharing specs do not include
"structure" while type sharing specs do include "type".
A where clause allows one to constrain a signature by defining a
structure component (at arbitrary nesting depth). It is the
structure analog of "where type" clauses. There is also a
structure definition specification form that is analogous to type
definition specs. It's syntax is:
structure <id> : <sigexp> = <longstrid>
* New control flags
Control.printWarnings : bool ref (default true)
When false, no warning messages are printed.
Control.valueRestrictionWarn : bool ref (default false)
When true, a warning message is printed when local value declarations
are not assigned a polymorphic type because of the value restriction.
Control.instantiateSigs : bool ref (default true)
When true, signatures defined by top-level declarations are instantiated
when they are defined to check that they are well-formed. Passing the
instantiation test does not guarantee that a signature is satisfyable
however.
Control.MC.matchRedundantWarn : bool ref (default true)
When true, a warning message is printed when redundant rules are detected
in a match.
Control.MC.matchRedundantError : bool ref (default true)
When true (and matchReundantWarn also true), redundant rules in a match
cause an error message.
Note that the fact that matchRedundantError is true by default means
that code that compiled before may fail to compile under 109.30.
* Overloaded operator defaulting (as per SML'97)
If the context of an overloaded operator (such as "+") does not determine
a unique meaning for the operator, the compiler chooses a default meaning
for the operator instead of generating an "unresolved overloading" error
message. The default version for most arithmetic and relational operators
is the Int version (i.e. "+" defaults to Int.+, etc.). The default version
is the first meaning listed for the operator in src/boot/bind-overloads.sml.
* Additional basis changes
Added String.extract
Added missing Real functions (some of these are stubs)
Run-time system
---------------
Fixed bug 1225, and got rid of the Unbound exception.
SML/NJ Library
--------------
Fixed a bug in the binary-tree and splay-tree implementations of the
unionWith[i] and intersectWith[i] functions. The bug caused the order
of arguments to the merging function to be wrong in some cases.
Fixed uses of System.Unsafe.
Removed Array2:ARRAY2 from Util library, since the basis now defines these.
Added MonoArrayFn functor for easy creation of monomorphic array structures.
Added Atom.atom' operation for turning substrings into atoms.
CML and eXene
-------------
Various minor changes to track changes in the compiler and
SML/NJ Library. See the CHANGES files for more details.
=====================================================================
109.31-README
S M L / N J
1 0 9 . 3 1 N E W S
http://cm.bell-labs.com/cm/cs/what/smlnj/index.html
9 September, 1997
This release is primarily a bug-fix release, with a few other changes.
We believe that SML/NJ is now very close to being in compliance with
the latest draft of the SML'97 Basis Library specification. Assuming
that this version is stable, we expect the next version to be 110.
-----------------------------------------------------------------------
***** IMPORTANT NOTE for RS/6000 AIX users *****
We have changed the run-time system and RS/6000 code generator to support
the PowerPC. This means that it no longer supports the original Power
architecture. Also, the run-time will not build on AIX 3.x, but should
build on AIX 4.x (because the assembler in the older version did not
accept PPC instruction mnemonics).
We are working on a port to MkLinux/PPC, it is not working yet.
-----------------------------------------------------------------------
Numbered Bugs fixed:
--------------------
720. when opening a structure at top-level, types are not printed
799. bogus type name paths (?)
874. scheduler improperly reordering instructions
1159. extraneous types included in pervasive environment
1196. discrepencies between Basis implementation and documentation
1199. size of exportFn image
1205. problem with "where structure" and curried functors (cf. 1201)
1206. Compiler bug: TransTypes: unexpected FORMAL kind in tycTyc-h
1207. unimplemented include syntax
1213. CM dependency analysis (not reproducible)
1215. Unaligned access messages
1218. increase in size of exportFn image [same as 1199?]
1222. ref assignment not performed before overflow
1223. Compiler bug: ModuleUtil: strId after unbound structure in functor
1228. various Real functions on Alpha (parts 3,4)
1234. EntityEnv.Unbound raised in functor application (1206)
1236. TextIO.outputSubstr doesn't work on substrings containing \n
1237. ml-yacc doesn't handle constructors with long names
1238. Elaboration error involving where structure
1239. Subscript-out-of-bounds error when opening a structure
1240. Can't form pairs of reals
1241. confused datatype constructors
1243. Application of functor to different representations
1244. Explicitly scoped type variable with 'val ... and' declaration
1245. Pretty printer bug
1246. Explicit scoping of type variables does not obey the standard
1247. IntSet library module is wrong
1248. blastWrite failures
1249. Time.time type too small
1250. Bind exception delayed by polymorphic generalization
1251. where specs cause exception Unbound
1252. Unbound exception on functor application
1253. pretty printing nested polymorphic records
1255. Disagreements between SML/NJ and Defn: datatype replication, part II
1257. (spurious) dependency cycle in instantiate
1260. Compiler bug (EntityEnv) when compiling ml-yacc.
Unnumbered bug fixes:
---------------------
. Add the extra field to signature to fix the sigmatch (tps.sml)
. Turn on the wrapper-sharing; this relieves a bit the problem
of compilation time blow-up on exponential type-expressions
(e.g., fun f x = x; f f f f f f f f f f f f f f f f f f 3)
Language changes:
-----------------
A declaration such as:
val [x] = nil::nil
is known as a refutable pattern binding since an exception can
potentially be raised depending on the value of the right hand side.
The value restriction rule has been tightened to disallow
generalization for such bindings, even though the binding to x can
be statically determined to be a value.
This is a deviation from the SML'97 definition. The main justification
is the simplicity it provides in the type-theoretic interpretation.
Raising the Bind exception is a side-effect, just like any other
side-effects; so the value restriction should apply too.
Basis changes:
--------------
- The Time.{to,from}{Seconds,Milliseconds,Microseconds} functions now use
LargeInt.int instead of Int.int.
Compiler:
---------
Added implementations for Real.real{Floor,Ceil,Trunc}, which were missing.
The following properties should hold about floating negation.
1. ~(r) should have a sign bit opposite from that of r.
2. ~(0.0) should have a sign bit opposite from 0.0
3. The literal value ~0.0 should be the same as ~(0.0)
4. ~0.0 should print as 0.0
5. Real.copySign(1.0,~0.0) = ~1.0
6. Real.~ should be implemented using the machine's floating-negate instr.
All but #3 were already true in 109.30. Fixing #3 required
a change in coder/ieeereal.sml.
The "abstraction" keyword is no longer recognized. Use the SML'97 opaque
signature constraint syntax instead.
The non-SML keyword "overload" has been changed to "_overload".
MLRISC back ends:
-----------------
The MLRISC language has been augmented with region information to
propagate alias information to the back end. This will be used in
global scheduling algorithms to be released in a future version. For
now memory disambiguation information is generated by turning on the
flag:
Compiler.Control.CG.memDisambiguate
and is only available on the DEC Alpha. It can be viewed by printing
the flowgraph.
SML/NJ Library:
---------------
Added the Reactive library, which supports reactive scripting. This is a
first cut, and hasn't been extensively tested.
Changed the names of SockUtil.sock{Recv,Send}* to SockUtil.{recv,send}*
(since the sock prefix was redundant).
Added a missing case to {ListSetFn,IntListSet}.isSubset.
The fix in 109.30 for the unionWith bug was wrong. Fixed it properly this
time.
Concurrent ML:
--------------
The entire startup/shutdown mechanism was rewritten as part of an effort
to get RunCML.exportFn working. See the src/cml/CHANGES file for details.
EXene:
------
Minor changes to track the changes to CML and SML/NJ.
=====================================================================
109.32-README
S M L / N J
1 0 9 . 3 2 N E W S
http://cm.bell-labs.com/cm/cs/what/smlnj/index.html
4 October, 1997
This release is primarily a bug-fix release, with a few other changes.
We believe that SML/NJ is now very close to being in compliance with
the SML '97 Definition and the latest draft of the SML'97 Basis
Library specification. Assuming that this version is stable, we
expect to announce version 110 in about two weeks. Please try this
version out and report any problems as soon as possible so that
they can be fixed in 110.
-----------------------------------------------------------------------
***** IMPORTANT NOTE for RS/6000 AIX users *****
As of version 109.31, we have changed the run-time system and RS/6000
code generator to support the PowerPC. This means that it no longer
supports the original Power architecture. Also, the run-time will not
build on AIX 3.x, but should build on AIX 4.x (because the assembler
in the older version did not accept PPC instruction mnemonics).
We are working on a port to MkLinux/PPC, it is not working yet.
-----------------------------------------------------------------------
Numbered Bugs fixed:
--------------------
1075. Infinite loop during profiling
1133. "<null region>" in non-exhaustive match warning messages (cf 1112)
1206. Compiler bug: TransTypes: unexpected FORMAL kind in tycTyc-h
1236. TextIO.outputSubstr doesn't work on substrings containing \n
1237. ml-yacc doesn't handle constructors with long names
1272. Match exception raised in instantiate while elaborating sig
1273. control-c doesn't interrupt infinite loop
1274. secondary compiler bug caused by unbound signature
1275. mod and div broken on alpha
1276. Posix.TTY.getattr returns invalid object.
1277. Segmentation fault
1278. segmentation faults running Unix.execute
1279. frags and backquotes are confused
1280. structure sharing semantics
1281. Open in local-in-end can give "Compiler bug: PickMod: dontPickle"
1283. Representation exception raised during value pretty printing
1285. Compiler bug: LtyEnv: unexpected tycs in tcWhNorm-TC_PROJ
Unnumbered bug fixes:
---------------------
- A number of secondary errors and regression test failures have
been fixed.
- Fewer unnecessary "?"s appear in printed type names.
- Char.fromString now works for all escape sequences.
Basis changes:
--------------
- The Date structure interface has been changed in line with changes to the
SML Basis Library specification. The Date.date type is now abstract.
The function Date.fromTime is now called Date.fromTimeLocal and
Date.fromUTC is now Date.fromTimeUniv.
Compiler:
---------
- The control flag Compiler.Control.MC.matchExhaustive used to control
whether warning messages were printed for nonexhaustive matches. This
flag has been renamed matchNonExhaustiveWarn. A new flag,
matchNonExhaustiveError, has been added to Compiler.Control.MC. When
its value is true, nonexhaustive matches will generate error messages.
- The flag Compiler.Control.Print.printWarnings (default value true)
controls whether warning messages are printed. Setting this flag
to false suppresses all warning messages.
Run-time system:
----------------
- The mktime function was fixed to raise an exception when the date is out
of the supported range.
- The allocation of Word32.word values was broken and has been fixed (wrong
descriptor).
- There was an off-by-one error in the initialization of the dirty card maps
when importing heap images. In obscure cases, this caused live code objects
to be freed.
Concurrent ML:
--------------
- A bunch of bug fixes. See cml/CHANGES for details.
---------------------------------------------------------------------
Standard ML of New Jersey
Version 110.0.0, December 9, 1997
This is the long awaited Version 110 release of SML/NJ. It implements
the SML '97 definition, including the new Basis library (with a few
minor documented discrepancies and omissions).
Version 110 is much more thoroughly tested than previous working
versions, and even than the 0.93 release version, and we believe it to
be fairly free of serious bugs. The bug lists are as usual available
in dist/smlnj/working/bugs for reference.
We are making a preliminary announcement of 110 to our "early
adopters" list to get early feedback on any problems with this
version. After a week or two we plan to move 110 from the "working"
directory to the "release" directory and announce to the world that
110 is available.
Recent Bug Fixes
----------------
Numbered bug fixes since 109.32:
1207. unimplemented include syntax
1228. -- various Real functions on Alpha
1284. bogus file created upon aborted run of ml-lex
1286. Flexible records and as patterns
1288. readDir returns "." and ".."
1289. readDir and rewindDir raise the wrong exception on closed dir stream
1290. OS.FileSys.fullPath raises exception on symbolic link
1291. OS.FileSys.readLink returns bogus results
1293. CharVector.mapi doesn't work with non-zero start index
1295. SMLofNJ.exportFn should complain about an empty name
1296. Datatype replication and signature matching.
1297. Compile time and space performance bug
1298. TransTypes: unexpected FORMAL kind in tycTyc-h
1303. CM file problems: multiple access not detected
1304. Type printing of exceptions on top-level
1305. translation of newlines in TextIO
1308. uncaught exception Representation in Version 109.32
1312. CM.autoloading always returns false
1313. CM autoloader doesn't cope with <returnStr>.<resultStr>
1315. bogus value created (probably representation bug)
1316. type checker loops on incorrect function declaration
1317. Error: Compiler bug: EntityEnv: lookEP.1
A number of regression test failures have also been fixed in 110.
Residual regression test failures or discrepancies are documented
in the files in dist/smlnj/working/bugs/regression. We plan to
make our regression test suites and data available in
dist/smlnj/working/test soon.
Documentation
-------------
The documentation for Version 110 is available at our web site
http://cm.bell-labs.com/cm/cs/what/smlnj
including nearly final documentation of the SML '97 Basis library and
an SML '97 Conversion Guide that describes language changes but is
still "under construction" at the moment. Work is continuing to improve
the content and organization of the documentation, so suggestions are
welcome.
The file 110-HISTORY contains slightly edited versions of the
README files for working versions from 109 through 109.32.
---------------------------------------------------------------------
Standard ML of New Jersey
Version 110.0.1, January 12, 1998
---------------------------------
This is the first patch release for version 110. It fixes a few serious bugs
that slipped through in version 110, as well as adding a couple of new features.
Recent Bug Fixes
----------------
Numbered bugs fixed in this patch version:
891. mllex state names not as general as advertized
997. lexgen doesn't check for unmatched quotes
1209. casting polymorphic functions and abstract types
1318. incorrect sigmatch error in higher-order functor
1320. path name syntax used by cm when compiling to x86
1322. "Compiler bug: LambdaType: wrong TCs in tc_select"
1325. raises exception in compiler while trying to print error message
1326. nonexhaustive match failure in pretty printer
1327. tycStamp secondary error
Other changes
-------------
- It is now possible to turn GC messages off and on, by using the function
SMLofNJ.Internals.GC.messages
- The implementation of OS.IO.poll has been fixed to agree with the basis
specification (order of results matches order of arguments).
- A potential infinite loop in runtime/c-libs/posix-filesys/getcwd.c was
fixed.
- Added a clear operation to the Queue and various hash table structures in
the SML/NJ library.
---------------------------------------------------------------------
Standard ML of New Jersey
Version 110.0.2, January 16, 1998
---------------------------------
This is the second patch release for version 110. It fixes a few serious bugs
that slipped through in version 110 (and 110.0.1), as well as adding a couple
of new features. See the file 110-PATCH-1 for information on 110.0.1.
Recent Bug Fixes
----------------
Numbered bugs fixed in this patch version:
1335. nonexhaustive match failure in mips code generator
1337. exporfFn in CML produces large images
1338. uncaught Unbound while compiling MLKit
Other changes
-------------
The Windows'95/NT version is now distributed as an InstallShield(tm)
package (110-smlnj.exe). This is a self-extracting archive. You execute
it, it unpacks, and starts up the setup program by itself. From that point,
it's pretty standard installation procedure common on Windows. The only
thing maybe to note is that a reboot is strongly advised, to have the
changes to the registry (PATH env. variable and such) take effect. Note
that the archive does not contain the source code, except for the SML/NJ
Library, which is provided in source, and the ml-yacc library. If one
wants the source of ml-lex, ml-yacc, ml-burg, the runtime, the compiler,
or CM, you have to download the appropriate compressed tar file.
---------------------------------------------------------------------
Standard ML of New Jersey
Version 110.0.3, January 30, 1998
---------------------------------
This is the third patch release for version 110. It fixes a few serious bugs
that slipped through in the earlier patch releases. See the files 110-README,
110-PATCH-1, and 110-PATCH-2 for additional information.
Recent Bug Fixes
----------------
Numbered bugs fixed in this patch version:
1047. Not very random, random number generator ... (smlnj-lib)
1337. exportFn in CML produces large images*
1340. Segmentation fault on Sparc, x86, Alpha, and MIPS
- Match exception related to span dependent loads on the hppa.
* we thought that this had been fixed in 110.0.2, but were mistaken.
Other changes
-------------
Problems with the InstallShield installation on Windows95 have been
fixed.
Installation problems under Linux have been fixed.
Installation problems under gcc 2.8.0 on the x86 have been fixed.
Made some minor additions to the Util library in the SML/NJ Library.
Added the GetDpy utility module to eXene. This provides simple support
for getting the display and authentication information.
|