|
|
1.1 ! root 1: Installing Standard ML of New Jersey ! 2: ! 3: Standard ML of New Jersey currently runs on the following systems, subject ! 4: to the noted restrictions: ! 5: ! 6: Vaxes running 4.[2,3]BSD Unix, V9 Unix, or Ultrix: ! 7: The floating point functions will work only on Vaxes which support g_floats. ! 8: (This includes VAX-8xxx, MicroVAX II, and MicroVAX III machines) ! 9: ! 10: Sun 3 workstations: ! 11: The floating point functions will work only on Suns with the MC68881 chip, ! 12: but the floating point coprocessor is not required to install and run ! 13: the compiler. ! 14: ! 15: Sun 4 workstations ! 16: ! 17: NeXT workstations ! 18: ! 19: Encore Multimax ! 20: ! 21: [DECstation {2,3}100] ! 22: ! 23: If you have trouble installing the system, please send us a request for ! 24: help, including the version of the compiler (check the definition of the ! 25: "version" variable in src/boot/perv.sml if in doubt), hardware ! 26: configuration (machine type and memory size), operating system, and an ! 27: input/output script showing the problem. ! 28: ! 29: The compiler can be used both interactively and in "batch" mode. Batch ! 30: mode provides an insecure precursor of separate compilation that we use to ! 31: bootstrap the compiler. Most users will want to use the interactive ! 32: system, but a description of the batch system is provided in ! 33: src/doc/BATCHINSTALL for those expert users who wish to modify the ! 34: compiler, cross compile, or support a large program of their own. The rest ! 35: of this file tells you how to install the interactive version. ! 36: ! 37: ! 38: Installation script -- makeml ! 39: ! 40: The makeml shell script (src/makeml) is described by its man page, doc/makeml.1. ! 41: The most important options describe the hardware architecture, the operating ! 42: system, and the sharing mode. ! 43: ! 44: (1) machine -- the target machine: ! 45: ! 46: -sun3 ! 47: -m68 Sun 3 workstations using the MC68020 processor (MC68881 assumed) ! 48: ! 49: -vax Vaxes supporting g_floats ! 50: ! 51: -sun4 ! 52: -sparc Sun 4 workstations and SPARCstations ! 53: ! 54: -next NeXT machine ! 55: ! 56: -envcore Encore Multimax (NS32032 processor) ! 57: ! 58: (2) os -- the operating system of the target machine: ! 59: ! 60: -bsd various BSD-based Unix systems ! 61: -ultrix Ultrix on Vax or DECstations ! 62: -v9 a local Bell Labs Unix variety (Vax only) ! 63: ! 64: These options are only necessary for the Vax architecture. The other ! 65: architecture options imply -bsd. ! 66: ! 67: (3) sharing mode -- specifies whether compiler object code is sharable: ! 68: ! 69: -noshare minimize the size of the runtime system (for exportFn) ! 70: ! 71: By default the sml image will be built with the compiler object code ! 72: read-only and sharable (linked into the Unix text segment of the ! 73: runtime system, runtime/run). This helps save memory on systems ! 74: supporting several concurrent sml users, and also improves garbage ! 75: collector performance. ! 76: ! 77: However, there is a problem when "exportFn" is used to create an ! 78: executable image from within a sharable compiler: the exported image ! 79: will include the compiler object code and thus be considerably larger ! 80: than necessary. So when you are planning to create an image using ! 81: exportFn you should use an sml with a minimal runtime system. The ! 82: "-noshare" option creates such an sml, by loading the compiler object ! 83: code into the ML heap instead of linking it into the runtime system ! 84: text segment. [The batch loader can also be used to create stand-alone ! 85: ML programs. See doc/BATCHINSTALL.] ! 86: ! 87: ! 88: Building an sml [vax and mc680x0 versions] ! 89: ! 90: We assume that the Standard ML distribution is set up as a directory ! 91: mldist containing subdirectories src, mo.m68, and mo.vax. The following ! 92: instructions assume that mldist is the current directory. ! 93: ! 94: 1. Go to the src subdirectory of mldist: ! 95: ! 96: cd src ! 97: ! 98: 2. Run makeml with appropriate command line options, e.g.: ! 99: ! 100: makeml -sun3 -noshare (for Sun3 workstations, not sharing) ! 101: makeml -vax -bsd (for Vaxes running 4.2/4.3 BSD, shared object code) ! 102: makeml -vax -ultrix (for Vaxes running V9 Unix) ! 103: ! 104: NOTE: Make sure that the directories src and src/runtime are ! 105: writable by the user running the makeml script. ! 106: ! 107: The building of the sml system proceeds in three phases. First the ! 108: runtime system is compiled with the appropriate options. Then the sml ! 109: object files (from mo.vax or mo.m68 as appropriate) are loaded and ! 110: executed. Finally the files in src/boot are compiled to initialize ! 111: the static environment. Each of these phases prints characteristic ! 112: messages on the standard output. After the interactive sml has been ! 113: built, an image will be exported to a file named "sml" and the makeml ! 114: command will exit (the -i option allows one to specify a different name ! 115: for the exported image). ! 116: ! 117: 3. Install the executable image "sml" produced by step 2 in an ! 118: appropriate bin directory on your machine, e.g. /usr/local/bin: ! 119: ! 120: cp sml /usr/local/bin ! 121: ! 122: (You may need system administrator privileges for this step.) Once ! 123: installed, the interactive system can be run by executing the command ! 124: "sml". The system will start up by printing a version message, then ! 125: the top-level prompt "-", indicating that you can now start typing to ! 126: the interactive system. ! 127: ! 128: ! 129: Cross compiling objects for other architectures ! 130: ! 131: If you wish to install the system on architectures other than the Vax ! 132: or MC680x0, you will first have to build a directory containing the ! 133: object files for that architecture (mo.sparc, mo.ns32, etc.). The ! 134: batch compiler instructions in doc/BATCHINSTALL explain how to do ! 135: this. ! 136: ! 137: ! 138: Managing memory use ! 139: ! 140: ML provides automatic storage management through a garbage-collected ! 141: heap. Since the heap is used intensively, choice of heap size can ! 142: have a significant impact on performance. The compiler determines an ! 143: efficient heap size automatically on startup, resizes the heap up or ! 144: down as the amount of live data changes, and complains if it runs out ! 145: of memory (the interactive system can be booted in approximately 3 ! 146: megabytes). ! 147: ! 148: There are three parameters of the runtime system that help determine the ! 149: size of the heap. They are defined by the -h, -r, and -m command line ! 150: options of makeml. ! 151: ! 152: The options are ! 153: ! 154: -h i set the initial heap size to i Kbytes (i a positive integer) ! 155: ! 156: -r j the desired ratio between the size of live data and the size ! 157: of the heap is set to j, a positive integer greater than or ! 158: equal to 3 (the default is j=5) ! 159: ! 160: -m k set the soft maximum heap size (softmax) to k Kbytes (k a ! 161: positive integer), with the default being k=100,000 (i.e. 100MB) ! 162: ! 163: -g l set the g.c. message level to l, where l is 0,1,2, or 3 ! 164: ! 165: The -h option only has an effect on the initial phase of execution up ! 166: to the first major garbage collection, at which time the heap size ! 167: will be automatically resized as dictated by the ratio and softmax ! 168: parameters. Using a large -h value can speed up the building of the ! 169: system when lots of memory is available. ! 170: ! 171: The -g option specifies how much information is printed about garbage ! 172: collections. The value l=0 suppresses all garbage collection ! 173: messages, l=1 causes messages to be printed for major collections, l=2 ! 174: adds messages for heap resizing, and l=3 adds messages for minor ! 175: collections and failure to maintain the desired ratio. The default is ! 176: l=2. ! 177: ! 178: In general, the larger the heap size, the lower the garbage collection ! 179: overhead. In principle, heap size is limited by the total virtual memory ! 180: available to a process. In practice, since heavy paging will slow down a ! 181: program drastically, it is desirable to keep heap size within the bounds of ! 182: available physical memory, taking into account the memory requirements of ! 183: other processes sharing the physical memory. Setting a high ratio will ! 184: cause the compiler to be aggressive in its use of memory, while setting a ! 185: reasonable limit on heap size can prevent excessive paging. The maximum ! 186: heap size can be controlled externally by using the "limit datasize" ! 187: command in the C shell. For instance, on an 8MB Sun 3 you might execute ! 188: the shell command ! 189: ! 190: limit datasize 6M ! 191: ! 192: before running sml. This would prevent the heap from growing larger ! 193: than 6 MB regardless of the value of the ratio. This is a hard limit, ! 194: so it might cause a program to run out of memory and fail even though ! 195: plenty of virtual memory is available. ! 196: ! 197: The soft maximum heap size (softmax) specified with the -m option is a ! 198: less drastic way of controlling the system's appetite for memory. The ! 199: heap will grow larger than softmax only when necessary to maintain a ! 200: ratio of 3. Thus when softmax is reached, the heap will not grow ! 201: until the size of live data is one third of softmax, and thereafter it ! 202: will grow more slowly than with the default ratio of 5 (or the user ! 203: defined ratio). A reasonable strategy is to set softmax to the ! 204: maximum amount of physical memory that you know will be available and ! 205: set ratio to a high value (e.g. 20), so that the heap size will tend ! 206: to stick at softmax, thereby taking advantage of available memory. ! 207: ! 208: The ratio and softmax parameters can also be changed at any time from ! 209: within sml since they are the values of the variables ! 210: ! 211: System.Control.Runtime.ratio: int ref, ! 212: System.Control.Runtime.softmax: int ref. ! 213: ! 214: For example, ! 215: ! 216: makeml ... -r 20 -m 4096 ! 217: ! 218: might be appropriate at a site where most users are running small to ! 219: medium size programs on machines with 8MB physical memory. [We would ! 220: appreciate feedback concerning which settings seem to work best in ! 221: your situation.] The defaults can also be changed by editing their ! 222: definitions in the file src/runtime/run.c. ! 223: ! 224: The runtime system (src/runtime/run) can be exectuted directly, ! 225: without using the makeml script, and it accepts the -h, -r, and -m options ! 226: as well.. The command synopsis is ! 227: ! 228: run [-h i] [-r j] [-m k] [-g l] module ! 229: ! 230: The parameter "module" is the name of a module whose object file, ! 231: namely src/mo/<module>.mo, is to be loaded and executed (along with ! 232: any other modules on which it depends). IntVax and IntM68 are typical ! 233: module arguments; they define the interactive top level loops for the ! 234: Vax and MC68020 versions of the compiler, respectively. ! 235: ! 236: ! 237: ! 238: WARNING: recompile runtime for different OS versions ! 239: ! 240: When transferring the system between Sun 3's running different ! 241: versions of SunOS (say 3.x and 4.0), the sml object code files in ! 242: mo.m68 can be copied without change -- they do not need to be ! 243: regenerated. However, the runtime system *must* be recompiled ! 244: when moving the system to a different version of Unix, even if the ! 245: same arguments would be used with makeml. This remark also ! 246: applies to Vaxes running different versions of Unix (4.3BDS and ! 247: Ultrix, for instance). The best approach is to transfer at least ! 248: the runtime sources (src/runtime) and src/boot and run the makeml ! 249: script with appropriate arguments on the new system.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.