Language and Capabilities

The sections Language and Capability list closely-related options that work together. The values in the section Language specify what rules or semantics the compiler should apply when compiling and running code. If not specified, the value of the corresponding option from the section Capability is used. A selected value in the section Language should be compatible with the value in the section Capability. In other words, the values listed in Capability tell what source code is capable of, whereas the values in Language tell what is used when compiling for a specific target.

The values in the section Language are used only when the corresponding target is compiled as a root one. Otherwise, they are ignored. The values in the section Capability are used to verify that current project settings allow for using a particular library (or classes of the project itself). For example, the void-safe library Base can be used in a non-void-safe project, because project settings are compatible with capabilities of the library. On the other hand, the library Thread cannot be used in a SCOOP project, because the library is not SCOOP-capable.

Capabilities are supported for the following settings, listed together with compatibility order, where X < Y means X is compatible with Y:

  1. CAT-call detection: None < Transitional < Complete.
  2. Concurrency: Thread < None < SCOOP.
  3. Void safety: None < Conformance < Initialization < Transitional < Complete.

In addition to the restriction on the compilation setting specified in the section Language, a project or a library with a higher level of capabilities cannot rely on a library with a lower level.