Microsoft code name “M” is a simple declarative language for building domain models and working with data. “M” allows users to write down how they want to structure and query their data using a convenient textual syntax that can be both authored and read.
“M” does not mandate how data is stored or accessed, nor does it mandate a specific implementation technology. Rather, “M” was designed to allow users to write down what they want from their data without having to specify how those desires are met against a given technology or platform. “M” in no way prohibits implementations from providing rich declarative or imperative support for controlling how “M” constructs are represented and executed in a given environment.
“M” is a simple language. “M” builds on three basic concepts: values, types, and extents. The following concepts are defined in “M”:
A value is data that conforms to the rules of the “M” language.
A type describes a set of values.
An extent provides dynamic storage for values.
In general, “M” separates the typing of data from the storage/extent of the data. A given type can be used to describe data from multiple extents as well as to describe the results of a calculation. This allows users to start writing down types first and decide where to put or calculate the corresponding values later.
As to determining where to put values, the “M” language does not specify how an implementation maps a declared extent to an external store such as an RDBMS. However, “M” was designed to make such implementations possible and is compatible with the relational model.
One other important aspect of data management that “M” does not address is updating. “M” is a functional language that does not have constructs for changing the contents of an extent. How the data changes is outside the scope of the language, however again, “M” anticipates that the contents of an extent can change using external (to “M”) stimuli.