<?xml version="1.0"?>
<clause number="4" title="Definitions">
  <paragraph>For the purposes of this ECMA Standard, the following definitions apply. Other terms are defined where they appear in italic type or on the left side of a syntax rule. Terms explicitly defined in this ECMA Standard are not to be presumed to refer implicitly to similar terms defined elsewhere. Terms not defined in this ECMA Standard are to be interpreted according to ISO/IEC 2382.1. Mathematical symbols not defined in this ECMA Standard are to be interpreted according to ISO 31.11. </paragraph>
  <paragraph><term_definition>Application</term_definition>  -refers to an assembly that has an entry point (<hyperlink>10.1</hyperlink>). When an application is run, a new application domain is created. Several different instantiations of an application may exist on the same machine at the same time, and each has its own application domain. </paragraph>
  <paragraph><term_definition>Application domain</term_definition>  -an entity that enables application isolation by acting as a container for application state. An application domain acts as a container and boundary for the types defined in the application and the class libraries it uses. Types loaded into one application domain are distinct from the same type loaded into another application domain, and instances of objects are not directly shared between application domains. For instance, each application domain has its own copy of static variables for these types, and a static constructor for a type is run at most once per application domain. Implementations are free to provide implementation-specific policy or mechanisms for the creation and destruction of application domains. </paragraph>
  <paragraph><term_definition>Argument</term_definition>  -an expression in the comma-separated list bounded by the parentheses in a method or instance constructor call expression. It is also known as an actual argument. </paragraph>
  <paragraph><term_definition>Assembly</term_definition>  -refers to one or more files that are output by the compiler as a result of program compilation. An assembly is a configured set of loadable code modules and other resources that together implement a unit of functionality. An assembly may contain types, the executable code used to implement these types, and references to other assemblies. The physical representation of an assembly is not defined by this specification. Essentially, an assembly is the output of the compiler. </paragraph>
  <paragraph><term_definition>Behavior</term_definition>  -external appearance or action. </paragraph>
  <paragraph><term_definition>Behavior, implementation-defined</term_definition>  -unspecified behavior where each implementation documents how the choice is made. </paragraph>
  <paragraph><term_definition>Behavior, undefined</term_definition>  -behavior, upon use of a nonportable or erroneous construct or of erroneous data, for which this ECMA Standard imposes no requirements. [Possible handling of undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message)]. </paragraph>
  <paragraph><term_definition>Behavior, unspecified</term_definition>  -behavior where this ECMA Standard provides two or more possibilities and imposes no further requirements on which is chosen in any instance. </paragraph>
  <paragraph><term_definition>Class library</term_definition>  -refers to an assembly that can be used by other assemblies. Use of a class library does not cause the creation of a new application domain. Instead, a class library is loaded into the application domain that uses it. For instance, when an application uses a class library, that class library is loaded into the application domain for that application. If an application uses a class library A that itself uses a class library B, then both A and B are loaded into the application domain for the application. </paragraph>
  <paragraph><term_definition>Diagnostic message</term_definition>  -a message belonging to an implementation-defined subset of the implementation's output messages. </paragraph>
  <paragraph><term_definition>Error, compile-time</term_definition>  -an error reported during program translation. </paragraph>
  <paragraph><term_definition>Exception</term_definition>  -an error condition that is outside the ordinary expected behavior. </paragraph>
  <paragraph><term_definition>Implementation</term_definition>  -particular set of software (running in a particular translation environment under particular control options) that performs translation of programs for, and supports execution of methods in, a particular execution environment. </paragraph>
  <paragraph><term_definition>Namespace</term_definition>  -a logical organizational system that provides a way of presenting program elements that are exposed to other programs. </paragraph>
  <paragraph><term_definition>Parameter</term_definition>  -a variable declared as part of a method, instance constructor, or indexer definition, which acquires a value on entry to that method. It is also known as formal parameter. </paragraph>
  <paragraph><term_definition>Program</term_definition>  -refers to one or more source files that are presented to the compiler. Essentially, a program is the input to the compiler. </paragraph>
  <paragraph><term_definition>Program, valid</term_definition>  -a C# program constructed according to the syntax rules and diagnosable semantic rules. </paragraph>
  <paragraph><term_definition>Program instantiation</term_definition>  -the execution of an application. </paragraph>
  <paragraph><term_definition>Recommended practice</term_definition>  -specification that is strongly recommended as being aligned with the intent of the standard, but that may be impractical for some implementations. </paragraph>
  <paragraph><term_definition>Source file</term_definition>  -an ordered sequence of Unicode characters. Source files typically have a one-to-one correspondence with files in a file system, but this correspondence is not required. </paragraph>
  <paragraph><term_definition>Unsafe code</term_definition>  -code that is permitted to perform such lower-level operations as declaring and operating on pointers, performing conversions between pointers and integral types, and taking the address of variables. Such operations provide functionality such as permitting interfacing with the underlying operating system, accessing a memory-mapped device, or implementing a time-critical algorithm. </paragraph>
  <paragraph><term_definition>Warning, compile-time</term_definition>  -an informational message reported during program translation, that is intended to identify a potentially questionable usage of a program element. </paragraph>
</clause>
