# S M L / N J 1 1 0 . 3 4 N E W S

June 10, 2001
WARNING This version is intended for compiler hackers. The version ought to be stable, however we have not run our full regression testing. http://cm.bell-labs.com/cm/cs/what/smlnj/index.html

### Summary:

- A long-standing signal-handling bug has been fixed.
- As a result, CML finally works again, and so does eXene.
- NLFFI has been further revised and improved. It now supports the Sparc architecture in addition to x86/Linux.
- There are various bugfixes and some organizational changes.

#### NLFFI:

- The types in the public interface to the "C" module have been simplified: the annoying 'f type parameter has been dropped in most places. This requires some cheating under the hood, but fortunately the cheat is a provably safe cheat.
- Various bugs in ml-nlffigen have been fixed so that it should be more robust now.
- C functions and function types that use variable-length argument lists are no longer rejected. Instead, ml-nlffigen will produce ML code that lets you call the function with just its mandatory arguments. This means that ml-nlffigen will not bail out just because there is one odd occurence of a varargs function somewhere in one big .h-file.
- Default names for files are now derived from the C files's basename so that ml-nlffigen will always place them in the current directory.
- Default names for generated ML identifiers are also derived from the C file's basename.
- Sparc architecture supported now.
- Support for x86/win32 mostly in place. (All missing pieces are in the runtime system.)

#### CM:

- CM can now generate "index files" which are human-readable files that list on a per-.cm-file basis each toplevel symbol defined or imported.
- some internal improvements in the tools subsystem
- "lambdasplit" parameter for class "sml" to control the cross-module inliner documented
- other documentation updates
- bug fixes

#### runtime:

- A serious signal handling problem that affected CML has been fixed.
- Support for dlopen/dlsym on Sparc/Solaris added.

#### CML:

- Compiles under the new CM.
- Libraries and anchors for version 110.34 and later are organized as follows:

- $cml/cml.cm : Main CML library.
- $cml/basis.cm : CML's version of $/basis.cm.
- $cml/cml-internal.cm : Internal helper library.
- $cml/core-cml.cm : Internal helper library.
- $cml-lib/trace-cml.cm : Tracing facility.
- $cml-lib/smlnj-lib.cm : CML's version of $/smlnj-lib.cm

#### eXene:

- Compiles under the new CM.
- The library's name for version 110.34 is $/eXene.cm.

#### scripts:

- The config/install.sh script has been updated to support the installation of CML and eXene under the New World Order (aka new CM).

#### compiler:

- bug fixes
- cross-module inliner now in the compilation pipeline by default (By default it is still turned off. But it can be enabled either globally or selectively by using CM's new "lambdasplit" parameter.)

#### MLRISC:

- Sparc implementation of c-calls API. (This is used by NLFFI.) (Caveat: Register assignments in the Sparc backend of SML/NJ still need to be redone. In particular, the ASM temp register must not be %o2. It is unlikely but not impossible that the current situation leads to certain subtle code-generation bugs.)
- Support for "stdcall" calling convention in x86 version of c-calls.

#### CKIT:

- structure Error exported from ckit-lib.cm