List of CIL instructions

Last updated

This is a list of the instructions in the instruction set of the Common Intermediate Language bytecode.

Opcode InstructionDescriptionType of instruction
0x58addAdd two values, returning a new value.Base instruction
0xD6add.ovfAdd signed integer values with overflow check.Base instruction
0xD7add.ovf.unAdd unsigned integer values with overflow check.Base instruction
0x5FandBitwise AND of two integral values, returns an integral value.Base instruction
0xFE 0x00arglistReturn argument list handle for the current method.Base instruction
0x3Bbeq <int32 (target)>Branch to target if equal.Base instruction
0x2Ebeq.s <int8 (target)>Branch to target if equal, short form.Base instruction
0x3Cbge <int32 (target)>Branch to target if greater than or equal to.Base instruction
0x2Fbge.s <int8 (target)>Branch to target if greater than or equal to, short form.Base instruction
0x41bge.un <int32 (target)>Branch to target if greater than or equal to (unsigned or unordered).Base instruction
0x34bge.un.s <int8 (target)>Branch to target if greater than or equal to (unsigned or unordered), short form.Base instruction
0x3Dbgt <int32 (target)>Branch to target if greater than.Base instruction
0x30bgt.s <int8 (target)>Branch to target if greater than, short form.Base instruction
0x42bgt.un <int32 (target)>Branch to target if greater than (unsigned or unordered).Base instruction
0x35bgt.un.s <int8 (target)>Branch to target if greater than (unsigned or unordered), short form.Base instruction
0x3Eble <int32 (target)>Branch to target if less than or equal to.Base instruction
0x31ble.s <int8 (target)>Branch to target if less than or equal to, short form.Base instruction
0x43ble.un <int32 (target)>Branch to target if less than or equal to (unsigned or unordered).Base instruction
0x36ble.un.s <int8 (target)>Branch to target if less than or equal to (unsigned or unordered), short form.Base instruction
0x3Fblt <int32 (target)>Branch to target if less than.Base instruction
0x32blt.s <int8 (target)>Branch to target if less than, short form.Base instruction
0x44blt.un <int32 (target)>Branch to target if less than (unsigned or unordered).Base instruction
0x37blt.un.s <int8 (target)>Branch to target if less than (unsigned or unordered), short form.Base instruction
0x40bne.un <int32 (target)>Branch to target if unequal or unordered.Base instruction
0x33bne.un.s <int8 (target)>Branch to target if unequal or unordered, short form.Base instruction
0x8Cbox <typeTok>Convert a boxable value to its boxed form.Object model instruction
0x38br <int32 (target)>Branch to target.Base instruction
0x2Bbr.s <int8 (target)>Branch to target, short form.Base instruction
0x01breakInform a debugger that a breakpoint has been reached.Base instruction
0x39brfalse <int32 (target)>Branch to target if value is zero (false).Base instruction
0x2Cbrfalse.s <int8 (target)>Branch to target if value is zero (false), short form.Base instruction
0x3Abrinst <int32 (target)>Branch to target if value is a non-null object reference (alias for brtrue).Base instruction
0x2Dbrinst.s <int8 (target)>Branch to target if value is a non-null object reference, short form (alias for brtrue.s).Base instruction
0x39brnull <int32 (target)>Branch to target if value is null (alias for brfalse).Base instruction
0x2Cbrnull.s <int8 (target)>Branch to target if value is null (alias for brfalse.s), short form.Base instruction
0x3Abrtrue <int32 (target)>Branch to target if value is non-zero (true).Base instruction
0x2Dbrtrue.s <int8 (target)>Branch to target if value is non-zero (true), short form.Base instruction
0x39brzero <int32 (target)>Branch to target if value is zero (alias for brfalse).Base instruction
0x2Cbrzero.s <int8 (target)>Branch to target if value is zero (alias for brfalse.s), short form.Base instruction
0x28call <method>Call method described by method.Base instruction
0x29calli <callsitedescr>Call method indicated on the stack with arguments described by callsitedescr.Base instruction
0x6Fcallvirt <method>Call a method associated with an object.Object model instruction
0x74castclass <class>Cast obj to class.Object model instruction
0xFE 0x01ceqPush 1 (of type int32) if value1 equals value2, else push 0.Base instruction
0xFE 0x02cgtPush 1 (of type int32) if value1 greater that value2, else push 0.Base instruction
0xFE 0x03cgt.unPush 1 (of type int32) if value1 greater that value2, unsigned or unordered, else push 0.Base instruction
0xC3ckfiniteThrow ArithmeticException if value is not a finite number.Base instruction
0xFE 0x04cltPush 1 (of type int32) if value1 lower than value2, else push 0.Base instruction
0xFE 0x05clt.unPush 1 (of type int32) if value1 lower than value2, unsigned or unordered, else push 0.Base instruction
0xFE 0x16constrained. <thisType>Call a virtual method on a type constrained to be type T.Prefix to instruction
0xD3conv.iConvert to native int, pushing native int on stack.Base instruction
0x67conv.i1Convert to int8, pushing int32 on stack.Base instruction
0x68conv.i2Convert to int16, pushing int32 on stack.Base instruction
0x69conv.i4Convert to int32, pushing int32 on stack.Base instruction
0x6Aconv.i8Convert to int64, pushing int64 on stack.Base instruction
0xD4conv.ovf.iConvert to a native int (on the stack as native int) and throw an exception on overflow.Base instruction
0x8Aconv.ovf.i.unConvert unsigned to a native int (on the stack as native int) and throw an exception on overflow.Base instruction
0xB3conv.ovf.i1Convert to an int8 (on the stack as int32) and throw an exception on overflow.Base instruction
0x82conv.ovf.i1.unConvert unsigned to an int8 (on the stack as int32) and throw an exception on overflow.Base instruction
0xB5conv.ovf.i2Convert to an int16 (on the stack as int32) and throw an exception on overflow.Base instruction
0x83conv.ovf.i2.unConvert unsigned to an int16 (on the stack as int32) and throw an exception on overflow.Base instruction
0xB7conv.ovf.i4Convert to an int32 (on the stack as int32) and throw an exception on overflow.Base instruction
0x84conv.ovf.i4.unConvert unsigned to an int32 (on the stack as int32) and throw an exception on overflow.Base instruction
0xB9conv.ovf.i8Convert to an int64 (on the stack as int64) and throw an exception on overflow.Base instruction
0x85conv.ovf.i8.unConvert unsigned to an int64 (on the stack as int64) and throw an exception on overflow.Base instruction
0xD5conv.ovf.uConvert to a native unsigned int (on the stack as native int) and throw an exception on overflow.Base instruction
0x8Bconv.ovf.u.unConvert unsigned to a native unsigned int (on the stack as native int) and throw an exception on overflow.Base instruction
0xB4conv.ovf.u1Convert to an unsigned int8 (on the stack as int32) and throw an exception on overflow.Base instruction
0x86conv.ovf.u1.unConvert unsigned to an unsigned int8 (on the stack as int32) and throw an exception on overflow.Base instruction
0xB6conv.ovf.u2Convert to an unsigned int16 (on the stack as int32) and throw an exception on overflow.Base instruction
0x87conv.ovf.u2.unConvert unsigned to an unsigned int16 (on the stack as int32) and throw an exception on overflow.Base instruction
0xB8conv.ovf.u4Convert to an unsigned int32 (on the stack as int32) and throw an exception on overflow.Base instruction
0x88conv.ovf.u4.unConvert unsigned to an unsigned int32 (on the stack as int32) and throw an exception on overflow.Base instruction
0xBAconv.ovf.u8Convert to an unsigned int64 (on the stack as int64) and throw an exception on overflow.Base instruction
0x89conv.ovf.u8.unConvert unsigned to an unsigned int64 (on the stack as int64) and throw an exception on overflow.Base instruction
0x76conv.r.unConvert unsigned integer to floating-point, pushing F on stack.Base instruction
0x6Bconv.r4Convert to float32, pushing F on stack.Base instruction
0x6Cconv.r8Convert to float64, pushing F on stack.Base instruction
0xE0conv.uConvert to native unsigned int, pushing native int on stack.Base instruction
0xD2conv.u1Convert to unsigned int8, pushing int32 on stack.Base instruction
0xD1conv.u2Convert to unsigned int16, pushing int32 on stack.Base instruction
0x6Dconv.u4Convert to unsigned int32, pushing int32 on stack.Base instruction
0x6Econv.u8Convert to unsigned int64, pushing int64 on stack.Base instruction
0xFE 0x17cpblkCopy data from memory to memory.Base instruction
0x70cpobj <typeTok> Copy a value type from src to dest.Object model instruction
0x5BdivDivide two values to return a quotient or floating-point result.Base instruction
0x5Cdiv.unDivide two values, unsigned, returning a quotient.Base instruction
0x25dupDuplicate the value on the top of the stack.Base instruction
0xDCendfaultEnd fault clause of an exception block.Base instruction
0xFE 0x11endfilterEnd an exception handling filter clause.Base instruction
0xDCendfinallyEnd finally clause of an exception block.Base instruction
0xFE 0x18initblkSet all bytes in a block of memory to a given byte value.Base instruction
0xFE 0x15initobj <typeTok> Initialize the value at address dest.Object model instruction
0x75isinst <class>Test if obj is an instance of class, returning null or an instance of that class or interface.Object model instruction
0x27jmp <method>Exit current method and jump to the specified method.Base instruction
0xFE 0x09ldarg <uint16 (num)>Load argument numbered num onto the stack.Base instruction
0x02ldarg.0Load argument 0 onto the stack.Base instruction
0x03ldarg.1Load argument 1 onto the stack.Base instruction
0x04ldarg.2Load argument 2 onto the stack.Base instruction
0x05ldarg.3Load argument 3 onto the stack.Base instruction
0x0Eldarg.s <uint8 (num)>Load argument numbered num onto the stack, short form.Base instruction
0xFE 0x0Aldarga <uint16 (argNum)>Fetch the address of argument argNum.Base instruction
0x0Fldarga.s <uint8 (argNum)>Fetch the address of argument argNum, short form.Base instruction
0x20ldc.i4 <int32 (num)>Push num of type int32 onto the stack as int32.Base instruction
0x16ldc.i4.0Push 0 onto the stack as int32.Base instruction
0x17ldc.i4.1Push 1 onto the stack as int32.Base instruction
0x18ldc.i4.2Push 2 onto the stack as int32.Base instruction
0x19ldc.i4.3Push 3 onto the stack as int32.Base instruction
0x1Aldc.i4.4Push 4 onto the stack as int32.Base instruction
0x1Bldc.i4.5Push 5 onto the stack as int32.Base instruction
0x1Cldc.i4.6Push 6 onto the stack as int32.Base instruction
0x1Dldc.i4.7Push 7 onto the stack as int32.Base instruction
0x1Eldc.i4.8Push 8 onto the stack as int32.Base instruction
0x15ldc.i4.m1Push -1 onto the stack as int32.Base instruction
0x15ldc.i4.M1Push -1 onto the stack as int32 (alias for ldc.i4.m1).Base instruction
0x1Fldc.i4.s <int8 (num)>Push num onto the stack as int32, short form.Base instruction
0x21ldc.i8 <int64 (num)>Push num of type int64 onto the stack as int64.Base instruction
0x22ldc.r4 <float32 (num)>Push num of type float32 onto the stack as F.Base instruction
0x23ldc.r8 <float64 (num)>Push num of type float64 onto the stack as F.Base instruction
0xA3ldelem <typeTok> Load the element at index onto the top of the stack.Object model instruction
0x97ldelem.iLoad the element with type native int at index onto the top of the stack as a native int.Object model instruction
0x90ldelem.i1Load the element with type int8 at index onto the top of the stack as an int32.Object model instruction
0x92ldelem.i2Load the element with type int16 at index onto the top of the stack as an int32.Object model instruction
0x94ldelem.i4Load the element with type int32 at index onto the top of the stack as an int32.Object model instruction
0x96ldelem.i8Load the element with type int64 at index onto the top of the stack as an int64.Object model instruction
0x98ldelem.r4Load the element with type float32 at index onto the top of the stack as an F.Object model instruction
0x99ldelem.r8Load the element with type float64 at index onto the top of the stack as an F.Object model instruction
0x9Aldelem.refLoad the element at index onto the top of the stack as an O. The type of the O is the same as the element type of the array pushed on the CIL stack.Object model instruction
0x91ldelem.u1Load the element with type unsigned int8 at index onto the top of the stack as an int32.Object model instruction
0x93ldelem.u2Load the element with type unsigned int16 at index onto the top of the stack as an int32.Object model instruction
0x95ldelem.u4Load the element with type unsigned int32 at index onto the top of the stack as an int32.Object model instruction
0x96ldelem.u8Load the element with type unsigned int64 at index onto the top of the stack as an int64 (alias for ldelem.i8).Object model instruction
0x8Fldelema <class>Load the address of element at index onto the top of the stack.Object model instruction
0x7Bldfld <field>Push the value of field of object (or value type) obj, onto the stack.Object model instruction
0x7Cldflda <field>Push the address of field of object obj on the stack.Object model instruction
0xFE 0x06ldftn <method>Push a pointer to a method referenced by method, on the stack.Base instruction
0x4Dldind.iIndirect load value of type native int as native int on the stack.Base instruction
0x46ldind.i1Indirect load value of type int8 as int32 on the stack.Base instruction
0x48ldind.i2Indirect load value of type int16 as int32 on the stack.Base instruction
0x4Aldind.i4Indirect load value of type int32 as int32 on the stack.Base instruction
0x4Cldind.i8Indirect load value of type int64 as int64 on the stack.Base instruction
0x4Eldind.r4Indirect load value of type float32 as F on the stack.Base instruction
0x4Fldind.r8Indirect load value of type float64 as F on the stack.Base instruction
0x50ldind.refIndirect load value of type object ref as O on the stack.Base instruction
0x47ldind.u1Indirect load value of type unsigned int8 as int32 on the stack.Base instruction
0x49ldind.u2Indirect load value of type unsigned int16 as int32 on the stack.Base instruction
0x4Bldind.u4Indirect load value of type unsigned int32 as int32 on the stack.Base instruction
0x4Cldind.u8Indirect load value of type unsigned int64 as int64 on the stack (alias for ldind.i8).Base instruction
0x8EldlenPush the length (of type native unsigned int) of array on the stack.Object model instruction
0xFE 0x0Cldloc <uint16 (indx)>Load local variable of index indx onto stack.Base instruction
0x06ldloc.0Load local variable 0 onto stack.Base instruction
0x07ldloc.1Load local variable 1 onto stack.Base instruction
0x08ldloc.2Load local variable 2 onto stack.Base instruction
0x09ldloc.3Load local variable 3 onto stack.Base instruction
0x11ldloc.s <uint8 (indx)>Load local variable of index indx onto stack, short form.Base instruction
0xFE 0x0Dldloca <uint16 (indx)>Load address of local variable with index indx.Base instruction
0x12ldloca.s <uint8 (indx)>Load address of local variable with index indx, short form.Base instruction
0x14ldnullPush a null reference on the stack.Base instruction
0x71ldobj <typeTok> Copy the value stored at address src to the stack.Object model instruction
0x7Eldsfld <field>Push the value of the static field on the stack.Object model instruction
0x7Fldsflda <field>Push the address of the static field, field, on the stack.Object model instruction
0x72ldstr <string>Push a string object for the literal string.Object model instruction
0xD0ldtoken <token>Convert metadata token to its runtime representation.Object model instruction
0xFE 0x07ldvirtftn <method>Push address of virtual method on the stack.Object model instruction
0xDDleave <int32 (target)>Exit a protected region of code.Base instruction
0xDEleave.s <int8 (target)>Exit a protected region of code, short form.Base instruction
0xFE 0x0FlocallocAllocate space from the local memory pool.Base instruction
0xC6mkrefany <class>Push a typed reference to ptr of type class onto the stack.Object model instruction
0x5AmulMultiply values.Base instruction
0xD8mul.ovfMultiply signed integer values. Signed result shall fit in same size.Base instruction
0xD9mul.ovf.unMultiply unsigned integer values. Unsigned result shall fit in same size.Base instruction
0x65negNegate value.Base instruction
0x8Dnewarr <etype>Create a new array with elements of type etype.Object model instruction
0x73newobj <ctor>Allocate an uninitialized object or value type and call ctor.Object model instruction
0xFE 0x19
no. {  typecheck,  rangecheck,  nullcheck  }
The specified fault check(s) normally performed as part of the execution of the subsequent instruction can/shall be skipped.Prefix to instruction
0x00nopDo nothing (No operation).Base instruction
0x66notBitwise complement.Base instruction
0x60orBitwise OR of two integer values, returns an integer.Base instruction
0x26popPop value from the stack.Base instruction
0xFE 0x1Ereadonly.Specify that the subsequent array address operation performs no type check at runtime, and that it returns a controlled-mutability managed pointer.Prefix to instruction
0xFE 0x1DrefanytypePush the type token stored in a typed reference.Object model instruction
0xC2refanyval <type>Push the address stored in a typed reference.Object model instruction
0x5DremRemainder when dividing one value by another.Base instruction
0x5Erem.unRemainder when dividing one unsigned value by another.Base instruction
0x2AretReturn from method, possibly with a value.Base instruction
0xFE 0x1ArethrowRethrow the current exception.Object model instruction
0x62shlShift an integer left (shifting in zeros), return an integer.Base instruction
0x63shrShift an integer right (shift in sign), return an integer.Base instruction
0x64shr.unShift an integer right (shift in zero), return an integer.Base instruction
0xFE 0x1Csizeof <typeTok> Push the size, in bytes, of a type as an unsigned int32.Object model instruction
0xFE 0x0Bstarg <uint16 (num)>Store value to the argument numbered num.Base instruction
0x10starg.s <uint8 (num)>Store value to the argument numbered num, short form.Base instruction
0xA4stelem <typeTok> Replace array element at index with the value on the stack.Object model instruction
0x9Bstelem.iReplace array element at index with the native int value on the stack.Object model instruction
0x9Cstelem.i1Replace array element at index with the int8 value on the stack.Object model instruction
0x9Dstelem.i2Replace array element at index with the int16 value on the stack.Object model instruction
0x9Estelem.i4Replace array element at index with the int32 value on the stack.Object model instruction
0x9Fstelem.i8Replace array element at index with the int64 value on the stack.Object model instruction
0xA0stelem.r4Replace array element at index with the float32 value on the stack.Object model instruction
0xA1stelem.r8Replace array element at index with the float64 value on the stack.Object model instruction
0xA2stelem.refReplace array element at index with the ref value on the stack.Object model instruction
0x7Dstfld <field>Replace the value of field of the object obj with value.Object model instruction
0xDFstind.iStore value of type native int into memory at address.Base instruction
0x52stind.i1Store value of type int8 into memory at address.Base instruction
0x53stind.i2Store value of type int16 into memory at address.Base instruction
0x54stind.i4Store value of type int32 into memory at address.Base instruction
0x55stind.i8Store value of type int64 into memory at address.Base instruction
0x56stind.r4Store value of type float32 into memory at address.Base instruction
0x57stind.r8Store value of type float64 into memory at address.Base instruction
0x51stind.refStore value of type object ref (type O) into memory at address.Base instruction
0xFE 0x0Estloc <uint16 (indx)>Pop a value from stack into local variable indx.Base instruction
0x0Astloc.0Pop a value from stack into local variable 0.Base instruction
0x0Bstloc.1Pop a value from stack into local variable 1.Base instruction
0x0Cstloc.2Pop a value from stack into local variable 2.Base instruction
0x0Dstloc.3Pop a value from stack into local variable 3.Base instruction
0x13stloc.s <uint8 (indx)>Pop a value from stack into local variable indx, short form.Base instruction
0x81stobj <typeTok> Store a value of type typeTok at an address.Object model instruction
0x80stsfld <field>Replace the value of the static field with val.Object model instruction
0x59subSubtract value2 from value1, returning a new value.Base instruction
0xDAsub.ovfSubtract native int from a native int. Signed result shall fit in same size.Base instruction
0xDBsub.ovf.unSubtract native unsigned int from a native unsigned int. Unsigned result shall fit in same size.Base instruction
0x45switch <uint32, int32, int32 (t1..tN)>Jump to one of n values.Base instruction
0xFE 0x14tail.Subsequent call terminates current method.Prefix to instruction
0x7AthrowThrow an exception.Object model instruction
0xFE 0x12unaligned. (alignment)Subsequent pointer instruction might be unaligned.Prefix to instruction
0x79unbox <valuetype>Extract a value-type from obj, its boxed representation, and push a controlled-mutability managed pointer to it to the top of the stack.Object model instruction
0xA5unbox.any <typeTok> Extract a value-type from obj, its boxed representation, and copy to the top of the stack.Object model instruction
0xFE 0x13volatile.Subsequent pointer reference is volatile.Prefix to instruction
0x61xorBitwise XOR of integer values, returns an integer.Base instruction

See also

Related Research Articles

The Common Language Infrastructure (CLI) is an open specification and technical standard originally developed by Microsoft and standardized by ISO/IEC and Ecma International that describes executable code and a runtime environment that allows multiple high-level languages to be used on different computer platforms without being rewritten for specific architectures. This implies it is platform agnostic. The .NET Framework, .NET and Mono are implementations of the CLI. The metadata format is also used to specify the API definitions exposed by the Windows Runtime.

The Common Language Runtime (CLR), the virtual machine component of Microsoft .NET Framework, manages the execution of .NET programs. Just-in-time compilation converts the managed code into machine instructions which are then executed on the CPU of the computer. The CLR provides additional services including memory management, type safety, exception handling, garbage collection, security and thread management. All programs written for the .NET Framework, regardless of programming language, are executed in the CLR. All versions of the .NET Framework include CLR. The CLR team was started June 13, 1998.

Common Intermediate Language (CIL), formerly called Microsoft Intermediate Language (MSIL) or Intermediate Language (IL), is the intermediate language binary instruction set defined within the Common Language Infrastructure (CLI) specification. CIL instructions are executed by a CLI-compatible runtime environment such as the Common Language Runtime. Languages which target the CLI compile to CIL. CIL is object-oriented, stack-based bytecode. Runtimes typically just-in-time compile CIL instructions into native code.

<span class="mw-page-title-main">Single instruction, multiple data</span> Type of parallel processing

Single instruction, multiple data (SIMD) is a type of parallel processing in Flynn's taxonomy. SIMD can be internal and it can be directly accessible through an instruction set architecture (ISA), but it should not be confused with an ISA. SIMD describes computers with multiple processing elements that perform the same operation on multiple data points simultaneously.

DotGNU is a decommissioned part of the GNU Project that started in January 2001. DotGNU aims to provide a free software replacement for Microsoft's .NET Framework by Free Software Foundation. Other goals of the project are better support for non-Windows platforms and support for more processors.

<span class="mw-page-title-main">LLVM</span> Compiler backend for multiple programming languages

LLVM is a set of compiler and toolchain technologies that can be used to develop a frontend for any programming language and a backend for any instruction set architecture. LLVM is designed around a language-independent intermediate representation (IR) that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes. The name LLVM originally stood for Low Level Virtual Machine, though the project has expanded and the name is no longer officially an initialism.

The Shared Source Common Language Infrastructure (SSCLI), previously codenamed Rotor, is Microsoft's shared source implementation of the CLI, the core of .NET. Although the SSCLI is not suitable for commercial use due to its license, it does make it possible for programmers to examine the implementation details of many .NET libraries and to create modified CLI versions. Microsoft provides the Shared Source CLI as a reference CLI implementation suitable for educational use.

Metadata, in the Common Language Infrastructure (CLI), refers to certain data structures embedded within the Common Intermediate Language (CIL) code that describes the high-level structure of the code. Metadata describes all classes and class members that are defined in the assembly, and the classes and class members that the current assembly will call from another assembly. The metadata for a method contains the complete description of the method, including the class, the return type and all of the method parameters.

<span class="mw-page-title-main">C Sharp (programming language)</span> Programming language

C# is a general-purpose high-level programming language supporting multiple paradigms. C# encompasses static typing, strong typing, lexically scoped, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming disciplines.

The Virtual Execution System (VES) is a run-time system of the Common Language Infrastructure CLI which provides an environment for executing managed code. It provides direct support for a set of built-in data types, defines a hypothetical machine with an associated machine model and state, a set of control flow constructs, and an exception handling model. To a large extent, the purpose of the VES is to provide the support required to execute the Common Intermediate Language CIL instruction set.

Application virtualization software refers to both application virtual machines and software responsible for implementing them. Application virtual machines are typically used to allow application bytecode to run portably on many different computer architectures and operating systems. The application is usually run on the computer using an interpreter or just-in-time compilation (JIT). There are often several implementations of a given virtual machine, each covering a different set of functions.

<span class="mw-page-title-main">Cosmos (operating system)</span> Toolkit for building GUI and command-line based operating systems

C# Open Source Managed Operating System (Cosmos) is a toolkit for building GUI and command-line based operating systems, written mostly in the programming language C# and small amounts of a high level assembly language named X#. Cosmos is a backronym, in that the acronym was chosen before the meaning. It is open-source software released under a BSD license.

<span class="mw-page-title-main">.NET Framework</span> Software platform developed by Microsoft

The .NET Framework is a proprietary software framework developed by Microsoft that runs primarily on Microsoft Windows. It was the predominant implementation of the Common Language Infrastructure (CLI) until being superseded by the cross-platform .NET project. It includes a large class library called Framework Class Library (FCL) and provides language interoperability across several programming languages. Programs written for .NET Framework execute in a software environment named the Common Language Runtime (CLR). The CLR is an application virtual machine that provides services such as security, memory management, and exception handling. As such, computer code written using .NET Framework is called "managed code". FCL and CLR together constitute the .NET Framework.

The Native Image Generator, or simply NGen, is the ahead-of-time compilation (AOT) service of the .NET Framework. It allows a CLI assembly to be pre-compiled instead of letting the Common Language Runtime (CLR) do a just-in-time compilation (JIT) at runtime. In some cases the execution will be significantly faster than with JIT.

<span class="mw-page-title-main">Mono (software)</span> Computer software project

Mono is a free and open-source .NET Framework-compatible software framework. Originally by Ximian, it was later acquired by Novell, and is now being led by Xamarin, a subsidiary of Microsoft and the .NET Foundation. Mono can be run on many software systems.

The following outline is provided as an overview of and topical guide to C++:

<span class="mw-page-title-main">Standard Libraries (CLI)</span> Standard libraries of C#, the .NET Framework and Core, and related projects

The Standard Libraries is a set of libraries included in the Common Language Infrastructure (CLI) in order to encapsulate many common functions, such as file reading and writing, XML document manipulation, exception handling, application globalization, network communication, threading, and reflection, which makes the programmer's job easier. It is much larger in scope than standard libraries for most other languages, including C++, and is comparable in scope and coverage to the standard libraries of Java.

References