Ch.4 Overview of SML#

§ 4.6. Limitations in SML# version 2.0.0

We have successfully developed all the features listed in Section 4.1, which we had initially aimed at. The version 2.0.0 contains most of them, with the following restrictions.

  1. POSIX Native thread support

    This feature has not yet been well tested. So we set it off by default. To enable it, give --enable-thread to ./configure. The compiler then generate thread-safe code. If you import OS thread-library through _import declaration, your multithread code should run on multicore CPU.

    We have also completed development of a fully concurrent non-moving GC. This has not been integrated in 2.0.0 version. The GC in the 2.0.0 version is a stop-the-world multithread extension of the non-moving GC. We will replace this with a fully concurrent non-moving GC in a future version.

  2. Target Architecture.

    The current compiler only generates x86 (or IA-32) code. We plan to support any other platforms, in particular amd64 (or x64), in near future. Since SML#2.0.0 uses LLVM as its compiler backend, it seems to be easy for SML# to support multiple platforms.

  3. Optimization.

    In this version, optimization is far from adequate; it does not even implement standard ones such as inlining and constant propagation. So both the compilation time and the speed of generated code are not very satisfactory. We have started design and development of optimizing SML# compiler, and hope that we will provide an optimized SML# compiler that is as fast as other mature compilers.