Ühine keele infrastruktuur (CLI) on rahvusvaheliste tehniliste standardite kogum, mis edendab programmeerimiskeelte koostalitlusvõimet. CLI võimaldab ka paljudel kõrgetasemelistel keeltel arendada platvormidest ja arhitektuuridest sõltumatuid rakendusi. Selleks otstarbeks on rühmitatud rohkem kui 30 programmeerimiskeelt, mis kasutavad CLI-ga ühildumiseks nelja levinud keele programmeerimisspetsifikatsioonide osa.
Kasutades nn tavatüüpi süsteemi (CTS), kasutades andmetüüpide ja operatsioonide kogumit ning programmeerimisstruktuuride metaandmeid, võimaldab koodide kirjutamist keelte vahel. CLI kompileerib keeled ühiseks vahekeeleks (CIL) ja CIL-ist edastab rakenduse aspektid montaaži masinakeelele, mis käsitleb riistvara. Lisaks on olemas ühised keelespetsifikatsioonid (CLS), mis on põhireeglid, mis on seatud kasutamiseks iga keele jaoks, mis otsivad koostööd, ja virtuaalne täitmissüsteem (VES) kõigi CLI-ga ühilduvate programmide käitamiskoodide laadimiseks, täitmiseks ja genereerimiseks. .
Enamik CLI-ga ühilduvaid keeli kompileeritakse otse CIL-i, kasutades ühiskeele käitusaega (CLR). Pärast kompileerimist ja vahemällu salvestamist eraldab õigeaegne kompilaator olemasolevast arhitektuurist masinkoodi. Koostemasina koodikonstruktsiooni saab konstrueerida ka enne CLR-i, kasutades enneaegset kompilaatorit.
Selleks, et CLI-ühilduvad keeled saaksid ära kasutada objekti spetsiifilisust, määrab levinud keele infrastruktuur, et objektid peavad kutsumisel paljastama ainult need omadused, mis neil on teiste CLI-ga ühilduvate keeltega ühised. Koodi komponendid, mis on välja töötatud ainult CTS-is aktsepteeritud andmetüüpide kasutamiseks, on CLI-ga ühilduvad ja juurdepääsetavad kõigile teistele CLI-ga ühilduvatele keeltele. Lisaks jäetakse CLS-ist välja kõik keelekonstruktsioonid, mida ei saa koodi tüübiohutusega kiiresti kontrollida, nii et CLS-iga ühilduvaks võib pidada ainult kontrollitavaid koode.
Mõned programmeerimisfunktsioonid on ühised nii kompilaatoritele kui ka arendajatele ning teised on saadaval ainult kompilaatoritele. Loend on pikk ja täis kasulikke funktsioone. Funktsioon, mis on saadaval ainult kompilaatoritele, on: märksõnad, mis pakuvad viiteidentifikaatoreid ja võivad alistada virtuaalsed meetodid märksõnadeks olevate nimedega. Nii kompilaatoritele kui ka arendajatele saadaval olev funktsioon sisaldab: modifikaatorifunktsioonid, mis ütlevad, et atribuut ja selle hindajad peavad olema kõik „staatilised“, kõik peavad olema „virtuaalsed“, kõik peavad olema „eksemplarid“.
Rakendusprogrammid on mõeldud lauaarvutitele, serveritele, mobiilseadmetele ja mängukonsoolidele. Arvuti nägemise täiustamise programmid ja madala tasemega virtuaalmasina tööriistakomplektid on samuti välja töötatud tavakeele infrastruktuuriga ühilduvatest keeltest. Ühise keele infrastruktuuri käitusajad eraldavad süsteemiressursse ja helistavad välisseadmetele tõhusalt, kuigi need on platvormist sõltumatud.