Common Language Infrastructure (CLI) är en uppsättning internationella tekniska standarder som främjar interoperabilitet för datorprogrammeringsspråk. CLI tillåter också många högnivåspråk att utveckla applikationer som är oberoende av plattformar och arkitekturer. Det finns mer än 30 programmeringsspråk grupperade för detta ändamål och som använder fyra divisioner av vanliga språkprogrammeringsspecifikationer för att bli CLI-kompatibla.
Att använda sig av det som kallas ett gemensamt typsystem (CTS), med hjälp av en uppsättning datatyper och operationer och metadatainformation på programmeringsstrukturer möjliggör korsspråkig kodskrivning. CLI:n kompilerar språk till ett gemensamt mellanspråk (CIL) och kommunicerar från CIL applikationsaspekterna till monteringsmaskinens språk, som adresserar hårdvaran. Dessutom finns det gemensamma språkspecifikationer (CLS), som är en basregler som är satta för användning av alla språk som söker interoperation, och ett virtuellt exekveringssystem (VES) för laddning, exekvering och generering av körkoder för alla CLI-kompatibla program .
De flesta CLI-kompatibla språk kompileras direkt till CIL med användning av common language runtime (CLR). Efter att ha kompilerats och cachelagrats tillägnar en just-in-time kompilator maskinkod från den befintliga arkitekturen. Monteringsmaskinens kodkonstruktion kan också konstrueras före CLR med en kompilator i förväg.
För att CLI-kompatibla språk ska kunna dra fördel av objektspecificitet, anger gemensam språkinfrastruktur att objekt endast behöver exponera de funktioner som de har gemensamma med de andra CLI-kompatibla språken när de anropas. Komponenter av kod som utvecklats för att endast använda datatyper som accepteras i CTS sägs vara CLI-kompatibla och tillgängliga för alla andra CLI-kompatibla språk. Dessutom utesluts alla konstruktioner av ett språk som inte kan verifieras snabbt av kodens typsäkerhet från CLS, så att endast verifierbara koder kan sägas vara CLS-kompatibla.
Vissa programmeringsfunktioner är gemensamma för både kompilatorer och utvecklare och andra är endast tillgängliga för kompilatorer. Listan är lång och full av användbara funktioner. En funktion som endast är tillgänglig för kompilatorer är: nyckelord som tillhandahåller referensidentifierare och som kan åsidosätta virtuella metoder med namn som är nyckelord. En funktion som är tillgänglig för både kompilatorer och utvecklare inkluderar: modifieringsfunktioner som säger att en egenskap såväl som dess bedömare måste vara ”statiska”, alla måste vara ”virtuella”, måste alla vara ”instanser”.
Implementeringsprogram är för stationära datorer, servrar, mobila enheter och spelkonsoler. Program för förbättring av datorseendet och virtuella maskinverktyg på låg nivå utvecklas också från språk som är kompatibla med vanliga språkinfrastrukturer. Körtiderna för den gemensamma språkinfrastrukturen allokerar systemresurser och anropar kringutrustning på ett effektivt sätt, även om de är plattformsoberoende.