|
|
1.1 ! root 1: Standard ML of New Jersey version 0.44, 4 December 1989 ! 2: ! 3: New release: ! 4: ! 5: Starting with this release, the compiler source code is covered by an AT&T ! 6: copyright notice, which is included in each source code file. The file ! 7: doc/COPYRIGHT contains the official copyright notice, license, and ! 8: disclaimer. The file doc/release-form contains a release form that our ! 9: lawyer would like you to sign if you contribute software or modifications ! 10: that are included in the distribution. Whether you sign it as an ! 11: individual or get your institution to sign it is your decision, but it is ! 12: undoubtedly quicker and simpler to sign as an individual. The release form ! 13: is not necessary for simple bug fixes. ! 14: ! 15: Mailing list: ! 16: ! 17: There is now a Standard ML mailing list for messages and queries of general ! 18: interest to the ML community. You can join by sending a request to ! 19: [email protected], and you can send a message to the list by mailing ! 20: to [email protected]. This mailing list will be the main vehicle for ! 21: distributing announcements about Standard ML of New Jersey. ! 22: ! 23: Modules: ! 24: ! 25: All known major bugs in the module system have been fixed, so please report ! 26: any new bugs or old bugs we missed. The full module syntax from the ! 27: Definition, Version 3 is now implemented with minor limitations or ! 28: extensions, including let structure expressions and local and open ! 29: signature specs (see comments in doc/localspec). Include specs work ! 30: properly once again. ! 31: ! 32: Local and open specs: ! 33: ! 34: David MacQueen has some comments about "local" and "open" specifications ! 35: in signatures; see doc/localspec. ! 36: ! 37: Weak type variable syntax: ! 38: ! 39: Standard ML of New Jersey has a more precise system for weak typing ! 40: (i.e. typechecking of programs that use semi-polymorphic reference ! 41: variables). Other compilers denote weak type variables with an underscore, ! 42: i.e. '_abc, while ours uses an initial integer to denote level of weakness, ! 43: i.e. '2abc. See doc/weak-types for a fuller explanation. However, ! 44: for compatibility: ! 45: The notation for weak type variables using an initial underscore is now ! 46: supported for input and output. A weak type variable of the form '_a ! 47: is equivalent to the numeric form '1a. On output, weak type variables ! 48: are printed using an initial integer. However, if the ref variable ! 49: System.Control.weakUnderscore is set to true, then weak type variables ! 50: of all levels are printed with an underscore. ! 51: ! 52: Equality types: ! 53: ! 54: Equality types are still broken. Fixing these is the next order of business. ! 55: ! 56: Import: ! 57: ! 58: Nested imports do not work reliably in this version. ! 59: ! 60: Optimizing compiler: ! 61: ! 62: Hints on making your programs run faster are in doc/optimize. ! 63: ! 64: Miscellaneous: ! 65: ! 66: The SPARC code generator has been completely rewritten by John Reppy. ! 67: ! 68: Bruce Duba continues to make improvements to the CPS code generator. ! 69: ! 70: Andrew Appel is re-writing the parser to use David Tarditi's newest ! 71: version of the ML parser generator; this re-write is not complete but ! 72: the source files are included (along with the working recursive descent ! 73: parser) in src/parse/. ! 74: ! 75: Linkdata: ! 76: ! 77: The "linkdata" program, used for making a sharable version of the ML ! 78: compiler by putting all the .mo files into the text segment, did not work ! 79: on all operating systems. There is a more portable, albeit much less ! 80: efficient, version of linkdata called "slinkdata". Look in "src/makeml" to ! 81: see how it is used for the NeXT operating system, and you can use it that ! 82: way for your operating system too. (Admittedly, this is very minimal ! 83: documentation!) ! 84: ! 85: Bug fixes: ! 86: ! 87: See latest doc/bugs file for remaining bugs. This has been brought more or ! 88: less up to date. We appreciate your bug reports and hope you will be ! 89: patient as we work our way through them. There is a new version of the ! 90: bug report format file (doc/bug.form), including a new "Severity:" field ! 91: that you should use to indicate how serious the bug is from your point of ! 92: view. We get a lot of bug reports (which is good!) but we may not assign ! 93: the right priority to them without your help. ! 94: ! 95: Version 1 plan: ! 96: ! 97: Our tentative schedule calls for the release of version 1 of the compiler in ! 98: mid-January 1990. There will probably be one more beta release between now ! 99: and then. This is a more or less arbitrary deadline, and we will try to fix ! 100: as many bugs as possible before version 1 is released. Development of the ! 101: compiler will continue as usual following this milestone, and major, widely ! 102: publicized releases will occur on a more regular and less frequent schedule, ! 103: e.g. perhaps three times a year. Interim developmental versions can be made ! 104: available to those who have a special need for them. ! 105: ! 106: ------------------------------------------------------------------------------ ! 107: Standard ML of New Jersey version 0.42, 27 October 1989 ! 108: ! 109: Release notes by Andrew Appel, covering changes since version 0.39. ! 110: ! 111: Bug fixes: ! 112: ! 113: Large floating point literals do the right thing now, at least on the Vax. ! 114: ! 115: Duplicate constructor names and field names are again detected. ! 116: ! 117: Printing of records like {1="abc"} works correctly. ! 118: ! 119: Reading 1025 bytes from standard input works. ! 120: ! 121: Large list expressions of the form [(0,0),(0,0),(0,0), ..... (0,0)] no longer ! 122: cause the compiler to blow up. ! 123: ! 124: Previous versions have run on Sun-3s with Mach, this version might work ! 125: on Vaxes with Mach. The next version should run on anything with Mach. ! 126: ! 127: Compile-time processing of functors has been extensively rewritten, ! 128: and should be more robust. There are still some remaining bugs, however, ! 129: which should now be easy to iron out. ! 130: ! 131: The Io exception now carries a much more useful string value, containing ! 132: all sorts of information. ! 133: ! 134: Other changes since version 0.39 are mostly of interest to implementors. ! 135: VALvars and STRvars now have qualids instead of ids, lexer interface ! 136: parametrized more cleanly. Page-faulting is no longer used to detect ! 137: end-of-memory on most machines. ! 138: ! 139: --------------------------------------------------------------------------- ! 140: Standard ML of New Jersey version 0.39, 8 September 1989 ! 141: ! 142: This notes overlap with the 0.36 release notes, since 0.36 was not ! 143: widely distributed [neither were 0.37 or 0.38]. ! 144: ! 145: Release notes by Andrew Appel. ! 146: ! 147: Changes since version 0.33: ! 148: ! 149: 1. Support for Sun-4 (SPARC) thanks to John Reppy at Cornell; ! 150: Encore (NS32032), NeXT (also Mach on other 68020 machines), and ! 151: Sony NEWS (68020-based workstation), thanks to James O'Toole at MIT. ! 152: ! 153: 2. An interpreter for faster compilation (4x) but slower execution (18x). ! 154: Set System.Control.interp := true to enable this mode. Use the -i ! 155: or -ionly to makeml to set this option as the default. ! 156: ! 157: 3. Delay and Force primitives (meant for internal use only) for research ! 158: in lazy evaluation. ! 159: ! 160: 4. Bug fixes: reading 2049-byte files works now. Separate compilation ! 161: shouldn't dump core. Miscellaneous others. ! 162: ! 163: 5. A code generator generator implemented by Johan Lilius, ! 164: Jari Porra, & Jussi Rintanen of Helsinki University of Technology ! 165: is include in the Standard ML Software Library: see lib/twig. ! 166: ! 167: 6. Various internal efficiency improvements; the CMACHINE signature was ! 168: simplified a bit; the format of generational-gc update lists was changed; ! 169: the CPS optimizer was beefed up. ! 170: ! 171: 7. Separate compilation has been improved. The compiled version of a ! 172: separately compiled file has the extension ".bin", and internally ! 173: identifies the version of SML-NJ and also the machine type it ! 174: runs on. The command "head -1 foo.bin" will print this information. ! 175: ! 176: 8. Many functor bugs have been fixed. ! 177: ! 178: 9. An improved version of ML-Yacc by David Tarditi at Princeton is provided, ! 179: more efficient and with a better interface, and with sophisticated syntax ! 180: error recovery. ! 181: ! 182: Forthcoming in future releases: ! 183: ! 184: - Mach support for Vax and other machines. ! 185: ! 186: - Some work has been done on a MacIntosh II port, and we are hoping for ! 187: volunteers to continue this work. ! 188: ! 189: - Our MIPS code generator almost works now (thanks to Norman Ramsey at ! 190: Princeton). ! 191: ! 192: ----------------------------------------------------------------------------- ! 193: What's new in SML of NJ Version 0.33, 1 April 1989 ! 194: ! 195: 1. CPS code generator ! 196: ! 197: This version uses a new CPS (Continuation Passing Style) code ! 198: generator. The CPS code generator differs from the older code ! 199: generator in the following ways: ! 200: ! 201: (i) The code produced is about 50% faster. ! 202: ! 203: (ii) The compiler generates code about half as quickly (this should ! 204: gradually improve with future releases). ! 205: ! 206: (iii) the new code generator does not use a stack. This makes it easier ! 207: to support experimental features like callcc and multiple processes. ! 208: It also makes efficient garbage collection even more critical. ! 209: ! 210: (iv) The cps code generator tends to build larger intermediate ! 211: representations, so tuning of the runtime system becomes more ! 212: important. See the discussion of memory management in doc/INSTALL. ! 213: ! 214: ! 215: 2. The runtime system ! 216: ! 217: The runtime system has been extensively rewritten and cleaned up. The ! 218: amount of assembly code has been reduced (only 220 lines for the Vax, ! 219: 385 for the Sun), and the system call interface has been simplified. The ! 220: mechanism for initiating garbage collection has been made more robust. ! 221: In the m68 version (for Sun 3), exhaustion of free space is detected ! 222: by an explicit comparison rather than by trapping a segmentation fault. ! 223: This finally eliminates persistent flakiness caused by the way the 68020 ! 224: recovers from segmentation faults. ! 225: ! 226: LaTeX source for a new paper describing the runtime system can be ! 227: found in doc/papers/runtime. This is still an early draft, but it should ! 228: be helpful in understanding internals of the run time system. ! 229: ! 230: ! 231: 3. The pervasive environment ! 232: ! 233: The initial environment has been reorganized to make it possible to ! 234: build a system whose pervasives (i.e., built-in bindings) correspond ! 235: closely to those described in "The Definition of Standard ML, Version ! 236: 2" by R. Harper, R. Milner, and M. Tofte (ECS-LFCS-88-62, August 1988, ! 237: hereafter referred to as the "Definition"). Note that in our humble ! 238: opinion the "standard" environment is somewhat brain-damaged and is ! 239: missing many important features (like arrays, bytearrays, etc). See ! 240: the file doc/environ for discussion of specific deficiencies of the ! 241: environment described in the Definition and our proposed fixes, some ! 242: of which are incorporated in the "New Jersey" environment. ! 243: ! 244: The default initial environment set up by the bootstrapping process is ! 245: the richer, and more efficient, New Jersey environment. However, ! 246: loading the source file src/lib/standard.sml defines a structure named ! 247: Standard that provides a close approximation to the "standard" ! 248: environment. Opening the structure Standard at the top level replaces ! 249: any nonstandard bindings in the New Jersey environment. The New ! 250: Jersey environment is still there in the background, so any New Jersey ! 251: bindings not rebound in Standard will still be visible. In the future ! 252: we may provide a mechanism (e.g. a function switchEnv: string -> unit) ! 253: for completely replacing the base environment with a different version ! 254: specified by a structure. For example, `switchEnv "Standard"' would ! 255: replace the existing base environment with the contents of Standard. ! 256: ! 257: The initial environment also contains: ! 258: ! 259: (1) The signatures ARRAY, BASICIO, BITS, BOOL, BYTEARRAY, GENERAL, IO, ! 260: INTEGER, LIST, REF, STRING, and REAL as defined in src/boot/perv.sig, ! 261: and the signature SYSTEM as defined in src/boot/system.sig ! 262: ! 263: (2) The structures Array : ARRAY, BasicIO : BASICIO, Bits : BITS, etc. ! 264: These contain the New Jersey versions of bindings. ! 265: ! 266: (3) The structure NewJersey, which contains the complete New Jersey initial ! 267: environment except for the signatures in (1) above and the structure ! 268: NewJersey itself. ! 269: ! 270: It follows that even if Standard has been defined and opened, all New Jersey ! 271: bindings are available via the structure NewJersey, or alternatively via ! 272: the structures Array, IO, etc. ! 273: ! 274: Here are some differences between the New Jersey and Standard environments: ! 275: ! 276: a. The functions +, /, *, -, div, mod are an order of magnitude ! 277: slower in Standard than in the New Jersey environment. This is ! 278: because they are required to raise distinct exceptions (according ! 279: to the Definition), and because the treatment of negative arguments ! 280: of div and mod doesn't match what the hardware provides; that ! 281: complicates their implementation. The NewJersey functions all raise ! 282: Overflow on results that won't fit in 31 bits (and Div on zero divisor ! 283: for div and mod). ! 284: ! 285: b. The functions div and mod return different results. ! 286: ! 287: c. input and output are curried in NewJersey (and in the IO structure), ! 288: but not in Standard. ! 289: ! 290: d. The New Jersey environment has many more functions in it, as described ! 291: in the appendix of our reference manual or the signatures in the files ! 292: src/boot/perv.sig and src/boot/system.sig. ! 293: ! 294: The New Jersey environment has changed slightly from previous releases, ! 295: mostly to make the it more compatible with the Definition [IMPORTANT -- ! 296: THESE CHANGES MAY BREAK SOME PROGRAMS]: ! 297: ! 298: a. The exception Io_failure has been renamed Io for consistency ! 299: with the Definition. ! 300: ! 301: b. The exception Float has been renamed Real. Float is still defined ! 302: as a synonym for Real. ! 303: ! 304: c. The identifier "length" is no longer overloaded: use "size" or ! 305: "String.size" for string lengths, "length" or "List.length" for ! 306: list lengths, and "Array.length" for array lengths. ! 307: ! 308: d. The functions "cd" and "system" are now components of the ! 309: System structure. ! 310: ! 311: e. Various components of the System structure have been moved ! 312: into the System.Unsafe substructure, and are not recommended for ! 313: casual use. ! 314: ! 315: f. The print functions (Integer.print, Real.print, String.print, ! 316: and the overloaded print), now return unit rather than their ! 317: argument. This is because we found that in our code virtually ! 318: every call of print was followed by "; ()". ! 319: ! 320: We plan to provide a definition of the NewJersey structure in terms of ! 321: the "standard" environment (analogous to the definition of Standard in ! 322: lib/src/standard.sml). This structure would enable any Standard ML ! 323: system to run programs based on the New Jersey environment. Such ! 324: programs should not reference the System structure, of course. ! 325: ! 326: 4. Command line arguments and Shell environment ! 327: ! 328: System.argv : unit -> string list ! 329: System.environ : unit -> string list ! 330: ! 331: are new functions that return the list of command line arguments and ! 332: the Unix shell environment, respectively. ! 333: ! 334: 5. First-class continuations: callcc, throw, and cont (experimental) ! 335: ! 336: These are new experimental primitives to allow one to capture and use ! 337: "first-class continuations". See the file doc/callcc for ! 338: documentation of these new facilities. ! 339: ! 340: 6. Separate compilation (experimental) ! 341: ! 342: We have integrated code written by Nick Rothwell and Mads Tofte of ! 343: Edinburgh that provides a preliminary, experimental form of secure (type ! 344: checked) separate compilation. There is a special declaration form: ! 345: ! 346: import "filename" ! 347: ! 348: where "filename" is a string literal designating either a source file ! 349: filename.sml or a binary file filename.bin. If only the source file ! 350: exists in the current directory, then it is compiled and the binary ! 351: version is created. If the binary version exists, it is loaded ! 352: instead of the source file. ! 353: ! 354: As a consequence of adding this new facility, the identifier "import" ! 355: has become a reserved word. This may cause incompatibilities with ! 356: existing code. ! 357: ! 358: 7. mlyacc ! 359: ! 360: The new directory src/lib/mlyacc contains a yacc-like parser generator ! 361: written in ML, with documentation. The parser generator is used much ! 362: like the Unix yacc utility, and the grammar specification language is ! 363: essentially that of yacc. The parser generator was written by David ! 364: Tarditi of Princeton, based on an earlier effort by Nick Rothwell. ! 365: Other, more sophisticated, interfaces to the parser generator will ! 366: probably be provided in future releases. As before, the directory ! 367: src/lib/lexgen contains a lexical analyzer generator. ! 368: ! 369: 8. Fixes ! 370: ! 371: A number of things that have been broken are now fixed. This includes ! 372: the garbage collector for the Sun 3, floating point operations on the ! 373: Sun 3, exportFn, sqrt, and execute. Unfortunately, many old bugs ! 374: remain and the error messages are just as bad as ever. We expect the ! 375: next release to fix many of these problems. Bug reports are welcome as ! 376: ever, as are bug fixes. ! 377: ! 378: 9. Things to come ! 379: ! 380: John Reppy has ported SML of NJ to the Sun 4 (SPARC) architecture and ! 381: his code generator will be included in the next release. A port to ! 382: the MIPS architecture (DECstation 3100 under Ultrix) is in the works ! 383: at Princeton, and a NeXT port is likely. A port to the Mac II under ! 384: the native Mac OS may also appear soon. ! 385: ! 386: We are working on a new licensing scheme similar to that used by the ! 387: Free Software Foundation. We hope to have this approved within three ! 388: months, and we will keep you informed of new developments. ! 389: ! 390: ------------------------------------------------------------------------------ ! 391: New features of SML of NJ Version 0.24 (November 22, 1988) ! 392: ! 393: 1. Profiler ! 394: ! 395: A call-count and statistical profiler has been implemented. See ! 396: operating instructions in the README file, and the paper provided in ! 397: src/doc/papers/profiling. ! 398: ! 399: ! 400: 2. Runtime reorganization ! 401: ! 402: The runtime system has been reorganized to reduce the need for assembly ! 403: language and provide a standard interface for Unix system calls and ! 404: C code. It should become possible to add special purpose C code to ! 405: the runtime system, for instance to provide an X windows interface. ! 406: Many of the assembly language functions have been replaced by more ! 407: portible C implementations and uses of the system call interface. ! 408: See src/doc/VERSION.24 for some more details. ! 409: ! 410: ! 411: 3. Memory Management tuning ! 412: ! 413: The variable ! 414: ! 415: System.Control.Runtime.ratio : int ref ! 416: ! 417: can be used to control the garbage collection behavior to some extent, ! 418: in conjunction with the Unix limit variable (in the csh). See the ! 419: discussion in README. ! 420: ! 421: ! 422: 4. Simple gnu emacs sml mode ! 423: ! 424: A simple gnu emacs sml mode was contributed by Mitch Wand. It can be ! 425: found in src/lib/sml.el. If you have a better mode or make improvements ! 426: on this version, please send them in to [email protected] for ! 427: inclusion in future releases. ! 428: -------------------------------------------------------------------------- ! 429: New features of SML of NJ Version 0.22 (October 10, 1988) ! 430: ! 431: This file describes the most notable changes since version 0.20. (Version 0.21 ! 432: was a local version that was not distributed.) ! 433: ! 434: ! 435: 1. Bugs ! 436: ! 437: A few bugs have been fixed; exportFn works again; the system runs under the ! 438: latest version (4.0) of Sun Unix on a Sun-3. See src/doc/bugs for the ! 439: remaining known bugs. The next release with many more bug fixes will ! 440: probably follow fairly shortly. ! 441: ! 442: ! 443: 2. Sharable text segments ! 444: ! 445: We now have an option to run sml with the compiler read-only and sharable ! 446: (in the Unix text segment). This should help on systems where several ! 447: people are running sml at once, and also improves garbage-collector performance. ! 448: See src/doc/INSTALL for more info. ! 449: ! 450: ! 451: 3. CPS code generator ! 452: ! 453: We are including the source code for the new cps code generator with ! 454: this release for those who would like an early look at it. This code ! 455: generator is still under development and works only on Vaxes at this ! 456: point. ! 457: ! 458: ! 459: 4. Installation ! 460: ! 461: The maker script for building the interactive image has been reorganized ! 462: and new scripts maker.batch and maker.run have been added to simplify ! 463: making batch systems and compiling the runtime system. See src/doc/INSTALL ! 464: and src/doc/BATCHINSTALL for details. ! 465: ! 466: ! 467: 5. Lexer generator ! 468: ! 469: The directory src/lib is a new directory for contributed software. ! 470: The programs included here do not come under the terms of the AT&T ! 471: license. The first contributed software is a lexical analyzer ! 472: generator similar to the Unix lex utility. It is in src/lib/lexgen. ! 473: lexgen has been used to generate a new lexical analyzer for the ! 474: compiler. The specification is in src/lex/ml.lex. ! 475: ! 476: ! 477: ---------------------------------------------------------------------------- ! 478: New features of SML of NJ Version 0.20 ! 479: ! 480: This file describes the most notable changes since version 0.18. (Version 0.19 ! 481: was a local version that was not distributed.) ! 482: ! 483: 1. Bugs ! 484: ! 485: Quite a few bugs have been fixed, mostly relating to type checking and modules. ! 486: See src/doc/bugs for the remaining known bugs. ! 487: ! 488: ! 489: 2. Reference types ! 490: ! 491: The typing of references and arrays is less restrictive. For ! 492: instance, the following is now permitted, whereas it used to cause an ! 493: error message: ! 494: ! 495: let val r = ref [] in r := [1]; !r end; ! 496: ! 497: Thus locally declared reference variables like r in this example do not ! 498: need to be explicitly constrained to have a monotype. ! 499: ! 500: ! 501: 3. Equality types ! 502: ! 503: Equality types are now implemented. Equality types are those ! 504: "hereditarily concrete" types whose values admit structural equality. ! 505: The implementation of equality types involves the new signature ! 506: specification keyword "eqtype" indicating that the specified type ! 507: constructor admits equality, and special equality type variables ! 508: starting with double single quotes (e.g. ''a) that are restricted to ! 509: range over equality types. ! 510: ! 511: An equality type is one containing only type constructors that "support ! 512: equality". The following type constructors support equality: ! 513: ! 514: int, string, real ! 515: ! 516: any datatype whose constuctor argument types are equality types ! 517: (disregarding parameter type variables) ! 518: ! 519: record type constructors ! 520: ! 521: type constructors from functor parameters that are specified as eqtypes ! 522: ! 523: In addition, any reference or array type is an equality type. ! 524: ! 525: Abstract type constructors, "->", and exn do not support equality. ! 526: ! 527: ! 528: 4. Include specifications in signatures ! 529: ! 530: Include specifications allow one to include the specifications of a previously ! 531: defined signature in a new signature. The syntax is ! 532: ! 533: include SIG ! 534: ! 535: where SIG is the name of a signature. For example, given the declaration ! 536: ! 537: signature AA = ! 538: sig ! 539: type t ! 540: val x : t ! 541: end ! 542: ! 543: the declaration ! 544: ! 545: signature BB = ! 546: sig ! 547: include AA ! 548: val y : t -> int ! 549: end ! 550: ! 551: is equivalent to ! 552: ! 553: signature BB = ! 554: sig ! 555: type t ! 556: val x : t ! 557: val y : t -> int ! 558: end ! 559: ! 560: ! 561: 5. Free identifiers in signatures and structures ! 562: ! 563: Structure definitions can now contain free identifiers of any sort ! 564: (values, constructors, exceptions, types), not just free signatures, ! 565: structures and functors. Signature definitions can contain free ! 566: structure and type identifiers, as well as free signature identifiers. ! 567: ! 568: ! 569: 6. Printing of signatures and structures ! 570: ! 571: Signatures defined at top level are printed. Structures defined at ! 572: top level have their signatures printed (currently in full -- in the ! 573: future only the name of the signature will be printed if it has one). ! 574: Printing of signatures can be turned off by setting the flag ! 575: System.Control.Print.signatures to false. ! 576: ! 577: ! 578: 7. Memory management improvements ! 579: ! 580: The runtime system manages memory better. The system automatically ! 581: resizes the heap on startup and during collections, allowing the ! 582: system to perform more gracefully on systems with limited memory. ! 583: ! 584: The behavior and type of the flag controlling gc messages has changed: ! 585: ! 586: System.Control.Runtime.gcmessages: int ref ! 587: when 0, no messages are printed ! 588: when 1, only major collections are reported ! 589: when 2, major collections and heap resizings are reported ! 590: when 3, minor and major collections and heap resizings are reported
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.