Common Language Infrastructure: Difference between revisions

Content deleted Content added
Puhfyn (talk | contribs)
m Support for dynamic languages: grammar: removing unnecessary comma
Changing short description from "open specification for architecture-independent executables and runtime environment" to "Open specification for runtime environments"
 
(205 intermediate revisions by more than 100 users not shown)
Line 1:
{{Short description|Open specification for runtime environments}}
The '''Common Language Infrastructure (CLI)''' is an open [[specification]] (published under ECMA-335 and ISO/IEC 23271) developed by [[Microsoft]] that describes the executable code and runtime environment that form the core of the Microsoft [[.NET Framework]] and the [[free and open source software|free and open source]] implementations [[Mono (software)|Mono]] and [[Portable.NET]]. The specification defines an environment that allows multiple high-level languages to be used on different computer platforms without being rewritten for specific architectures.
{{Infobox technology standard
| title = Common Language Infrastructure
| status = Published
| year_started = {{Start date and age|2000}}
| version = Sixth edition
| version_date = {{Start date and age|2012|06}}
| organization = '''Developed by:''' [[Microsoft]], [[Hewlett-Packard]], [[Intel]], and others<br />
'''Standardized by:''' [[Ecma International|Ecma]], [[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]]
| related_standards =
| abbreviation = CLI
| ___domain = Common Language ([[Cross-platform]])
| website = {{URL|https://www.ecma-international.org/publications-and-standards/standards/ecma-335/|ECMA-335}},<br />{{URL|https://www.iso.org/standard/58046.html|ISO/IEC 23271}}
| long_name = ISO/IEC 23271:2012(E)
| first_published = {{Start date and age|2001}} (Ecma) and {{Start date and age|2003}} (ISO/IEC)
| committee = [[ISO/IEC JTC 1/SC 22]]
| license = [[Reasonable and non-discriminatory licensing|RAND]]
}}
The '''Common Language Infrastructure''' ('''CLI''') is an open [[specification]] and [[technical standard]] originally developed by [[Microsoft]] and standardized by [[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]] ('''ISO/IEC 23271''') and [[Ecma International]] ('''ECMA 335''')<ref name="iso_iec_23271_2012">{{cite web| url = http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=58046| title = ISO/IEC 23271:2012 - Information technology -- Common Language Infrastructure (CLI) |website=ISO |url-status=live |archive-url=https://web.archive.org/web/20230702003946/https://www.iso.org/standard/58046.html |archive-date= Jul 2, 2023 }}</ref><ref name="ecma_355_2012">{{cite web| url = https://www.ecma-international.org/publications-and-standards/standards/ecma-335/| title = ECMA-335 |issue=6th edition |date=June 2012 |website=ECMA International |url-status=live |archive-url=https://web.archive.org/web/20231016101943/https://www.ecma-international.org/publications-and-standards/standards/ecma-335/ |archive-date= Oct 16, 2023 }}</ref> that describes executable code and a runtime environment that allows [[List of CLI languages|multiple high-level languages]] to be used on different [[Computing platform|computer platforms]] without being rewritten for specific architectures. This implies it is platform agnostic. The [[.NET Framework]], [[.NET]] and [[Mono (software)|Mono]] are implementations of the CLI.
The [[metadata]] format is also used to specify the [[API]] definitions exposed by the [[Windows Runtime]].<ref>{{cite web| url = https://www.microsoftpressstore.com/articles/article.aspx?p=2199428&seqNum=3| title = Introduction to Advanced Windows Store App Development using HTML5 and JavaScript |website=Microsoft Press Store |date=Oct 15, 2013 |url-status=live |archive-url=https://web.archive.org/web/20230330075408/https://www.microsoftpressstore.com/articles/article.aspx?p=2199428&seqNum=3 |archive-date= Mar 30, 2023 }}</ref><ref>{{cite web| url = https://tirania.org/blog/archive/2011/Sep-15.html| title = WinRT demystified |first1=Miguel |last1=de Icaza |date=15 Sep 2011 |url-status=live |archive-url=https://web.archive.org/web/20231130221232/https://tirania.org/blog/archive/2011/Sep-15.html |archive-date= Nov 30, 2023 }}</ref>
 
==Overview==
[[ImageFile:Overview of the Common Language Infrastructure 2015.pngsvg|thumb|280px|Visual overview of the Common Language Infrastructure (CLI)]]
Among other things, the CLI specification describes the following fourfive aspects:-
 
; The [[Common Type System]] (CTS)
: A set of [[Datatype|typesdata type]]s and operations that are shared by all CTS-compliant [[programming language]]s.
;The [[Metadata (CLI)|Metadata]]
; Metadata : Information about program structure is language-agnostic, so that it can be referenced between languages and tools, making it easy to work with code written in a language you are not using.
:Information about program structure is [[Language-independent specification|language-agnostic]], so that it can be referenced between languages and tools, making it easy to work with code written in a language the developer is not using.
; Common Language Specification (CLS) : A set of base rules to which any language targeting the CLI should conform in order to interoperate with other CLS-compliant languages. The CLS rules define a subset of the Common Type System.
;The Common Language Specification (CLS)
; [[Virtual Execution System]] (VES) : The VES loads and executes CLI-compatible programs, using the metadata to combine separately generated pieces of code at runtime.
:The CLS, a subset of the CTS, are rules to which components developed with/for the supported languages must adhere.
:They apply to consumers (developers who are programmatically accessing a component that is CLS-compliant), frameworks (developers who are using a language compiler to create CLS-compliant libraries), and extenders (developers who are creating a tool such as a language compiler or a code parser that creates CLS-compliant components).
;The [[Virtual Execution System]] (VES)
:The VES loads and executes CLI-compatible programs, using the metadata to combine separately generated pieces of code at runtime.
:All compatible languages compile to [[Common Intermediate Language]] (CIL), which is an [[intermediate language]] that is abstracted from the platform hardware. When the code is executed, the platform-specific VES will compile the CIL to the [[machine language]] according to the specific hardware and operating system.
:In the CLI standard initially developed by Microsoft, the VES is implemented by the [[Common Language Runtime]] (CLR).
 
;The [[Standard Libraries (CLI)|Standard Libraries]]
All compatible languages compile to [[Common Intermediate Language]] (CIL), which is an [[intermediate language]] that is abstracted from the platform hardware. When the code is executed, the platform-specific VES will compile the CIL to the [[machine language]] according to the specific hardware.
:A set of libraries providing many common functions, such as file reading and writing. Their core is the [[Standard Libraries (CLI)#Base Class Library|Base Class Library]] (BCL).
 
== Standardization and licensing ==
In August 2000, [[Microsoft]], [[Hewlett-Packard]], [[Intel]], and others worked to standardize CLI. By December 2001, it was ratified by the [[Ecma International|ECMAEcma]], with [[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]] standardization following in April 2003.
 
Microsoft and theirits partners hold patents for CLI. ECMAEcma and ISO/IEC require that all patents essential to implementation be made available under "[[Reasonable and Non Discriminatorynon-discriminatory Licensinglicensing|reasonable and non-discriminatory (RAND) terms]].", butIt interpretationis ofcommon thisfor hasRAND ledlicensing to muchrequire some royalty controversypayment, particularlywhich incould thebe casea ofcause for concern with [[Mono (software)|Mono]]. {{as of|2013|January}}, neither Microsoft nor its partners have identified any patents essential to CLI implementations subject to RAND terms.{{cn|date=October 2024}}
 
As{{as of July |2009|July}},<ref>{{citeCite web
| url=http://port25.technet.com/archive/2009/07/06/the-ecma-c-and-cli-standards.aspx
| title=The ECMAEcma C# and CLI Standards - Port 25: The Open Source Community at Microsoft
|website=Port 25
| date=2009-07-06}}</ref>. [[Microsoft]] applied [[C_Sharp|C#]] and CLI under the [http://www.microsoft.com/interop/cp/default.mspx Community Promise] so anyone can safely implement those standards without fearing a patent lawsuit.
|first1=Peter |last1=Galli
|date=2009-07-06
|access-date=September 26, 2009
|archive-url=https://web.archive.org/web/20090709232640/http://port25.technet.com/archive/2009/07/06/the-ecma-c-and-cli-standards.aspx
|archive-date=July 9, 2009
|url-status=dead
}}</ref> [[Microsoft]] added [[C Sharp (programming language)|C#]] and CLI to the list of specifications that the [[Microsoft Community Promise]] applies to,<ref>{{Cite web |last=v-alje |title=[MS-DEVCENTLP]: Microsoft Community Promise |url=https://learn.microsoft.com/en-us/openspecs/dev_center/ms-devcentlp/8b8d1b7a-a10a-4667-9558-6d9c43adf60d |access-date=2023-05-01 |website=Microsoft Learn |date=March 16, 2023 |language=en-us}}</ref> so anyone can safely implement specified editions of the standards without fearing a patent lawsuit from Microsoft. To implement the CLI standard requires conformance to one of the supported and defined profiles of the standard, the minimum of which is the kernel profile. The kernel profile is actually a very small set of types to support in comparison to the well known core library of default .NET installations. However, the conformance clause of the CLI allows for extending the supported profile by adding new methods and types to classes, as well as deriving from new namespaces. But it does not allow for adding new members to interfaces. This means that the features of the CLI can be used and extended, as long as the conforming profile implementation does not change the behavior of a program intended to run on that profile, while allowing for unspecified behavior from programs written specifically for that implementation.
 
In 2012, Ecma and ISO/IEC published the new edition of the CLI standard.<ref name="iso_iec_23271_2012"/><ref name="ecma_355_2012"/>
== Support for dynamic languages ==
{{main|List of CLI languages}}
The Common Language Infrastructure currently has no built-in support for [[Type system#Dynamic_typing|Dynamically typed languages]] because the existing [[Common Intermediate Language]] is [[Type system#Static typing|statically typed]]<ref>{{cite web
| url=http://blogs.msdn.com/joelpob/archive/2005/07/01/434728.aspx
| title=CLR Dynamic languages under the hood
| date=2007-01-03
|last=Pobar|first=Joel
| accessdate=2008-01-26}}</ref>.
 
==Implementations==
The [[Dynamic Language Runtime]] is an ongoing effort to bring this support to the [[Common Language Runtime|CLR]].
*[[.NET Framework]] is Microsoft's original commercial implementation of the CLI. It only supports Windows. It was superseded by .NET in November 2020.
*[[.NET]], previously known as .NET Core, is the free and open-source multi-platform successor to .NET Framework, released under the [[MIT License]]
*[[.NET Compact Framework]] is Microsoft's commercial implementation of the CLI for portable devices and [[Xbox 360]].
*[[.NET Micro Framework]] is an open source implementation of the CLI for resource-constrained devices.
*[[Mono (software)|Mono]] is an alternative open source implementation of CLI and accompanying technologies, mainly used for mobile and game development.
*[[DotGNU]] is a decommissioned part of the GNU Project started in January 2001 that aimed to provide a [[free and open source software]] alternative to Microsoft's [[.NET Framework]].
 
==See Implementations also==
*[[Standard Libraries (CLI)]]
* The [[.NET Framework]] is built on the [[Common Language Runtime]], Microsoft's commercial implementation of the CLI for desktop and server systems, and also encompasses a large collection of programming frameworks and libraries.
*[[List of CLI languages]]
* [[Shared Source Common Language Infrastructure]] is a reference implementation of the CLI available from Microsoft, under the [[Shared source]] licensing program.
*[[.NET Standard]]
* [[.NET Compact Framework]] is Microsoft's commercial implementation of the CLI for portable devices and [[Xbox 360]].
* [[Microsoft Silverlight]], an implementation for use in web browsers - for [[Microsoft Windows]] and [[Mac OS X]].
* [[Mono (software)|Mono development platform]] is an [[open source]] implementation of CLI and accompanying technologies, sponsored by [[Novell]].
* [[Portable.NET]], part of the [[dotGNU]] project, is a [[Free Software]] implementation of ECMA-335 by [[Free Software Foundation]].
* [[VMKit]] part of [[Low Level Virtual Machine]] toolkit as of version 2.3. Implements very incomplete and alpha stage support of a [[Virtual Execution System]]. It is based on [[DotGNU]], [[Portable.NET]] corelib and class libraries.
 
== Notes ==
{{reflist|2Reflist}}
 
== References ==
* {{citeCite web
| title = Standard ECMA-335, Common Language Infrastructure (CLI)
| work = ECMAEcma International
| url = httphttps://www.ecma-international.org/publications-and-standards/standards/Ecmaecma-335.htm/
|access-date = November 1, 2023
| accessdate = August 31
}}
| accessyear = 2005
*{{Cite web
}}
|title = ISO/IEC 23271, Common Language Infrastructure
* {{cite web
|work = ISO/IEC
| title = ISO/IEC 23271, Common Language Infrastructure
|url = http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42927
| work = ISO
|access-date = September 27, 2006
| url = http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42927
}}
| accessdate = September 27
*{{Cite web
| accessyear = 2006
|title = Ecma C# and Common Language Infrastructure Standards
}}
|work = Microsoft Corporation
|url = http://msdn.microsoft.com/en-us/netframework/aa569283.aspx
|access-date = October 13, 2009
}}
*{{Cite web
|title = Language independence and language-independent components
|work = Microsoft Learn
|date = December 21, 2022
|url = https://learn.microsoft.com/en-us/dotnet/standard/language-independence
|access-date = May 19, 2023
}}
 
==External links==
{{DotNET}}
*{{Official|https://www.iso.org/standard/58046.html|ISO/IEC 23271:2012 Information technology — Common Language Infrastructure (CLI)}}
{{Ecma International Standards}}
 
{{Common Language Infrastructure}}
[[Category:.NET framework]]
{{Ecma International Standards}}
{{ISO standards}}
 
{{Use mdy dates|date=January 2019}}
[[ar:سي إل أي]]
{{Use American English|date=January 2019}}
[[cs:Common Language Infrastructure]]
[[deCategory:Common Language Infrastructure| ]]
[[Category:Ecma standards]]
[[fr:Common Language Infrastructure]]
[[Category:IEC standards]]
[[ko:공통 언어 기반]]
[[Category:ISO standards]]
[[it:Common Language Infrastructure]]
[[hu:Common Language Infrastructure]]
[[nl:Common Language Infrastructure]]
[[ja:共通言語基盤]]
[[pl:Common Language Infrastructure]]
[[ru:Common Language Infrastructure]]
[[sv:Common Language Infrastructure]]
[[zh:通用语言架构]]