Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/HISTORY
ViewVC logotype

Diff of /sml/trunk/HISTORY

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 660, Thu Jun 15 04:40:56 2000 UTC revision 975, Wed Oct 31 20:22:44 2001 UTC
# Line 11  Line 11 
11  Date:  Date:
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15    ----------------------------------------------------------------------
16    Name: Matthias Blume
17    Date: 2001/10/31 15:25:00 EST
18    Tag: blume-20011031-pgraph
19    Description:
20    
21    CKIT:
22    * Changed the "Function" constructor of type Ast.ctype to carry optional
23      argument identifiers.
24    * Changed the return type of TypeUtil.getFunction accordingly.
25    * Type equality ignores the argument names.
26    * TypeUtil.composite tries to preserve argument names but gives up quickly
27      if there is a mismatch.
28    
29    installation script:
30    * attempts to use "curl" if available (unless "wget" is available as well)
31    
32    CM:
33    * has an experimental implementation of "portable graphs" which I will
34      soon propose as an implementation-independent library format
35    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
36    
37    NLFFI-LIB:
38    * some cleanup (all cosmetic)
39    
40    NLFFIGEN:
41    * temporarily disabled the mechanism that suppresses ML output for
42      C definitions whose identifiers start with an underscore character
43    * generate val bindings for enum constants
44    * user can request that only one style (light or heavy) is being used;
45      default is to use both (command-line arguments: -heavy and -light)
46    * fixed bug in handling of function types involving incomplete pointers
47    * generate ML entry points that take record arguments (i.e., using
48      named arguments) for C functions that have a prototype with named
49      arguments
50      (see changes to CKIT)
51    
52    ----------------------------------------------------------------------
53    Name: Allen Leung
54    Date: 2001/10/27 20:34:00 EDT
55    Tag: leunga-20011027-x86-fast-fp-call
56    Description:
57    
58       Fixed the bug described in blume-20010920-slowfp.
59    
60       The fix involves
61          1. generating FCOPYs in FSTP in ia32-svid
62          2. marking a CALL with the appropriate annotation
63    
64    ----------------------------------------------------------------------
65    Name: Matthias Blume
66    Date: 2001/10/16 11:32:00 EDT
67    Tag: blume-20011016-netbsd
68    Description:
69    
70    Underscore patch from Chris Richards (fixing problem with compiling
71    runtime system under recent NetBSD).
72    
73    ----------------------------------------------------------------------
74    Name: Allen Leung
75    Date: 2001/10/12 17:18:32 EDT 2001
76    Tag: leung-20011012-x86-printflowgraph
77    Description:
78    
79    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
80    
81    ----------------------------------------------------------------------
82    Name: Lal George
83    Date: 2001/10/11 23:51:34 EDT
84    Tag: george-20011011-too-many-instrs
85    Description:
86    
87    The representation of a program point never expected to see more
88    than 65536 instructions in a basic block!
89    
90    ----------------------------------------------------------------------
91    Name: Lal George
92    Date: 2001/10/09 09:41:37 EDT
93    Tag: george-20011008-mlrisc-labels
94    Description:
95    
96    Changed the machine description files to support printing of
97    local and global labels in assembly code, based on host assembler
98    conventions.
99    
100    ----------------------------------------------------------------------
101    Name: Matthias Blume
102    Date: 2001/09/25 15:25:00 EDT
103    Tag: blume-20010925-exninfo
104    Description:
105    
106    I provided a non-hook implementation of exnName (at the toplevel) and
107    made the "dummy" implementation of exnMessage (at the toplevel) more
108    useful: if nothing gets "hooked in", then at least you are going to
109    see the exception name and a message indicating why you don't see more.
110    
111    [For the time being, programs that need exnMessage and want to use
112    ml-build should either use General.exnMessage (strongly recommended) or
113    refer to structure General at some other point so that CM sees a
114    static dependency.]
115    
116    [Similar remarks go for "print" and "use":  If you want to use their
117    functionality in stand-alone programs generated by ml-build, then use
118    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
119    
120    ----------------------------------------------------------------------
121    Name: Matthias Blume
122    Date: 2001/09/20 17:28:00 EDT
123    Tag: blume-20010920-slowfp
124    Description:
125    
126    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
127    
128    ----------------------------------------------------------------------
129    Name: Matthias Blume
130    Date: 2001/09/20 17:20:00 EDT
131    Tag: blume-20010920-canonicalpaths
132    Description:
133    
134    0. Updated the BOOT file (something that I forgot to do earlier).
135    
136    1. Small internal change to CM so that it avoids "/../" in filenames
137       as much as possible (but only where it is safe).
138    
139    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
140       that arguments that contain delimiters are passed through correctly.
141       This change also means that all "special" arguments of the form
142       @SMLxxx... must come first.
143    
144    3. Changed install script to put relative anchor names for tool commands
145       into pathconfig.
146    
147    ----------------------------------------------------------------------
148    Name: Matthias Blume
149    >>>>>>> 1.169
150    Date: 2001/09/18 15:35:00 EDT
151    Tag: blume-20010918-readme11036
152    Description:
153    
154    Added README files.
155    
156    ----------------------------------------------------------------------
157    Name: Matthias Blume
158    Date: 2001/09/18 11:45:00 EDT
159    Tag: Release_110_36 (retag)
160    Description:
161    
162    Fixed mistake in config/preloads. Retagged as 110.36.
163    
164    ----------------------------------------------------------------------
165    Name: Matthias Blume
166    Date: 2001/09/18 09:40:00 EDT
167    Tag: Release_110_36_orig (tag changed)
168    Description:
169    
170    New version (110.36).  New bootfiles.
171    
172    ----------------------------------------------------------------------
173    Name: Matthias Blume
174    Date: 2001/09/14 16:15:00 EDT
175    Tag: blume-20010914-x86fastfp
176    Description:
177    
178    John committed some changes that Allen made, in particular a (hopefully)
179    correctly working version of the x86-fp module.
180    
181    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
182    flag to "true".  Everything seems to compile to a fixpoint ok, and
183    "mandelbrot" speeds up by about 15%.
184    
185    ----------------------------------------------------------------------
186    Name: Matthias Blume
187    Date: 2001/09/13 11:20:00 EDT
188    Tag: blume-20010913-minimal
189    Description:
190    
191    1. Stefan Monnier's patch to fix a miscompilation problem that
192       was brought to light by John Reppy's work on Moby.
193    
194    2. Implemented a minimal "structure Compiler" that contains just
195       "version" and "architecture".  The minimal version will be
196       available when the full version is not.  This is for backward-
197       compatibility with code that wants to test Compiler.version.
198    
199    ----------------------------------------------------------------------
200    Name: Matthias Blume
201    Date: 2001/08/28 14:03:00 EDT
202    Tag: blume-20010828-ml-lex
203    Description:
204    
205    Fix for bug 1581, received from Neophytos Michael.
206    
207    ----------------------------------------------------------------------
208    Name: Matthias Blume
209    Date: 2001/08/27 11:20:00 EDT
210    Tag: blume-20010827-readme11035
211    Description:
212    
213    Fleshed out the README file for 110.35.
214    
215    ----------------------------------------------------------------------
216    Name: Matthias Blume
217    Date: 2001/08/24 17:10:00 EDT
218    Tag: Release_110_35
219    Description:
220    
221    New version number (110.35).  New bootfiles.
222    
223    ----------------------------------------------------------------------
224    Name: Lal George
225    Date: 2001/08/24 13:47:18 EDT 2001
226    Tag: george-20010824-MLRISC-graphs
227    Description:
228    
229     removed clusters from MLRISC completely and replaced with graphs.
230    
231    ----------------------------------------------------------------------
232    Name: Matthias Blume
233    Date: 2001/08/23 17:50:00 EDT
234    Tag: blume-20010823-toplevel
235    Description:
236    
237    - some reorganization of the code that implements various kinds of
238      environments in the compiler (static, dynamic, symbolic, combined)
239    - re-implemented the EnvRef module so that evalStream works properly
240      (if the stream contains references to "use", "CM.make", etc.)
241    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
242    
243    ----------------------------------------------------------------------
244    Name: Matthias Blume
245    Date: 2001/08/20 15:50 EDT
246    Tag: blume20010820-slipup
247    Description:
248    
249    I forgot to commit a few files.  Here they are...
250    
251    ----------------------------------------------------------------------
252    Name: Matthias Blume
253    Date: 2001/08/20 15:35:00 EDT
254    Tag: blume-20010820-debugprof
255    Description:
256    
257    !!!! NEW BOOTFILES !!!!
258    
259    This is another round of reorganizing the compiler sources.  This
260    time the main goal was to factor out all the "instrumentation"
261    passes (for profiling and backtracing) into their own library.
262    The difficulty was to do it in such a way that it does not depend
263    on elaborate.cm but only on elabdata.cm.
264    
265    Therefore there have been further changes to both elaborate.cm and
266    elabdata.cm -- more "generic" things have been moved from the former
267    to the latter.  As a result, I was forced to split the assignment
268    of numbers indicating "primtyc"s into two portions: SML-generic and
269    SML/NJ-specific.  Since it would have been awkward to maintain,
270    I bit the bullet and actually _changed_ the mapping between these
271    numbers and primtycs.  The bottom line of this is that you need
272    a new set of bin- and bootfiles.
273    
274    I have built new bootfiles for all architectures, so doing a fresh
275    checkout and config/install.sh should be all you need.
276    
277    The newly created library's name is
278    
279        $smlnj/viscomp/debugprof.cm
280    
281    and its sources live under
282    
283        src/compiler/DebugProf
284    
285    ----------------------------------------------------------------------
286    Name: Matthias Blume
287    Date: 2001/08/15 17:15:00 EDT
288    Tag: blume-20010815-compreorg
289    Description:
290    
291    This is a first cut at reorganizing the CM libraries that make up the
292    core of the compiler.  The idea is to separate out pieces that could
293    be used independently by tools, e.g., the parser, the typechecker, etc.
294    
295    The current status is a step in this direction, but it is not quite
296    satisfactory yet.  Expect more changes in the future.
297    
298    Here is the current (new) organization...
299    
300        What used to be $smlnj/viscomp/core.cm is now divided into
301        six CM libraries:
302    
303             $smlnj/viscomp/basics.cm
304                           /parser.cm
305                           /elabdata.cm
306                           /elaborate.cm
307                           /execute.cm
308                           /core.cm
309    
310        The CM files for these libraries live under src/system/smlnj/viscomp.
311        All these libraries are proxy libraries that contain precisely
312        one CM library component.  Here are the locations of the components
313        (all within the src/compiler tree):
314    
315             Basics/basics.cm
316             Parse/parser.cm
317             ElabData/elabdata.cm
318             Elaborator/elaborate.cm
319             Execution/execute.cm
320             core.cm
321    
322         [This organization is the same that has been used already
323         for a while for the architecture-specific parts of the visible
324         compiler and for the old version of core.cm.]
325    
326         As you will notice, many source files have been moved from their
327         respective original locations to a new home in one of the above
328         subtrees.
329    
330         The division of labor between the new libraries is the following:
331    
332             basics.cm:
333                - Simple, basic definitions that pertain to many (or all) of
334                  the other libraries.
335             parser.cm:
336                - The SML parser, producing output of type Ast.dec.
337                - The type family for Ast is also defined and exported here.
338             elabdata.cm:
339                - The datatypes that describe input and output of the elaborator.
340                  This includes types, absyn, and static environments.
341             elaborator.cm:
342                - The SML/NJ type checker and elaborator.
343                  This maps an Ast.dec (with a given static environment) to
344                  an Absyn.dec (with a new static environment).
345                - This libraries implements certain modules that used to be
346                  structures as functors (to remove dependencies on FLINT).
347             execute.cm:
348                - Everything having to do with executing binary code objects.
349                - Dynamic environments.
350             core.cm:
351                - SML/NJ-specific instantiations of the elaborator and MLRISC.
352                - Top-level modules.
353                - FLINT (this should eventually become its own library)
354    
355    Notes:
356    
357    I am not 100% happy with the way I separated the elaborator (and its
358    data structures) from FLINT.  Two instances of the same problem:
359    
360        1. Data structures contain certain fields that carry FLINT-specific
361           information.  I hacked around this using exn and the property list
362           module from smlnj-lib.  But the fact that there are middle-end
363           specific fields around at all is a bit annoying.
364    
365        2. The elaborator calculates certain FLINT-related information.  I tried
366           to make this as abstract as I could using functorization, but, again,
367           the fact that the elaborator has to perform calculations on behalf
368           of the middle-end at all is not nice.
369    
370        3. Having to used exn and property lists is unfortunate because it
371           weakens type checking.  The other alternative (parameterizing
372           nearly *everything*) is not appealing, though.
373    
374    I removed the "rebinding =" warning hack because due to the new organization
375    it was awkward to maintain it.  As a result, the compiler now issues some of
376    these warnings when compiling init.cmi during bootstrap compilation. On
377    the plus side, you also get a warning when you do, for example:
378       val op = = Int32.+
379    which was not the case up to now.
380    
381    I placed "assign" and "deref" into the _Core structure so that the
382    code that deals with the "lazy" keyword can find them there.  This
383    removes the need for having access to the primitive environment
384    during elaboration.
385    
386    ----------------------------------------------------------------------
387    Name: Matthias Blume
388    Date: 2001/08/13
389    Tag: blume-20010813-closures
390    Description:
391    
392    This fix was sent to us by Zhong Shao.  It is supposed to improve the
393    performance of certain loops by avoiding needless closure allocation.
394    
395    ----------------------------------------------------------------------
396    Name: Lal George
397    Date: 2001/07/31 10:03:23 EDT 2001
398    Tag: george-20010731-x86-fmalloc
399    Description: Fixed bug in x86 calls
400    
401        There was a bug where call instructions would mysteriously
402        vanish. The call instruction had to be one that returned
403        a floating point value.
404    
405    ----------------------------------------------------------------------
406    Name: Lal George
407    Date: 2001/07/19 16:36:29 EDT 2001
408    Tag: george-20010719-simple-cells
409    Description:
410    
411    I have dramatically simplified the interface for CELLS in MLRISC.
412    
413    In summary, the cells interface is broken up into three parts:
414    
415      1. CellsBasis : CELLS_BASIS
416    
417            CellsBasis is a top level structure and common for all
418            architectures.  it contains the definitions of basic datatypes
419            and utility  functions over these types.
420    
421      2. functor Cells() : CELLS
422    
423            Cells generates an interface for CELLS that incorporates the
424            specific resources on the target architecture, such as the
425            presence of special register classes, their number and size,
426            and various useful substructures.
427    
428      3. <ARCH>CELLS
429    
430            e.g. SparcCells: SPARCCELLS
431    
432            <ARCH>CELLS usually contains additional bindings for special
433            registers  on the architecture, such as:
434    
435                    val r0 : cell           (* register zero *)
436                    val y : cell            (* Y register *)
437                    val psr : cell          (* processor status register *)
438                    ...
439    
440            The structure returned by applying the Cells functor is opened
441            in this interface.
442    
443    The main implication of all this is that the datatypes for cells is
444    split between CellsBasis and CELLS -- a fairly simple change for user
445    code.
446    
447    In the old scheme the CELLS interface had a definitional binding of
448    the form:
449    
450            signature CELLS = sig
451    
452               structure CellsBasis = CellsBasis
453    
454               ...
455    
456            end
457    
458    With all the sharing constraints that goes on in MLRISC, this old
459    design  quickly leads to errors such as:
460    
461            "structure definition spec inside of sharing ... "
462    
463    
464    and appears to require an unacceptable amount of sharing and where
465    constraint hackery.
466    
467    I think this error message (the interaction of definitional specs and
468    sharing) requires more explanation on our web page.
469    
470    ----------------------------------------------------------------------
471    Name: Matthias Blume
472    Date: 2001/07/19 15:00:00 EDT
473    Tag: blume-20010719-libreorg
474    Description:
475    
476    This update puts together a fairly extensive but straightforward change
477    to the way the libraries that implement the interactive system are
478    organized:
479    
480       The biggest change is the elimination of structure Compiler.  As a
481       replacement for this structure, there is now a CM library
482       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
483       that exports all the substructures of the original structure Compiler
484       directly.  So instead of saying Compiler.Foo.bar one now simply
485       says Foo.bar.  (The CM libraries actually export a collection of
486       structures that is richer than the collection of substructures of
487       structure Compiler.)
488    
489       To make the transition smooth, there is a separate library called
490       $smlnj/compiler/compiler.cm which puts together and exports the
491       original structure Compiler (or at least something very close to it).
492    
493       There are five members of the original structure Compiler
494       that are not exported directly but which instead became members
495       of a new structure Backend (described by signature BACKEND).  These are:
496       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
497       Interact (: INTERACT), structure Machine (: MACHINE), and val
498       architecture (: string).
499    
500       Structure Compiler.Version has become structure CompilerVersion.
501    
502       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
503       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
504       or x86, respectively.
505       Each of these exports the same frontend structures that
506       $smlnj/compiler.cm exports.  But they do not have a structure Backend
507       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
508       Hppa, PPC, Sparc, or X86, respectively.
509    
510       Library $smlnj/compiler/all.cm exports the union of the exports of
511       $smlnj/compiler/<arch>.cm
512    
513       There are no structures <Arch>Compiler anymore, use
514       $smlnj/compiler/<arch>.cm instead.
515    
516       Library host-compiler-0.cm is gone.  Instead, the internal library
517       that instantiates CM is now called cm0.cm.  Selection of the host
518       compiler (backend) is no longer done here but. (Responsibility for it
519       now lies with $smlnj/compiler/current.cm.  This seems to be more
520       logical.)
521    
522       Many individual files have been moved or renamed.  Some files have
523       been split into multiple files, and some "dead" files have been deleted.
524    
525    Aside from these changes to library organization, there are also changes
526    to the way the code itself is organized:
527    
528       Structure Binfile has been re-implemented in such a way that it no
529       longer needs any knowledge of the compiler.  It exclusively deals
530       with the details of binfile layout.  It no longer invokes the
531       compiler (for the purpose of creating new prospective binfile
532       content), and it no longer has any knowledge of how to interpret
533       pickles.
534    
535       Structure Compile (: COMPILE) has been stripped down to the bare
536       essentials of compilation.  It no longer deals with linking/execution.
537       The interface has been cleaned up considerably.
538    
539       Utility routines for dealing with linking and execution have been
540       moved into their own substructures.
541    
542       (The ultimate goal of these changes is to provide a light-weight
543       binfile loader/linker (at least for, e.g., stable libraries) that
544       does not require CM or the compiler to be present.)
545    
546    CM documentation has been updated to reflect the changes to library
547    organization.
548    
549    ----------------------------------------------------------------------
550    Name: Matthias Blume
551    Date: 2001/07/10 17:30:00 EDT
552    Tag: Release_110_34
553    Description:
554    
555    Minor tweak to 110.34 (re-tagged):
556    
557      - README.html file added to CVS repository
558      - runtime compiles properly under FreeBSD 3.X and 4.X
559    
560    ----------------------------------------------------------------------
561    Name: Matthias Blume
562    Date: 2001/07/10 17:30:00 EDT
563    Tag: Release_110_34
564    Description:
565    
566    New version number (110.34). New bootfiles.
567    
568    ----------------------------------------------------------------------
569    Name: Matthias Blume
570    Date: 2001/07/09 16:00:00 EDT
571    Tag: blume-20010709-more-varargs
572    Description:
573    
574    I changed the handling of varargs in ml-nlffigen again:
575    The ellipsis ... will now simply be ignored (with an accompanying warning).
576    
577    The immediate effect is that you can actually call a varargs function
578    from ML -- but you can't actually supply any arguments beyond the ones
579    specified explicitly.  (For example, you can call printf with its format
580    string, but you cannot pass additional arguments.)
581    
582    This behavior is only marginally more useful than the one before, but
583    it has the advantage that a function or, more importantly, a function
584    type never gets dropped on the floor, thus avoiding follow-up problems with
585    other types that refer to the offending one.
586    
587    ----------------------------------------------------------------------
588    Name: Matthias Blume
589    Date: 2001/07/09 11:25:00 EDT
590    Tag: blume-20010709-varargs
591    Description:
592    
593    1. ckit-lib.cm now exports structure Error
594    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
595       with a warning accompanied by a source location.  Moreover, it
596       merely skips the offending function or type and proceeds with the
597       rest of its work.u  As a result, one can safely feed C code containing
598       "..." to ml-nlffigen.
599    3. There are some internal improvements to CM, providing slightly
600       more general string substitutions in the tools subsystem.
601    
602    ----------------------------------------------------------------------
603    Name: Matthias Blume
604    Date: 2001/06/27 15:10:00 EDT
605    Tag: blume-20010627-concur
606    Description:
607    
608    Fixed a small bug in CM's handling of parallel compilation.
609    (You could observe the bug by Control-C-interrupting an ordinary
610    CMB.make or CM.stabilize and then attaching some compile servers.
611    The result was that all of a sudden the previously interrupted
612    compilation would continue on its own.  This was because of
613    an over-optimization: CM did not bother to clean out certain queues
614    when no servers were attached "anyway", resulting in the contents
615    of these queues to grab control when new servers did get attached.)
616    
617    There is also another minor update to the CM manual.
618    
619    ----------------------------------------------------------------------
620    Name: Matthias Blume
621    Date: 2001/06/26 16:15:00 EDT
622    Tag: blume-20010626-cmdoc
623    Description:
624    
625    Minor typo fixed in CM manual (syntax diagram for libraries).
626    
627    ----------------------------------------------------------------------
628    Name: Matthias Blume
629    Date: 2001/06/25 22:55:00 EDT
630    Tag: blume-20010625-x86pc
631    Description:
632    
633    Fixed a nasty bug in the X86 assembly code that caused signal
634    handlers to fail (crash) randomly.
635    
636    ----------------------------------------------------------------------
637    Name: Matthias Blume
638    Date: 2001/06/25 12:05:00 EDT
639    Tag: blume-20010625-nlffigen
640    Description:
641    
642    This update fixes a number of minor bugs in ml-nlffigen as reported by
643    Nick Carter <nbc@andrew.cmu.edu>.
644    
645      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
646      2. Default names for generated files are now derived from the name of
647         the C file *without its directory*.  In particular, this causes generated
648         files to be placed locally even if the C file is in some system directory.
649      3. Default names for generated signatures and structures are also derived
650         from the C file name without its directory.  This avoids silly things
651         like "structure GL/GL".
652         (Other silly names are still possible because ml-nlffigen does not do
653          a thorough check of whether generated names are legal ML identifiers.
654          When in doubt, use command line arguments to force particular names.)
655    
656    ----------------------------------------------------------------------
657    Name: Matthias Blume
658    Date: 2001/06/21 12:25:00 EDT
659    Tag: blume-20010621-eXene
660    Description:
661    
662    eXene now compiles and (sort of) works again.
663    
664    The library name (for version > 110.33) is $/eXene.cm.
665    
666    I also added an new example in src/eXene/examples/nbody.  See the
667    README file there for details.
668    
669    ----------------------------------------------------------------------
670    Name: Matthias Blume
671    Date: 2001/06/20 16:40:00 EDT
672    Tag: blume-20010620-cml
673    Description:
674    
675    CML now compiles and works again.
676    
677    Libraries (for version > 110.33):
678    
679      $cml/cml.cm            Main CML library.
680      $cml/basis.cm          CML's version of $/basis.cm.
681      $cml/cml-internal.cm   Internal helper library.
682      $cml/core-cml.cm       Internal helper library.
683      $cml-lib/trace-cml.cm  Tracing facility.
684      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
685    
686    The installer (config/install.sh) has been taught how to properly
687    install this stuff.
688    
689    ----------------------------------------------------------------------
690    Name: Matthias Blume
691    Date: 2001/06/19 17:55:00 EDT
692    Tag: blume-20010619-instantiate
693    Description:
694    
695    This un-breaks the fix for bug 1432.
696    (The bug was originally fixed in 110.9 but I broke it again some
697    time after that.)
698    
699    ----------------------------------------------------------------------
700    Name: Matthias Blume
701    Date: 2001/06/19 17:25:00 EDT
702    Tag: blume-20010619-signals
703    Description:
704    
705    This should (hopefully) fix the long-standing signal handling bug.
706    (The runtime system was constructing a continuation record with an
707    incorrect descriptor which would cause the GC to drop data on the floor...)
708    
709    ----------------------------------------------------------------------
710    Name: Matthias Blume
711    Date: 2001/06/15 15:05:00 EDT
712    Tag: blume-20010615-moresparc
713    Description:
714    
715    Here is a short late-hour update related to Sparc c-calls:
716    
717     -- made handling of double-word arguments a bit smarter
718    
719     -- instruction selection phase tries to collapse certain clumsily
720        constructed ML-Trees; typical example:
721    
722            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
723    
724        This currently has no further impact on SML/NJ since mlriscGen does
725        not seem to generate such patterns in the first place, and c-calls
726        (which did generate them in the beginning) has meanwhile been fixed
727        so as to avoid them as well.
728    
729    ----------------------------------------------------------------------
730    Name: Matthias Blume
731    Date: 2001/06/15 15:05:00 EDT
732    Tag: blume-20010615-sparc
733    Description:
734    
735    The purpose of this update is to provide an implementation of NLFFI
736    on Sparc machines.
737    
738    Here are the changes in detail:
739    
740       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
741       the Sparc implementation of the c-calls API.
742       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
743       for accessing the ML frame.  Thus, we have a real frame pointer and
744       can freely modify %sp without need for an omit-frame-ptr phase.
745       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
746       this case.
747       * ml-nlffigen has been taught to produce code for different architectures
748       and calling conventions.
749       * In a way similar to what was done in the x86 case, the Sparc
750       backend uses its own specific extension to mltree.  (For example,
751       it needs to be able to generate UNIMP instructions which are part
752       of the calling convention.)
753       * ml-nlffi-lib was reorganized to make it more modular (in particular,
754       to make it easier to plug in new machine- and os-dependent parts).
755    
756    There are some other fairly unrelated bug fixes and cleanups as well:
757    
758       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
759       that they properly share their libraries with existing SML/NJ libraries.
760       * I fixed a minor cosmetic bug in CM, supressing certain spurious
761       follow-up error messages.
762       * Updates to CM/CMB documentation.
763    
764    TODO items:
765    
766       * MLRISC should use a different register as its asmTemp on the Sparc.
767         (The current %o2 is a really bad choice because it is part of the
768         calling conventions, so things might interfere in unexpected ways.)
769    
770    ----------------------------------------------------------------------
771    Name: Matthias Blume
772    Date: 2001/06/07
773    Tag: blume-20010607-calls
774    Description:
775    
776    A number of internal changes related to C calls and calling conventions:
777    
778    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
779       number of bytes popped implicitly (by the callee).  In most cases
780       this field is 0 but on x86/win32 it is some non-zero value.  This
781       is information provided for the benefit of the "omit-frameptr" pass.
782    2. The CALL instruction on the x86 carries a similar "pops" field.
783       The instruction selection phase copies its value from the ML-Tree
784       CALL statement.
785    3. On all other architectures, the instruction selection phase checks
786       whether "pops=0" and complains if not.
787    4. The c-calls implementation for x86 now accepts two calling conventions:
788       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
789       up after the call and pops is set to 0.  For "stdcall", the caller
790       does nothing, leaving the cleanup to the callee; pops is set to
791       the number of bytes that were pushed onto the stack.
792    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
793       distinguish between "ccall" and "stdcall".
794    6. The UNIMP instruction has been added to the supported Sparc instruction
795       set. (This is needed for implementing the official C calling convention
796       on this architecture.)
797    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
798       work with the latest CM.
799    
800    ----------------------------------------------------------------------
801    Name: Matthias Blume
802    Date: 2001/06/05 15:10:00 EDT
803    Tag: blume-20010605-cm-index
804    Description:
805    
806    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
807    
808    1. CM can now generate "index files".  These are human-readable files
809       that list on a per-.cm-file basis each toplevel symbol defined or
810       imported.  The location of the index file for
811       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
812       To enable index-file generation, set CM.Control.generate_index to true
813       or export an environment-symbol: export CM_GENERATE_INDEX=true.
814    
815       The CM manual has been updated accordingly.
816    
817    2. I made some slight modifications to the c-calls API in MLRISC.
818    
819         a) There is now a callback to support saving/restoring of
820            dedicated but caller-save registers around the actual call
821            instruction.
822         b) One can optionally specify a comment-annotation for the
823            call instruction.
824    
825    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
826       (For example, the comment annotation shows the C prototype of
827        the function being called.)
828    
829    ----------------------------------------------------------------------
830    Name: Matthias Blume
831    Date: 2001/06/01 13:30:00 EDT
832    Tag: blume-20010601-nlffi-cleanup
833    Description:
834    
835    This is mostly a cleanup of MLFFI stuff:
836    
837       - some signature files have been put into a more exposed place
838       - the ugly 'f type parameter is gone (simplifies types tremendously!)
839       - ml-nlffigen changed accordingly
840       - tutorial updated
841    
842    Other changes:
843    
844       - author's affiliation in CM manual(s) updated
845       - some more recognized keywords added to Allen's sml.sty
846    
847    ----------------------------------------------------------------------
848    Name: Matthias Blume
849    Date: 2001/05/25 15:30:00 EDT
850    Tag: blume-20010525-iptr
851    Description:
852    
853      - put the official 110.33-README (as it appears on the ftp server) under
854        CVS
855      - fixed a small bug related to incomplete pointer types in
856        ml-nlffigen
857      - small cosmetic change to the ml-nlffi-lib's "arr" type constructor
858        (it does not need the 'f type parameter)
859    
860    ----------------------------------------------------------------------
861    Name: Matthias Blume
862    Date: 2001/05/23 14:30:00 EDT
863    Tag: Release_110_33
864    Description:
865    
866    New version number (110.33).  New bootfiles.
867    
868    ----------------------------------------------------------------------
869    Name: Matthias Blume
870    Date: 2001/05/22 18:06:00 EDT
871    Tag: blume-20010522-targets
872    Description:
873    
874    Made install.sh use file config/targets.customized if it exists, falling
875    back to config/targets if it doesn't.  This way one can have a customized
876    version of the targets file without touching the "real thing", thus
877    eliminating the constant fear of accidentally checking something bogus
878    back into the CVS repository...  (File config/targets.customized must
879    not be added to the repository!)
880    
881    ----------------------------------------------------------------------
882    Name: Matthias Blume
883    Date: 2001/05/22 16:30:00 EDT
884    Tag: blume-20010522-minitut
885    Description:
886    
887    1. Bug fix in ml-nlffigen; now (hopefully) correctly handling
888       struct returns.
889    2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt.  This is some very
890       incomplete, preliminary documentation for NLFFI.
891    
892    ----------------------------------------------------------------------
893    Name: Matthias Blume
894    Date: 2001/05/14 11:30:00 EDT
895    Tag: blume-20010514-script
896    Description:
897    
898    Some bugs in install script fixed.
899    
900    In addition to that I also made a slight change to the NLFFI API:
901    Functors generated by ml-nlffigen now take the dynamic library as a
902    straight functor argument, not as a suspended one.  (The original
903    functor code used to force the suspension right away anyway, so there
904    was nothing gained by this complication of the interface.)
905    
906    ----------------------------------------------------------------------
907    Name: Matthias Blume
908    Date: 2001/05/11 14:35:00 EDT
909    Tag: blume-20010511-ml-nlffi
910    Description:
911    
912    I finally took the plunge and added my new FFI code to the main
913    repository.  For x86-linux it is now ready for prime-time.
914    
915    There are two new subdirectories of "src":
916    
917      - ml-nlffi-lib:
918           The utility library for programs using the FFI interface.
919           Here is the implementation of $/c.cm and its associated low-level
920           partners $/c-int.cm and $/memory.cm.
921      - ml-nlffigen:
922           A stand-alone program for generating ML glue code from C source
923           code.
924    
925    Building ml-nlffigen requires $/ckit-lib.cm.
926    
927    The config/install.sh script has been updates to do the Right Thing
928    (hopefully).
929    
930    Notice that the source tree for the C-Kit will not be put under "src"
931    but directly under the installation root directory.  (This is the
932    structure that currently exists on the CVS server when you check out
933    module "sml".)  Fortunately, config/install.sh knows about this oddity.
934    
935    Bugs: No documentation yet.
936    
937    ----------------------------------------------------------------------
938    Name: Matthias Blume
939    Date: 2001/05/09 16:35:00 EDT
940    Tag: blume-20010509-cpscontract
941    Description:
942    
943    Fixed a bug in the accounting code in cpsopt/contract.sml.  (The
944    wrapper/unwrapper elimination did not decrement usage counts and some
945    dead variables got overlooked by the dead-up logic.)
946    
947    ----------------------------------------------------------------------
948    Name: Lal George
949    Date: 2001/05/08  17:26:09 EDT
950    Tag: george-20010508-omit-frameptr
951    Description:
952    
953    Changes to implement the omit-frame-pointer optimization to support
954    raw C calls. For now, there is only support on the Intel x86, but
955    other architectures will follow as more experience is gained with this.
956    
957    
958    ----------------------------------------------------------------------
959    Name: Matthias Blume
960    Date: 2001/05/07 14:40:00 EDT
961    Tag: blume-20010507-proxies
962    Description:
963    
964    I made into "proxy libraries" all libraries that qualify for such a
965    change.  (A qualifying library is a library that has another library or
966    groups as its sole member and repeats that member's export list
967    verbatim.  A proxy library avoids this repetition by omitting its export
968    list, effectively inheriting the list that its (only) member exports.
969    See the CM manual for more explanation.)
970    The main effect is that explicit export lists for these libraries
971    do not have to be kepts in sync, making maintenance a bit easier.
972    
973    I also added copyright notices to many .cm-files.
974    
975    Last but not least, I made a new set of bootfiles.
976    
977    ----------------------------------------------------------------------
978    Name: Matthias Blume
979    Date: 2001/05/04 17:00:00 EDT
980    Tag: blume-20010504-cm-lsplit
981    Description:
982    
983    0. John merged pending changes to $/smlnj-lib.cm
984    
985    1. Allen's previous change accidentally backed out of one of Lal's
986       earlier changes.  I undid this mistake (re-introducing Lal's change).
987    
988    2. I used the new topOrder' function from graph-scc.sml (from $/smlnj-lib.cm)
989       within the compiler where applicable.  There is some code simplification
990       because of that.
991    
992    3. The "split" phase (in FLINT) is now part of the default list of phases.
993       Compiler.Control.LambdaSplitting.* can be used to globally control the
994       lambda-splitting (cross-module-inlining) engine.  In addition to that,
995       it can now also be controlled on a per-source basis: CM has been taught
996       a new tool parameter applicable to ML source files.
997    
998       - To turn lambda-splitting off completely:
999            local open Compiler.Control.LambdaSplitting in
1000                val _ = set Off
1001            end
1002       - To make "no lambda-splitting" the global default (but allow per-source
1003         overriding); this is the initial setting:
1004            local open Compiler.Control.LambdaSplitting in
1005                val _ = set (Default NONE)
1006            end
1007       - To make "lambda-splitting with aggressiveness a" the global default
1008         (and allow per-source overriding):
1009            local open Compiler.Control.LambdaSplitting in
1010                val _ = set (Default (SOME a))
1011            end
1012    
1013       - To turn lambda-splitting off for a given ML souce file (say: a.sml)
1014         write (in the respective .cm-file):
1015            a.sml (lambdasplitting:off)
1016       - To turn lambda-splitting for a.sml on with minimal aggressiveness:
1017            a.sml (lambdasplitting:on)
1018       - To turn lambda-splitting for a.sml on with aggressiveness <a> (where
1019         <a> is a decimal non-negative integer):
1020            a.sml (lambdasplitting:<a>)
1021       - To turn lambda-splitting for a.sml on with maximal aggressiveness:
1022            a.sml (lambdasplitting:infinity)
1023       - To use the global default for a.sml:
1024            a.sml (lambdasplitting:default)
1025         or simply
1026            a.sml
1027    
1028    ----------------------------------------------------------------------
1029    Name: Allen Leung
1030    Date: 2001/05/04 01:57:00 EDT
1031    Tag: leunga-20010504-sync
1032    Description:
1033    
1034      MLRISC features.
1035    
1036      1. Fix to CMPXCHG instructions.
1037      2. Changed RA interface to allow annotations in callbacks.
1038      3. Added a new method to the stream interface to allow annotations updates.
1039    
1040    ----------------------------------------------------------------------
1041    Name: Matthias Blume
1042    Date: 2001/05/01 11:45:00 EDT
1043    Tag: blume-20010501-pcedittmp
1044    Description:
1045    
1046    Changed install.sh to use the current working directory instead of
1047    /usr/tmp for a temporary file (pcedittmp).  The previous choice
1048    of /usr/tmp caused trouble with MacOS X because of file premission
1049    problems.
1050    
1051    ----------------------------------------------------------------------
1052    Name: Matthias Blume
1053    Date: 2001/04/20 11:10:00 EDT
1054    Tag: blume-20010420-inMLflag
1055    Description:
1056    
1057     - added vp_limitPtrMask to vproc-state.h
1058       (for use by the raw-C-calls mechanism to implement proper interrupt
1059        handling)
1060     - made the ML compiler aware of various data-structure offsets so it
1061       can generate code for accessing the vp_inML flag and vp_limitPtrMask
1062     - tweaked mlriscGen.sml to have it emit interrupt-handling code for
1063       raw C-calls
1064    
1065    ----------------------------------------------------------------------
1066    Name: Lal George
1067    Date: 2001/04/20 09:15:28 EDT
1068    Tag: george-20010420-macosX
1069    Description:
1070    
1071     - Changes to port to Mac OS X; Darwin.
1072    
1073     - In the process I found that sqrt was broken on the PPC, because the
1074       fsqrt instruction is not implemented.
1075    
1076    ----------------------------------------------------------------------
1077    Name: Matthias Blume
1078    Date: 2001/04/18 12:45:00 EDT
1079    Tag: blume-20010418-ccalls
1080    Description:
1081    
1082     - fixed two off-by-4 errors in the x86-specific c-calls implementation
1083       (this bug prevented structure arguments containing pointers from being
1084        passed correctly)
1085     - changed the raw-C-call code in mlriscGen.sml in such a way that
1086       structure arguments are represented as a pointer to the beginning
1087       of the structure (instead of having a series of synthesized arguments,
1088       one for each structure member)
1089    
1090     - made makeml script's verbosity level configurable via environment
1091       variable (MAKEML_VERBOSITY)
1092    
1093     - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
1094       in rawmem-x86.sml; we are now using the real thing
1095    
1096    ----------------------------------------------------------------------
1097    Name: Matthias Blume
1098    Date: 2001/03/22 16:25:00 EST
1099    Tag: blume-20010322-bootfiles
1100    Description:
1101    
1102    Created a new set of bootfiles (for your automatic installation convenience).
1103    
1104    ----------------------------------------------------------------------
1105    Name: Matthias Blume
1106    Date: 2001/03/22 15:10:00 EST
1107    Tag: blume-20010322-rawmem-parcm
1108    Description:
1109    
1110    1. All "raw memory access" primitives for the new FFI are implemented now
1111       (at least on the x86).
1112    2. Some further cleanup of CM's parallel make mechanism.
1113    
1114    ----------------------------------------------------------------------
1115    Name: Matthias Blume
1116    Date: 2001/03/19 17:53:00 EST
1117    Tag: blume-20010319-parallel
1118    Description:
1119    
1120    Parallel make (using compile servers) now works again.
1121    
1122    To this end, CM.stabilize and CMB.make have been modified to work in
1123    two passes when compile servers are attached:
1124       1. Compile everything, do not perform stabilization; this pass
1125          uses compile servers
1126       2. Stabilize everything; this pass does not use compile servers
1127    If there are no compile servers, the two passes are combined into one
1128    (as before).  Splitting the passes increases the inherent parallelism
1129    in the dependency graph because the entire graph including all
1130    libraries is available at the same time.  This, in turn, improves
1131    server utilization.  The downside is that the master process will
1132    have to do some extra work after compilation is done (because for
1133    technical reasons it must re-read all the binfiles during stabilization).
1134    
1135    ----------------------------------------------------------------------
1136    Name: Matthias Blume
1137    Date: 2001/03/16 12:22:00 EST
1138    Tag: blume-20010316-bootfiles
1139    Description:
1140    
1141    Created a new set of bootfiles (for your automatic installation convenience).
1142    
1143    ----------------------------------------------------------------------
1144    Name: Matthias Blume
1145    Date: 2001/03/16 11:00:00 EST
1146    Tag: blume-20010316-MLTREE-fixup
1147    Description:
1148    
1149    This is a minor fixup for an (untagged) earlier commit by Allen.
1150    (A file was missing).
1151    
1152    ----------------------------------------------------------------------
1153    Name: Allen Leung
1154    Date: Mon Mar  5 18:54:57 EST 2001
1155    Tag: leunga-20010305-cut-support
1156    
1157    1. New support for alternative control-flow in MLTREE.
1158       Currently we support
1159    
1160          FLOW_TO(CALL ...., [k1,...,kn])
1161    
1162       This is needed for 'cuts to' in C-- and try/handle-like constructs
1163       in Moby
1164    
1165       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
1166    
1167    2. Register Allocator
1168    
1169       Changes in interface [from Fermin, John]
1170    
1171    3. Alpha 8-bit SLL support [Fermin]
1172    
1173    4. All architectures
1174    
1175       A new module (ClusterExpandCopies) for expanding parallel copies.
1176    
1177    ----------------------------------------------------------------------
1178    Name: Allen Leung
1179    Date: 2001/02/27 23:07:00 EST
1180    Tag: leunga-20010227-minor-stuff
1181    
1182    1. Alpha bug fix for CMOVNE
1183    2. Handle mltree COND(..,FCMP ...,...)
1184    3. Bug fix in simplifier
1185    
1186    ----------------------------------------------------------------------
1187    Name: Matthias Blume
1188    Date: 2001/01/30 17:50:00 EST
1189    Tag: blume-20010130-sync
1190    Description:
1191    
1192    This is just a minor update to sync my devel branch with the main brach.
1193    The only visible change is the addition of some README files.
1194    
1195    ----------------------------------------------------------------------
1196    Name: Matthias Blume
1197    Date: 2001/01/12 23:30:00 JST
1198    Tag: blume-20010112-bootfiles
1199    Description:
1200    
1201    Made a new set of bootfiles that goes with the current state of the
1202    repository.
1203    
1204    ----------------------------------------------------------------------
1205    Name: Matthias Blume
1206    Date: 2001/01/12 21:20:00 JST
1207    Tag: blume-20010112-sync
1208    Description:
1209    
1210    I am just flushing out some minor changes that had accumulated in
1211    my private branch in order to sync with the main tree.  (This is
1212    mainly because I had CVS trouble when trying to merge _into_ my
1213    private branch.)
1214    
1215    Most people should be completely unaffected by this.
1216    
1217    ----------------------------------------------------------------------
1218    Name: Allen Leung
1219    Date: Thu Jan 11 21:03:00 EST 2001
1220    Tag: leunga-20010111-labexp=mltree
1221    Description:
1222    
1223    1.  Removed the type LabelExp and replace it by MLTree.
1224    2.  Rewritten mltree-simplify with the pattern matcher tool.
1225    3.  There were some bugs in alpha code generator which would break
1226        64-bit code generation.
1227    4.  Redo the tools to generate code with the
1228    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
1229        are now generated by perl scripts.
1230    
1231    ----------------------------------------------------------------------
1232    Name: Matthias Blume
1233    Date: 2001/01/10 21:55:00 JST
1234    Tag: blume-20010110-rcc
1235    Description:
1236    
1237    The RCC stuff now seems to work (but only on the x86).
1238    This required hacking of the c-calls interface (and -implementation) in
1239    MLRISC.
1240    
1241    Normal compiler users should be unaffected.
1242    
1243    ----------------------------------------------------------------------
1244    Name: Matthias Blume
1245    Date: 2001/01/09 01:20:00 JST
1246    Tag: blume-20010109-rcc
1247    Description:
1248    
1249    This is a fairly big patch, flushing out a large number of pending
1250    changes that I made to my development copy over the last couple of days.
1251    
1252    Of practical relevance at this moment is a workaround for a pickling
1253    bug that Allen ran into the other day.  The cause of the bug itself is
1254    still unknown and it might be hard to fix it properly, but the
1255    workaround has some merits of its own (namely somewhat reducing pickling
1256    overhead for certain libraries).  Therefore, I think this solution should
1257    be satisfactory at this time.
1258    
1259    The rest of the changes (i.e., the vast majority) has to do with my
1260    ongoing efforts of providing direct support for C function calls from
1261    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
1262    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
1263    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
1264    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
1265    handle RCC.
1266    
1267    The last part (the changes to mlriscGen.sml) are still known to be
1268    wrong on the x86 and not implemented on all other architectures.  But
1269    the infrastructure is in place. I had to change a few functor
1270    signatures in the backend to be able to route the CCalls interface
1271    from MLRISC there, and I had to specialize the mltree type (on the
1272    x86) to include the necessary extensions. (The extensions themselves
1273    were already there and redy to go in MLRISC/x86).
1274    
1275    Everything should be very happy as soon as someone helps me with
1276    mlriscGen.sml...
1277    
1278    In any case, nothing of this should matter to anyone as long as the
1279    new primop is not being used (which is going to be the case unless you
1280    find it where I hid it :). The rest of the compiler is completely
1281    unaffected.
1282    
1283    ----------------------------------------------------------------------
1284    Name: Matthias Blume
1285    Date: 2001/01/05 00:30:00 JST
1286    Tag: blume-20010105-primops
1287    Description:
1288    
1289    Added some experimental support for work that I am doing right now.
1290    These changes mostly concern added primops, but there is also a new
1291    experimental C library in the runtime system (but currently not enabled
1292    anywhere except on Linux/X86).
1293    
1294    In the course of adding primops (and playing with them), I discovered that
1295    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
1296    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
1297    To recover, I made type information in INL_PRIM mandatory and changed
1298    prim.sml as well as built-in.sml accordingly.  The InLine structure now
1299    has complete, correct type information (i.e., no bottom types).
1300    
1301    Since all these changes mean that we need new binfiles, I also bumped the
1302    version number to 110.32.1.
1303    
1304    ----------------------------------------------------------------------
1305    Name: Matthias Blume
1306    Date: 2000/12/30 22:10:00 JST
1307    Tag: blume-20001230-various
1308    Description:
1309    
1310    Added proxy libraries for MLRISC and let MLRISC libraries refer
1311    to each other using path anchors.  (See CM manual for explanation.)
1312    
1313    Updated CM documentation.
1314    
1315    Fixed some bugs in CM.
1316    
1317    Implemented "proxy" libraries (= syntactic sugar for CM).
1318    
1319    Added "-quiet" option to makeml and changed runtime system accordingly.
1320    
1321    Added cleanup handler for exportML to reset timers and compiler stats.
1322    
1323    ----------------------------------------------------------------------
1324    Name: Lal George
1325    Date: 2000/12/22 22:22:58 EST 2000
1326    Tag: Release_110_32
1327    Description:
1328    
1329            Infinite precision used throughout MLRISC.
1330            see MLRISC/mltree/machine-int.sig
1331    
1332    ----------------------------------------------------------------------
1333    Name: Matthias Blume
1334    Date: 2000/12/22 23:16:00 JST
1335    Tag: blume-20001222-warn
1336    Description:
1337    
1338    Corrected wording and formatting of some CM warning message which I
1339    broke in my previous patch.
1340    
1341    ----------------------------------------------------------------------
1342    Name: Matthias Blume
1343    Date: 2000/12/22 21:20:00 JST
1344    Tag: blume-20001222-anchorenv
1345    Description:
1346    
1347    Fixed CM's handling of anchor environments in connection with CMB.make.
1348    
1349    ----------------------------------------------------------------------
1350    Name: Matthias Blume
1351    Date: 2000/12/22 13:15:00 JST
1352    Tag: blume-20001222-cleanup
1353    Description:
1354    
1355    Removed src/cm/ffi which does not (and did not) belong here.
1356    
1357    ----------------------------------------------------------------------
1358    Name: Matthias Blume
1359    Date: 2000/12/21 23:55:00 JST
1360    Tag: blume-20001221-exn
1361    Description:
1362    
1363    Probably most important: CM no longer silently swallows all exceptions
1364    in the compiler.
1365    Plus: some other minor CM changes.  For example, CM now reports some
1366    sizes for generated binfiles (code, data, envpickle, lambdapickle).
1367    
1368    ----------------------------------------------------------------------
1369    Name: Matthias Blume
1370    Date: 2000/12/15 00:01:05 JST
1371    Tag: blume-20001215-dirtool
1372    Description:
1373    
1374    - "dir" tool added.
1375    - improvements and cleanup to Tools structure
1376    - documentation updates
1377    
1378    ----------------------------------------------------------------------
1379    Name: Allen Leung
1380    Date: Thu Dec 14 03:45:24 EST 2000
1381    Description:
1382    Tag:  leunga-20001214-int-inf
1383    Description:
1384    
1385       In IntInf, added these standard functions, which are missing from our
1386    implementation:
1387    
1388        andb : int * int -> int
1389        xorb : int * int -> int
1390        orb  : int * int -> int
1391        notb : int -> int
1392         <<   : int * word -> int
1393        ~>>  : int * word -> int
1394    
1395       Not tested, I hope they are correct.
1396    
1397    ----------------------------------------------------------------------
1398    Name: Allen Leung
1399    Date: Fri Dec  8 19:23:26 EST 2000
1400    Description:
1401    Tag:  leunga-20001208-nowhere
1402    Description:
1403    
1404      Slight improvements to the 'nowhere' tool to handle OR-patterns,
1405    to generate better error messages etc.  Plus a brief manual.
1406    
1407    ----------------------------------------------------------------------
1408    Name: Lal George
1409    Date: 2000/12/08 09:54:02 EST 2000
1410    Tag: Release_110_31
1411    Description:
1412    
1413    - Version 110.31
1414    ----------------------------------------------------------------------
1415    Name: Allen Leung
1416    Date: Thu Dec  7 22:01:04 EST 2000
1417    Tag:  leunga-20001207-cell-monster-hack
1418    Description:
1419    
1420    Major MLRISC internal changes.  Affect all clients.
1421    Summary:
1422    
1423    1.  Type CELLS.cell = int is now replaced by a datatype.
1424        As a result, the old regmap is now gone.  Almost all interfaces
1425        in MLRISC change as a consequence.
1426    
1427    2.  A new brand version of machine description tool (v3.0) that generates
1428        modules expecting the new interface.  The old version is removed.
1429    
1430    3.  The RA interface has been further abstracted into two new functors.
1431        RISC_RA and X86RA.  These functors have much simpler interfaces.
1432        [See also directory MLRISC/demo.]
1433    
1434    4.  Some other new source->source code generation tools are available:
1435    
1436        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
1437        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
1438           I use this tool to generate the peephole optimizers---with the new
1439           cell type changes, peephole rules are becoming difficult to write
1440           without conditional pattern matching.
1441    
1442    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
1443        cover the entire MLRISC source tree so many things broke.
1444    
1445    6.  CM files have been moved to the subdirectory MLRISC/cm.
1446        They are moved because there are a lot of them and they clutter up the
1447        root dir.
1448    
1449    7.  More detailed documentation to come...
1450    
1451        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
1452        a makeml -rebuild first.  This is because of other other
1453        changes that Matthias has made (see below).
1454    
1455    
1456    ----------------------------------------------------------------------
1457    Name: Matthias Blume
1458    Date: 2000/11/30 23:12:00 JST
1459    Tag: blume-20001130-filereorg
1460    Description:
1461    
1462    Some manual updates and some file reorganizations in CM.
1463    
1464    ----------------------------------------------------------------------
1465    Name: Matthias Blume
1466    Date: 2000/11/24 17:45:00 JST
1467    Tag: blume-20001124-link
1468    Description:
1469    
1470    Drastically improved link traversal code for the case that the dynamic
1471    value was already loaded at bootstrap time.  As a result, CM and CMB
1472    now both load blazingly fast -- even on a very slow machine.  Also,
1473    memory consumption has been further reduced by this.
1474    
1475    Warning: The format of the PIDMAP file has changed.  THerefore, to
1476    bootstrap you have to do this:
1477    
1478    1. Run CMB.make
1479    2. Make a symbolic link for the boot directory:
1480         ln -s sml.boot.ARCH-OS xxx
1481    3. "Rebuild" the boot directory:
1482         ./makeml -boot xxx -rebuild sml ; rm xxx
1483    4. Boot normally:
1484          ./makeml
1485    
1486    ----------------------------------------------------------------------
1487    Name: Matthias Blume
1488    Date: 2000/11/21 21:20:00 JST
1489    Tag: blume-20001121-tools
1490    Description:
1491    
1492    Continued hacking on autoloading problem -- with success this time.
1493    Also changed tool-plugin mechanism.  See new CM manual.
1494    
1495    ----------------------------------------------------------------------
1496    Name: Matthias Blume
1497    Date: 2000/11/19 14:30:00 JST
1498    Tag:  blume-20001119-autoload
1499    Description:
1500    
1501    Some hacking to make autoloading faster.  Success for CMB, no success
1502    so far for CM.  There is a reduced structure CM' that autoloads faster.
1503    (This is a temporary, non-documented hack to be eliminated again when
1504    the general problem is solved.)
1505    
1506    ----------------------------------------------------------------------
1507    Name: Matthias Blume
1508    Date: 2000/11/17 14:10:00 JST
1509    Tag: blume-20001117-pickle-lib
1510    Description:
1511    
1512    1. Eliminated comp-lib.cm
1513    2. Made pickle-lib.cm
1514    3. Eliminated all uses of intset.sml (from comp-lib.cm)
1515    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
1516       equivalent constructs from smlnj-lib.cm (INtHashTable).
1517    5. Point 4. also goes for those uses of intmap.* in MLRISC.
1518       Duplicated intmap modules thrown out.
1519    6. Hunted down all duplicated SCC code and replaced it with
1520       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
1521    7. Rewrote Feedback module.
1522    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
1523       should be thrown out and equivalent modules from smlnj-lib.cm
1524       should be used (IntRedBlackSet, IntListSet, ...).
1525    
1526    Confirmed that compiler compiles to fixpoint.
1527    
1528    ----------------------------------------------------------------------
1529    Name: Allen Leung
1530    Date: 2000/11/10 18:00:00
1531    Tag: leunga-20001110-new-x86-fp
1532    
1533    A new x86 floating point code generator has been added.
1534    By default this is turned off.  To turn this on, do:
1535    
1536        CM.autoload "$smlnj/compiler.cm";
1537        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
1538    
1539    Changes:
1540    
1541    1.  Changed FTAN to FPTAN so that the assembly output is correct.
1542    2.  Changed the extension callback for FTANGENT to generate:
1543    
1544              fptan
1545              fstp  %st(0)
1546        instead of
1547              fptan
1548              fstpl ftempmem
1549    
1550    3.  Numerous assembly fixes for x86.
1551    
1552    5.  Cleaned up the machine code output module x86/x86MC.sml and added
1553        support for a whole bunch of instructions and addressing modes:
1554    
1555          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
1556          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
1557          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
1558          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
1559          fxch %st(n)
1560          fld %st(n)
1561          fst %st(n)
1562          fst mem
1563          fstp %st(n)
1564          fucom %st(n)
1565          fucomp %st(n)
1566    
1567        All these are now generated when the fast fp mode is turned on.
1568    
1569    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
1570    
1571    ----------------------------------------------------------------------
1572    Name: Matthias Blume
1573    Date: 2000/11/09 11:20:00 JST
1574    Tag: blume-20001109-scc
1575    Description:
1576    
1577    Eliminated some code duplication:
1578    
1579    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
1580       (Otherwise the functor is useless.)
1581    2. Used GraphSCCFn where SCCUtilFun was used previously.
1582    3. Got rid of SCCUtilFun (in comp-lib.cm).
1583    
1584    ----------------------------------------------------------------------
1585    Name: Lal George
1586    Date: 2000/11/06 09:02:21 EST 2000
1587    Tag: Release_110_30
1588    Description:
1589    
1590    - Version 110.30
1591    ----------------------------------------------------------------------
1592    Name: Matthias Blume
1593    Date: 2000/11/04 14:45:00
1594    Tag: blume-20001104-mlbuild
1595    Description:
1596    
1597    - Made ml-build faster on startup.
1598    - Documentation fixes.
1599    
1600    ----------------------------------------------------------------------
1601    Name: Matthias Blume
1602    Date: 2000/11/02 17:00:00 JST
1603    Tag: blume-20001102-condcomp
1604    Description:
1605    
1606    - Small tweaks to pickler -- new BOOTFILES!
1607    - Version bumped to 110.29.2.
1608    - Added conditional compilation facility to init.cmi (see comment there).
1609    ----------------------------------------------------------------------
1610    Name: Allen Leung
1611    Date: 2000/10/23 19:31:00
1612    Tag: leunga-20001023-demo-ra
1613    
1614    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
1615    2. Test programs for the graph library updated
1616    3. Some new MLRISC demo programs added
1617    
1618    ----------------------------------------------------------------------
1619    Name: Matthias Blume
1620    Date: 2000/08/31 22:15:00 JST
1621    Tag: blume-20001017-errmsg
1622    Description:
1623    
1624    More error message grief: Where there used to be no messages, there
1625    now were some that had bogus error regions.  Fixed.
1626    
1627    ----------------------------------------------------------------------
1628    Name: Matthias Blume
1629    Date: 2000/08/31 17:30:00 JST
1630    Tag: blume-20001017-v110p29p1
1631    Description:
1632    
1633    I made a version 110.29.1 with new bootfiles.
1634    
1635    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
1636              CM documentation changes and a small bugfix in CM's error reporting.
1637    
1638    ----------------------------------------------------------------------
1639    Name: Lal George
1640    Date: 2000/09/27 14:42:35 EDT
1641    Tag: george-20000927-nodestatus
1642    Description:
1643    
1644    Changed the type of the nodestatus, so that:
1645    
1646            SPILLED(~1)             is now SPILLED
1647            SPILLED(m) where m>=0   is now MEMREG(m)
1648            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
1649    
1650    ----------------------------------------------------------------------
1651    Name: Matthias Blume
1652    Date: 2000/09/07 14:45:00 JST
1653    Tag: blume-20000907-cmerrmsg
1654    Description:
1655    
1656    Small tweak to CM to avoid getting ML syntax error messages twice.
1657    
1658    ----------------------------------------------------------------------
1659    Name: Matthias Blume
1660    Date: 2000/08/31 18:00:00 JST
1661    Tag: blume-20000831-cvsbootfiles
1662    Description:
1663    
1664    New URL for boot files (because the 110.29 files on the BL server do
1665    now work correctly with my updated install scripts for yacc and lex).
1666    
1667    ----------------------------------------------------------------------
1668    Name: Matthias Blume
1669    Date: 2000/08/08 12:33:00 JST
1670    Tag: blume-20000808-manual
1671    Description:
1672    
1673    Tiny update to CM manual.
1674    
1675    ----------------------------------------------------------------------
1676    Name: Allen Leung
1677    Date: 2000/08/7 19:31:00
1678    Tag: leunga-20000807-a-whole-bunch-of-stuff
1679    
1680      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
1681    and Mobdy.
1682    
1683    1.  x86
1684    
1685       a.  Fixes to peephole module by John and Dan.
1686       b.  Assembly fix to SETcc by Allen.
1687       c.  Fix to c-call by John.
1688       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
1689       e.  Instruction selection optimization to SETcc as suggested by John.
1690    
1691           For example,
1692    
1693            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
1694    
1695           should generate:
1696    
1697            MOVL a, x
1698            SUBL b, x
1699            SHRL 31, x
1700    
1701    2.  IR stuff
1702    
1703         A bunch of new DJ-graph related algorithms added.  These
1704         speed up SSA construction.
1705    
1706    3.  SSA + Scheduling
1707    
1708         Added code for SSA and scheduling to the repository
1709    
1710    ----------------------------------------------------------------------
1711    Name: Lal George
1712    Date: 2000/07/27 11:53:14 EDT
1713    
1714    Tag: lal-20000727-linux-ppc
1715    Description:
1716    
1717     Made changes to support Linux PPC.
1718     p.s. I have confirmation that the 110.29 boot files work fine.
1719    
1720    ----------------------------------------------------------------------
1721    Name: Matthias Blume
1722    Date: 2000/07/27 17:40:00 JST
1723    Tag: blume-20000727-scripts
1724    Description:
1725    
1726    !!!! WARNING !!!!
1727    You must recompile the runtime system!
1728    !!!! WARNING !!!!
1729    
1730    This is basically another round of script-enhancements:
1731    
1732    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
1733       and undefine CM preprocessor symbols.
1734    
1735    2. ml-build avoids generating a new heap image if it finds that the
1736       existing one is still ok.  (The condition is that no ML file had to
1737       be recompiled and all ML files are found to be older that the heap
1738       file.)
1739    
1740       To make this work smoothly, I also hacked the runtime system as
1741       well as SMLofNJ.SysInfo to get access to the heap image suffix
1742       (.sparc-solaris, ...) that is currently being used.
1743    
1744       Moreover, the signature of CM.mk_standalone has changed.  See the
1745       CM manual.
1746    
1747    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
1748       CM manual for details.)
1749    
1750    4. More CM manual updates:
1751        - all of the above has been documented.
1752        - there is now a section describing the (CM-related) command line
1753          arguments that are accepted by the "sml" command
1754    
1755    ----------------------------------------------------------------------
1756    Name: Matthias Blume
1757    Date: 2000/07/25 16:20:00 JST
1758    Tag: blume-20000725-makedepend
1759    Description:
1760    
1761    Added a script called ml-makedepend.  This can be used in makefiles
1762    for Unix' make in a way very similar to the "makedepend" command for
1763    C.
1764    
1765    The script internally uses function CM.sources.
1766    
1767    Synopsis:
1768    
1769        ml-makedepend [-f makefile] cmfile targetname
1770    
1771    The default for the makefile is "makefile" (or "Makefile" should
1772    "makefile" not exist).
1773    
1774    ml-makedepend adds a cmfile/targetname-specific section to this
1775    makefile (after removing the previous version of this section).  The
1776    section contains a single dependency specification with targetname on
1777    the LHS (targetname is an arbitrary name), and a list of files derived
1778    from the cmfile on the RHS.  Some of the files on the RHS are
1779    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
1780    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
1781    path names.  The makefile writer is responsible for making sure that
1782    these variables have correct at the time "make" is invoked.
1783    
1784    ----------------------------------------------------------------------
1785    Name: Matthias Blume
1786    Date: 2000/07/22 23:30:00 JST
1787    Tag: blume-20000722-urlupdate
1788    Description:
1789    
1790    Changed BOOT and config/srcarchiveurl to point to BL server:
1791    
1792        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
1793    
1794    ----------------------------------------------------------------------
1795    Name: Matthias Blume
1796    Date: 2000/07/18 18:00:00 JST
1797    Tag: blume-20000718-Version_110_29
1798    Description:
1799    
1800    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
1801    
1802    2. Updated config/version to 110.29
1803    
1804    3. Updated config/srcarchiveurl
1805    
1806    3. New boot files!
1807       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
1808    
1809    ----------------------------------------------------------------------
1810    Name: Matthias Blume
1811    Date: 2000/07/11 13:58:00 JST
1812    Tag: blume-20000711-doctypo
1813    Description:
1814    
1815    Fixed a few typos in CM manual.
1816    
1817    ----------------------------------------------------------------------
1818    Name: Allen Leung
1819    Date: 2000/06/15 00:38:00
1820    Tag: leunga-20000704-sparc-x86
1821    
1822    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
1823    2. fix to x86 RET bug [found by Dan Grossman]
1824    3. sparc assembly bug fix for ticc instructions [found by Fermin]
1825    
1826       Affects c-- and moby only
1827    
1828    ----------------------------------------------------------------------
1829    Name: Matthias Blume
1830    Date: 2000/07/04 15:26:00
1831    Tag: blume-20000704-trigger
1832    Description:
1833    
1834    1. Improvements to CM manual.
1835    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
1836       of getting a back-trace.  The function, when called, raises an
1837       internal exception which explicitly carries the full back-trace history,
1838       so it is unaffected by any intervening handle-raise pairs ("trivial"
1839       or not).  The interactive loop will print that history once it arrives
1840       at top level.
1841       Short of having all exceptions implicitly carry the full history, the
1842       recommended way of using this facility is:
1843         - compile your program with instrumentation "on"
1844         - run it, when it raises an exception, look at the history
1845         - if the history is "cut off" because of some handler, go and modify
1846           your program so that it explicitly calls BTrace.trigger
1847         - recompile (still instrumented), and rerun; look at the full history
1848    
1849    ----------------------------------------------------------------------
1850    Name: Matthias Blume
1851    Date: 2000/07/03 15:36:00 JST
1852    Tag: blume-20000702-manual
1853    Description:
1854    
1855    Small corrections and updates to CM manual.
1856    
1857    ----------------------------------------------------------------------
1858    Name: Matthias Blume
1859    Date: 2000/06/29 16:04:00 JST
1860    Tag: blume-20000629-yacctool
1861    Description:
1862    
1863    Changes:
1864    
1865    1. Class "mlyacc" now takes separate arguments to pass options to
1866       generated .sml- and .sig-files independently.
1867    2. Corresponding CM manual updates.
1868    3. BTrace module now also reports call sites.  (However, for loop clusters
1869       it only shows from where the cluster was entered.)  There are associated
1870       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
1871    
1872    ----------------------------------------------------------------------
1873    Name: Matthias Blume
1874    Date: 2000/06/27 16:51:00 JST
1875    Tag: blume-20000627-noweb
1876    Description:
1877    
1878    Changes:
1879    
1880     1. Implemented "subdir" and "witness" options for noweb tool.
1881        This caused some slight internal changes in CM's tool implementation.
1882     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
1883        some remaining issues from earlier path anchor changes.
1884     3. Updated CM manual accordingly.
1885    
1886     4. Changed implementation of back-tracing so that I now consider it
1887        ready for prime-time.
1888    
1889        In particular, you don't have to explicitly trigger the back-trace
1890        anymore.  Instead, if you are running BTrace-instrumented code and
1891        there is an uncaught exception (regardless of whether or not it was
1892        raised in instrumented code), the top-level evalloop will print
1893        the back-trace.
1894    
1895        Features:
1896    
1897          - Instrumented and uninstrumented code work together seemlessly.
1898            (Of course, uninstrumented code is never mentioned in actual
1899             back-traces.)
1900    
1901          - Asymptotic time- and space-complexity of instrumented code is
1902            equal to that of uninstrumented code.  (This means that
1903            tail-recursion is preserved by the instrumentation phase.)
1904    
1905          - Modules whose code has been instrumented in different sessions
1906            work together without problem.
1907    
1908          - There is no penalty whatsoever on uninstrumented code.
1909    
1910          - There is no penalty on "raise" expressions, even in
1911            instrumented code.
1912    
1913        A potential bug (or perhaps it is a feature, too):
1914    
1915          A back-trace reaches no further than the outermost instrumented
1916          non-trivial "raise".  Here, a "trivial" raise is one that is the
1917          sole RHS of a "handle" rule.  Thus, back-traces reach trough
1918    
1919               <exp> handle e => raise e
1920    
1921          and even
1922    
1923               <exp> handle Foo => raise Bar
1924    
1925          and, of course, through
1926    
1927               <exp> handle Foo => ...
1928    
1929         if the exception was not Foo.
1930    
1931         Back-traces always reach right through any un-instrumented code
1932         including any of its "handle" expressions, trivial or not.
1933    
1934       To try this out, do the following:
1935    
1936         - Erase all existing binfiles for your program.
1937           (You may keep binfiles for those modules where you think you
1938            definitely don't need back-tracing.)
1939         - Turn on back-trace instrumentation:
1940              SMLofNJ.Internals.BTrace.mode (SOME true);
1941         - Recompile your program.  (I.e., run "CM.make" or "use".)
1942         - You may now turn instrumentation off again (if you want):
1943              SMLofNJ.Internals.BTrace.mode (SOME false);
1944         - Run your program as usual.  If it raises an exception that
1945           reaches the interactive toplevel, then a back-trace will
1946           automatically be printed.  After that, the toplevel loop
1947           will print the exception history as usual.
1948    
1949    ----------------------------------------------------------------------
1950    Name: Matthias Blume
1951    Date: 2000/06/26 09:56:46 JST
1952    Tag: blume-20000626-setup
1953    Description:
1954    
1955    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
1956          ML code before and after compiling a file (e.g., to set compiler
1957          flags)
1958    
1959    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
1960              - associated changes to btrace.sml (BTrace instrumentation pass)
1961              - cleaner implementation of btimp.sml (BTrace tracing and report
1962                module)
1963    
1964    CM manual: * new path encoding documented
1965               * description of setup-parameter to "sml" added
1966    
1967    The biggest user-visible change to back-tracing is that it is no
1968    longer necessary to compile all traced modules within the same
1969    session.  (This was a real limitation.)
1970    
1971    ----------------------------------------------------------------------
1972    Name: Matthias Blume
1973    Date: 2000/06/24 12:40:00 JST
1974    Tag: blume-20000624-startup
1975    Description:
1976    
1977    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
1978    bit too often -- to put it mildly. :)
1979    
1980    ----------------------------------------------------------------------
1981    Name: Matthias Blume
1982    Date: 2000/06/23 18:20:00 JST
1983    Tag: blume-20000623-btrace
1984    Description:
1985    
1986    This updates adds a backtrace facility to aid programmers in debugging
1987    their programs.  This involves the following changes:
1988    
1989    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
1990       keeping track of the current call stack.  When programs are compiled
1991       in a special mode, the compiler will insert calls to these hooks
1992       into the user program.
1993       "Hook" means that it is possible for different implementations of
1994       back-tracing to register themselves (at different times).
1995    
1996    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
1997       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
1998       It can be turned on using this call:
1999         SMLofNJ.Internals.BTrace.mode (SOME true);
2000       Turning it off again:
2001         SMLofNJ.Internals.BTrace.mode (SOME false);
2002       Querying the current status:
2003         SMLofNJ.Internals.BTrace.mode NONE;
2004       Annotated programs are about twice as big as normal ones, and they
2005       run a factor of 2 to 4 slower with a dummy back-trace plugin (one
2006       where all hooks do nothing).  The slowdown with a plugin that is
2007       actually useful (such as the one supplied by default) is even greater,
2008       but in the case of the default plugin it is still only an constant
2009       factor (amortized).
2010    
2011    3. system/Basis/Implementation/NJ/internals.{sig,sml} have been augmented
2012       with a sub-structure BTrace for controlling back-tracing.  In particular,
2013       the above-mentioned function "mode" controls whether the annotation
2014       phase is invoked by the compiler.  Another important function is
2015       "trigger": when called it aborts the current execution and causes
2016       the top-level loop to print a full back-trace.
2017    
2018    4. compiler/MiscUtil/profile/btimp.sml is the current default plugin
2019       for back-tracing.  It keeps track of the dynamic call stack and in
2020       addition to that it keeps a partial history at each "level" of that
2021       stack.  For example, if a tail-calls b, b tail-calls c, and c tail-calls
2022       d and b (at separate times, dynamically), then the report will show:
2023    
2024       GOTO   d
2025             /c
2026       GOTO  \b
2027       CALL   a
2028    
2029       This shows that there was an initial non-tail call of a, then a
2030       tail-call to b or c, looping behavior in a cluster of functions that
2031       consist of b and c, and then a goto from that cluster (i.e., either from
2032       b or from c) to d.
2033    
2034       Note that (depending on the user program) the amount of information
2035       that the back-trace module has to keep track of at each level is bounded
2036       by a constant.  Thus, the whole implementation has the same asymptotical
2037       complexity as the original program (both in space and in time).
2038    
2039    5. compiler/TopLevel/interact/evalloop.sml has been modified to
2040       handle the special exception SMLofNJ.Internals.BTrace.BTrace
2041       which is raised by the "trigger" function mentioned above.
2042    
2043    Notes on usage:
2044    
2045    - Annotated code works well together with unannotated code:
2046    Unannotated calls simply do not show up at all in the backtrace.
2047    
2048    - It is not a good idea to let modules that were annotated during
2049    different sessions run at the same time.  This is because the compiler
2050    chooses small integers to identify individual functions, and there
2051    will be clashes if different modules were compiled in separate sessions.
2052    (Nothing will crash, and you will even be told about the clashes, but
2053    back-trace information will in general not be useful.)
2054    
2055    - Back-tracing can be confused by callcc and capture.
2056    
2057    - The only way of getting a back-trace right now is to explicitly
2058    invoke the "trigger" function from your user program.  Eventually, we
2059    should make every exception carry back-trace information (if
2060    available).  But since this creates more overhead at "raise"-time
2061    (similar to the current exnHistory overhead), I have not yet
2062    implemented this.  (The implementation will be rather easy.)  With
2063    exceptions carrying back-trace information, this facility will be even
2064    more useful because users don't need to modify their programs...
2065    
2066    - While it is possible to compile the compiler with back-trace
2067    annotations turned on (I did it to get some confidence in
2068    correctness), you must make absolutely sure that core.sml and
2069    btimp.sml are compiled WITHOUT annotation!  (core.sml cannot actually
2070    be compiled with annotation because there is no core access yet, but
2071    if you compile btimp.sml with annotation, then the system will go into
2072    an infinite recursion and crash.)
2073    Since CM currently does not know about BTrace, the only way to turn
2074    annotations on and off for different modules of the compiler is to
2075    interrupt CMB.make, change the settings, and re-invoke it.  Of course,
2076    this is awkward and clumsy.
2077    
2078    Sample sessions:
2079    
2080    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
2081    - SMLofNJ.Internals.BTrace.mode (SOME true);
2082    [autoloading]
2083    [autoloading done]
2084    val it = false : bool
2085    - structure X = struct
2086    -     fun main n = let
2087    -         fun a (x, 0) = d x
2088    -           | a (x, n) = b (x, n - 1)
2089    -         and b (x, n) = c (x, n)
2090    -         and c (x, n) = a (x, n)
2091    -         and d x = e (x, 3)
2092    -         and e (x, 0) = f x
2093    -           | e (x, n) = e (x, n - 1)
2094    -         and f 0 = SMLofNJ.Internals.BTrace.trigger ()
2095    -           | f n = n * g (n - 1)
2096    -         and g n = a (n, 3)
2097    -     in
2098    -         f n
2099    -     end
2100    - end;
2101    structure X : sig val main : int -> int end
2102    - X.main 3;
2103    *** BACK-TRACE ***
2104    GOTO   stdIn:4.2-13.20: X.main[2].f
2105    GOTO-( stdIn:4.2-13.20: X.main[2].e
2106    GOTO   stdIn:4.2-13.20: X.main[2].d
2107         / stdIn:4.2-13.20: X.main[2].a
2108         | stdIn:4.2-13.20: X.main[2].b
2109    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2110    CALL   stdIn:4.2-13.20: X.main[2].g
2111    GOTO   stdIn:4.2-13.20: X.main[2].f
2112    GOTO-( stdIn:4.2-13.20: X.main[2].e
2113    GOTO   stdIn:4.2-13.20: X.main[2].d
2114         / stdIn:4.2-13.20: X.main[2].a
2115         | stdIn:4.2-13.20: X.main[2].b
2116    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2117    CALL   stdIn:4.2-13.20: X.main[2].g
2118    GOTO   stdIn:4.2-13.20: X.main[2].f
2119    GOTO-( stdIn:4.2-13.20: X.main[2].e
2120    GOTO   stdIn:4.2-13.20: X.main[2].d
2121         / stdIn:4.2-13.20: X.main[2].a
2122         | stdIn:4.2-13.20: X.main[2].b
2123    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2124    CALL   stdIn:4.2-13.20: X.main[2].g
2125    GOTO   stdIn:4.2-13.20: X.main[2].f
2126    CALL   stdIn:2.15-17.4: X.main[2]
2127    -
2128    
2129    (Note that because of a FLINt bug the above code currently does not
2130    compile without BTrace turned on.)
2131    
2132    Here is another example, using my modified Tiger compiler:
2133    
2134    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
2135    - SMLofNJ.Internals.BTrace.mode (SOME true);
2136    [autoloading]
2137    [autoloading done]
2138    val it = false : bool
2139    - CM.make "sources.cm";
2140    [autoloading]
2141    ...
2142    [autoloading done]
2143    [scanning sources.cm]
2144    [parsing (sources.cm):parse.sml]
2145    [creating directory CM/SKEL ...]
2146    [parsing (sources.cm):tiger.lex.sml]
2147    ...
2148    [wrote CM/sparc-unix/semant.sml]
2149    [compiling (sources.cm):main.sml]
2150    [wrote CM/sparc-unix/main.sml]
2151    [New bindings added.]
2152    val it = true : bool
2153    - Main.compile ("../testcases/merge.tig", "foo.out");
2154    *** BACK-TRACE ***
2155    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trvar
2156    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2157    CALL   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
2158    GOTO   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
2159    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2160    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2161    CALL   lib/semant.sml:488.3-505.6: SemantFun[2].transDec.trdec[2].transBody[2]
2162         / lib/semant.sml:411.65-543.8: SemantFun[2].transDec
2163    CALL-\ lib/semant.sml:413.2-540.9: SemantFun[2].transDec.trdec[2]
2164    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2165    CALL   lib/semant.sml:8.52-558.4: SemantFun[2].transProg[2]
2166    CALL   main.sml:1.18-118.4: Main.compile[2]
2167    -
2168    
2169    ----------------------------------------------------------------------
2170    Name: Matthias Blumen
2171    Date: 2000/06/21 18:00:00 JST
2172    Tag: blume-20000621-manual
2173    Description:
2174    
2175    CM manual update: Path environments documented.
2176    
2177    ----------------------------------------------------------------------
2178    Name: Matthias Blume
2179    Date: 2000/06/19 13:40:00
2180    Tag: blume-20000619-manual
2181    Description:
2182    
2183    CM manual and system/README update.  This only covers the fact that
2184    there are no more implicit anchors.  (Path environments and the "bind"
2185    option to "cm" have yet to be documented.)
2186    
2187    ----------------------------------------------------------------------
2188    Name: Matthias Blume
2189    Date: 2000/06/19 11:05:00 JST
2190    Tag: blume-20000619-chdir-bugfix
2191    Description:
2192    
2193    Fixed a bug in new SrcPath module that sometimes led to a bad chDir call.
2194    
2195    ----------------------------------------------------------------------
2196    Name: Matthias Blume
2197    Date: 2000/06/18 22:00:10 JST
2198    Tag: blume-20000618-implicit-anchors-really-gone
2199    Description:
2200    
2201    I updates the previous HISTORY entry where I forgot to mention that
2202    implicit anchors are no longer with us.
2203    
2204    The current update also gets rid of the (now useless) controller
2205    CM.Control.implicit_anchors.
2206    
2207    ----------------------------------------------------------------------
2208    Name: Matthias Blume
2209    Date: 2000/06/16 17:30:00 JST
2210    Tag: blume-20000616-anchorenv
2211    Description:
2212    
2213    This patch implements the long anticipated (just kidding :) "anchor
2214    environment" mechanism.  In the course of doing this, I also
2215    re-implemented CM's internal "SrcPath" module from scratch.  The new
2216    one should be more robust in certain boundary cases.  In any case, it
2217    is a lot cleaner than its predecessor (IMHO).
2218    
2219    This time, although there is yet another boot file format change, I
2220    kept the unpickler backward-compatible.  As a result, no new bootfiles
2221    are necessary and bootstrapping is straightforward.  (You cannot read
2222    new bootfiles into an old system, but the other way around is no
2223    problem.)
2224    
2225    Visible changes:
2226    
2227    ** 0. Implicit path anchors (without the leading $-symbol) are no
2228    longer recognized at all. This means that such path names are not
2229    illegal either.  For example, the name basis.cm simply refers to a
2230    local file called "basis.cm" (i.e, the name is an ordinary path
2231    relative to .cm-files directory).  Or, to put it differently, only
2232    names that start with $ are anchored paths.
2233    
2234    ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally
2235    vanished.
2236    
2237    John (Reppy) had critizised this as soon as I originally proposed and
2238    implemented it, but at that time I did not really deeply believe
2239    him. :) Now I came full-circle because I need the $<singlearc> syntax
2240    in another place where it cannot be seen as an abbreviation for
2241    $/<singlearc>.  To avoid the confusion, $<singlearc> now means what it
2242    seems to mean (i.e., it "expands" into the corresponding anchor
2243    value).
2244    
2245    However, when paths are used as members in CM description files, it
2246    continues to be true that there must be at least another arc after the
2247    anchor.  This is now enforced separately during semantic analysis
2248    (i.e., from a lexical/syntactical point of view, the notation is ok.)
2249    
2250    ** 2. The "cm" class now accepts an option "bind".  The option's value
2251    is a sub-option list of precisely two items -- one labeled "anchor"
2252    and the other one labeled "value".  As you might expect, "anchor" is
2253    used to specify an anchor name to be bound, and "value" specifies what
2254    the anchor is being bound to.
2255    
2256    The value must be a directory name and can be given in either standard
2257    syntax (including the possibility that it is itself an anchored path)
2258    or native syntax.
2259    
2260    Examples:
2261    
2262       foo.cm (bind:(anchor:bar value:$mystuff/bar))
2263       lib.cm (bind:(anchor:a value:"H:\\x\\y\\z"))  (* only works under windows *)
2264    
2265    and so on.
2266    
2267    The meaning of this is that the .cm-file will be processed with an
2268    augmented anchor environment where the given anchor(s) is/are bound to
2269    the given values(s).
2270    
2271    The rationale for having this feature is this: Suppose you are trying
2272    to use two different (already stable) libraries a.cm and b.cm (that
2273    you perhaps didn't write yourself).  Further, suppose each of these
2274    two libraries internally uses its own auxiliary library $aux/lib.cm.
2275    Normally you would now have a problem because the anchor "lib" can not
2276    be bound to more than one value globally.  Therefore, the project that
2277    uses both a.cm and b.cm must locally redirect the anchor to some other
2278    place:
2279    
2280       a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff))
2281       b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff))
2282    
2283    This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or
2284    /usr/lib/smlnj/b-stuff/aux.cm, respectively.
2285    
2286    Hard-wiring path names is a bit inflexible (and CM will verbosely warn
2287    you when you do so at the time of CM.stabilize).  Therefore, you can
2288    also use an anchored path as the value:
2289    
2290      a.cm (bind:(anchor:lib value:$a-lib))
2291      b.cm (bind:(anchor:lib value:$b-lib))
2292    
2293    Now you can globally configure (using the usual CM.Anchor.anchor or
2294    pathconfig machinery) bindings for "a-lib" and "b-lib".  Since "lib"
2295    itself is always locally bound, setting it globally is no longer
2296    meaningful or necessary (but it does not hurt either).  In fact, "lib"
2297    can still be used as a global anchor for separate purposes.  As a
2298    matter of fact, one can locally define "lib" in terms of a global
2299    "lib":
2300    
2301      a.cm (bind:(anchor:lib value:$lib/a))
2302      b.cm (bind:(anchor:lib value:$lib/b))
2303    
2304    ** 3: The encoding of path names has changed.  This affects the way
2305    path names are shown in CM's progress report and also the internal
2306    protocol encoding used for parallel make.
2307    
2308    The encoding now uses one or more ':'-separated segments.  Each
2309    segments corresponds to a file that has been specified relative to the
2310    file given by its preceding segment.  The first segment is either
2311    relative to the CWD, absolute, or anchored.  Each segment itself is
2312    basically a Unix pathname; all segments but the first are relative.
2313    
2314    Example:
2315    
2316       $foo/bar/baz.cm:a/b/c.sml
2317    
2318    This path denotes the file bar/a/b/c.sml relative to the directory
2319    denoted by anchor "foo".  Notice that the encoding also includes
2320    baz.cm which is the .cm-file that listed a/b/c.sml.  As usual, such
2321    paths are resolved relative to the .cm-files directory, so baz.cm must
2322    be ignored to get the "real" pathname.
2323    
2324    To make this fact more obvious, CM puts the names of such "virtual
2325    arcs" into parentheses when they appear in progress reports. (No
2326    parentheses will appear in the internal protocol encoding.)  Thus,
2327    what you really see is:
2328    
2329      $foo/bar/(baz.cm):a/b/c.sml
2330    
2331    I find this notation to be much more informative than before.
2332    
2333    Another new feature of the encoding is that special characters
2334    including parentheses, colons, (back)slashes, and white space are
2335    written as \ddd (where ddd is the decimal encoding of the character).
2336    
2337    *** The CM manual still needs to be updated.
2338    
2339  ----------------------------------------------------------------------  ----------------------------------------------------------------------
2340  Name: Allen Leung  Name: Allen Leung
2341  Date: 2000/06/15 00:38:00  Date: 2000/06/15 00:38:00
# Line 798  Line 3123 
3123       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
3124       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
3125       Please, don't be too harsh on me for messing with this code a bit more       Please, don't be too harsh on me for messing with this code a bit more
3126       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
3127       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
3128       Dave's hands. :)       Dave's hands. :)
3129    

Legend:
Removed from v.660  
changed lines
  Added in v.975

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0