-
Notifications
You must be signed in to change notification settings - Fork 0
Developer Notes
Welcome to the SML/NJ wiki! We use this wiki as a developer resource (it replaces our developer notes svn repository). It contains development plans (both long-term and for upcoming releases); documentation of the compiler and runtime system internals; and various other notes related to the system.
Tentative "TODO" lists for future releases.
These documents are various ideas about future implementation projects.
-
Arrays, Vectors, and Slices -- describes the current representation of array and vector values and proposes some changes to improve performance.
-
New Primitives for Sequences -- proposal for changing the way that the compiler supports array and vector types.
-
New Binfile Format -- proposal for making binfiles into a more generic container format for persistent information, such as static environments, code, etc.
These documents are descriptions of various aspects of the SML/NJ implementation.
-
Primitive Operators -- primitive operators that are exposed by the compiler in the
InlineTstructure. -
Integer/Word Conversions Explained -- describes the algebra of integer/word conversions used to implement the Basis Library
to*/from*operations. -
CPS Primitive Operators -- describes the semantics of the CPS primitive operations
-
Informal Semantics of the CFG IR -- describes the semantics of the CFG intermediate representation
-
Runtime Representations -- describes the runtime representation of SML values.
-
Bootstrapping Executables -- describes the process of bootstrapping an executable program from a list of binfiles.
-
Binfile Format and Linking -- describes the layout of the binfiles that are used to hold the results of compilation.
-
Literals -- describes the bytecode used to generate a literal table.
-
Linkage Between the Runtime System and SML Code -- describes the mechanisms used to access runtime-system services from SML code.
-
C-Machine Register Assignments -- a table that defines the mapping from C-Machine registers to hardware resources for the various architectures supported by SML/NJ (including machines that are no longer supported).
-
Patching LLVM for SML/NJ -- this document describes the source-code edits required to modify LLVM for use as a code generator for SML/NJ.
-
CM Overview -- this document gives an overview of the internals of the Compilation Manager.
Random notes related to the implementation. These usually serve as a place to collect information and links related to some future/ongoing project.
- Bug Map -- a mapping of the smlnj-gforge bug numbers to GitHub issue numbers.
These documents are retained for historical purposes, but are no longer relevant (either because they have been implemented or refer to the "legacy" version).
-
Calling Conventions -- documents the different calling conventions used in the old MLRISC backend.
-
Notes on using LLVM for code generation in SML/NJ -- design notes for replacing MLRISC with LLVM. As of Version 2021.1, we now use LLVM for final code generation. There is an IFL 2020 paper that describes the implementation.