|
|
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.