Common Language Infrastructure (CLI) is een gestandaardiseerd raamwerk ontwikkeld door Microsoft voor het bouwen en uitvoeren ervan toepassingen anders geschreven programmeertalen. Het biedt een taalneutraal platform dat code-interoperabiliteit mogelijk maakt, waardoor verschillende talen naadloos kunnen samenwerken.

Wat is een gemeenschappelijke taalinfrastructuur?
Common Language Infrastructure (CLI) is een gestandaardiseerde architectuur ontworpen door Microsoft ter ondersteuning van de ontwikkeling en uitvoering van softwareapplicaties die zijn geschreven in meerdere programmeertalen op hoog niveau. CLI biedt een omgeving waarin code uit verschillende talen met elkaar kan samenwerken, waarbij gebruik wordt gemaakt van een uniforme reeks services en bibliotheken.
Dit raamwerk omvat de definitie van gegevenstypen, code-uitvoering en andere runtime gedrag, waardoor ervoor wordt gezorgd dat programma's op verschillende computers kunnen worden uitgevoerd hardware en softwareplatforms zonder wijziging. Door het onderliggende platform te abstraheren, stelt CLI ontwikkelaars in staat code te schrijven in de taal van hun voorkeur, terwijl de compatibiliteit en prestaties behouden blijven. Het systeem omvat ook een robuust beveiligingsmodel, garbagecollection, afhandeling van uitzonderingen en ondersteuning voor dynamische typen.
Componenten van de gemeenschappelijke taalinfrastructuur
Common Language Infrastructure bestaat uit verschillende kerncomponenten die samen de ontwikkeling en uitvoering van applicaties in een meertalige omgeving vergemakkelijken. Elke component speelt een cruciale rol bij het garanderen van taalinteroperabiliteit, runtimebeheer en consistentie van de uitvoering. Ze bevatten:
- Algemeen typesysteem (CTS). CTS definieert hoe gegevenstypen worden gedeclareerd, gebruikt en beheerd in de runtime-omgeving. Het zorgt ervoor dat typen die in verschillende programmeertalen worden gebruikt, kunnen samenwerken door een gemeenschappelijk raamwerk op te zetten voor de representatie van gegevenstypen. Dit maakt een naadloze integratie en communicatie mogelijk tussen code die in verschillende talen is geschreven.
- Gemeenschappelijke taalspecificatie (CLS). CLS biedt een reeks regels en richtlijnen waaraan talen moeten volgen om ervoor te zorgen dat ze kunnen communiceren met andere CLS-compatibele talen. Deze specificatie definieert een subset van CTS die alle talen die zich richten op de CLI moeten ondersteunen, waardoor de interoperabiliteit wordt bevorderd en de taalbarrières worden verminderd.
- Virtueel uitvoeringssysteem (VES). VES, ook bekend als de Common Language Runtime (CLR) in het .NET-framework, is verantwoordelijk voor het beheer van de uitvoering van CLI-compatibele programma's. Het biedt diensten zoals geheugenbeheer, handhaving van de beveiliging, afhandeling van uitzonderingen en just-in-time (JIT) compilatie van tussentaalcode (IL) naar native machinecode.
- Metagegevens. Metadata beschrijft de structuur van code en de typen daarin, inclusief klassen, interfaces, methoden en velden. Het biedt essentiële informatie die de runtime gebruikt voor typecontrole, beveiliging en marshaling, waardoor een hoge mate van introspectie en zelfbeschrijving in de code mogelijk is.
- Tussentaal (IL). IL, ook bekend als Common Intermediate Language (CIL) of Microsoft Intermediate Language (MSIL), is de CPU-onafhankelijke set instructies waarnaar CLI-talen compileren. De VES voert IL uit door deze om te zetten in native code met behulp van JIT-compilatie of ahead-of-time (AOT)-compilatie, waardoor platformonafhankelijkheid en optimalisatie mogelijk zijn.
Hoe werkt de gemeenschappelijke taalinfrastructuur?
Common Language Infrastructure (CLI) werkt als een alomvattend raamwerk dat de ontwikkeling en uitvoering van applicaties die in meerdere programmeertalen zijn geschreven mogelijk maakt, waardoor interoperabiliteit en efficiënte uitvoering worden gegarandeerd. Hier is een overzicht van hoe CLI werkt:
- Compilatie van broncode. Wanneer u code schrijft in een door CLI ondersteunde taal, wordt de broncode wordt door de betreffende taalcompiler gecompileerd in een tussentaal (IL), die CPU-onafhankelijk is. Deze IL-code is een reeks instructies op laag niveau die alle CLI-compatibele talen gebruiken, waardoor consistentie en interoperabiliteit worden gegarandeerd.
- Generatie van metagegevens. Naast IL genereert de compiler metadata, die de typen, leden en referenties binnen de code beschrijven. Metagegevens omvatten informatie over klassen, methoden, velden en andere gegevensstructuren, waardoor typecontrole, beveiligingshandhaving en andere runtimeservices worden vergemakkelijkt.
- Assemblage creatie. De IL-code en metagegevens worden samen verpakt in een assembly, die een uitvoerbaar bestand (.exe) of een bibliotheek (.dll) kan zijn. Assemblies zijn de bouwstenen van CLI-applicaties en kunnen worden gedeeld en hergebruikt in verschillende applicaties.
- Uitvoering door virtueel uitvoeringssysteem (VES). Wanneer een assembly wordt uitgevoerd, neemt het virtuele uitvoeringssysteem (VES), ook wel bekend als de Common Language Runtime (CLR) in .NET, het over. De VES laadt de assembly, leest de metadata en begint met de uitvoering door IL-code om te zetten in native machinecode met behulp van just-in-time (JIT)-compilatie. Als alternatief kan AOT-compilatie (ahead-of-time) worden gebruikt om IL vóór uitvoering naar native code te converteren, waardoor de prestaties worden verbeterd.
- Geheugen management. VES verzorgt het geheugenbeheer via automatische garbagecollection. Dit proces identificeert en maakt geheugen vrij dat niet langer in gebruik is, waardoor geheugen wordt voorkomen lekken en het optimaliseren van het gebruik van hulpbronnen.
- Beveiligingshandhaving. CLI omvat een robuust beveiligingsmodel dat codetoegangsbeveiliging (CAS) en typeveiligheid afdwingt, waardoor ervoor wordt gezorgd dat code binnen gedefinieerde machtigingen en grenzen wordt uitgevoerd. Dit voorkomt ongeautoriseerde toegang en uitvoering van schadelijke code.
- Afhandeling van uitzonderingen. De VES biedt een consistent mechanisme voor de afhandeling van uitzonderingen in alle CLI-compatibele talen, waardoor ontwikkelaars robuuste en fouttolerante applicaties kunnen schrijven. Uitzonderingen worden op uniforme wijze beheerd, zodat fouten worden opgespoord en op de juiste manier worden afgehandeld.
- Interoperabiliteit. Het Common Type System (CTS) en de Common Language Specification (CLS) zorgen ervoor dat verschillende talen naadloos kunnen samenwerken. CTS definieert een gemeenschappelijke reeks gegevenstypen en bewerkingen, terwijl CLS de functies specificeert die talen moeten ondersteunen om interoperabiliteit te garanderen. Dit maakt de integratie mogelijk van componenten en bibliotheken die in verschillende talen zijn geschreven binnen één enkele applicatie.
Voordelen van de gemeenschappelijke taalinfrastructuur
Common Language Infrastructure (CLI) biedt talloze voordelen die de ontwikkeling en uitvoering van software in verschillende programmeertalen verbeteren. Deze voordelen dragen bij aan een grotere efficiëntie, interoperabiliteit en onderhoudbaarheid in het ontwikkelingsproces:
- Interoperabiliteit. Met CLI kunnen verschillende programmeertalen naadloos samenwerken. Hierdoor kunnen ontwikkelaars voor elke specifieke taak binnen één applicatie de beste taal gebruiken, waardoor samenwerking en hergebruik van code wordt vergemakkelijkt.
- Platformonafhankelijkheid. Programma's die met CLI zijn geschreven, kunnen zonder aanpassingen op verschillende hardware- en softwareplatforms worden uitgevoerd. Deze platformonafhankelijke compatibiliteit zorgt ervoor dat applicaties een breder publiek kunnen bereiken en zich gemakkelijk aan verschillende omgevingen kunnen aanpassen.
- Uniform type systeem. Het Common Type System (CTS) in CLI biedt een consistent raamwerk voor het definiëren en gebruiken van gegevenstypen. Deze standaardisatie vermindert typegerelateerde fouten en vereenvoudigt gegevensmanipulatie in verschillende talen.
- Beveiliging. CLI omvat een robuust beveiligingsmodel dat applicaties helpt beschermen tegen verschillende bedreigingen. Het dwingt de beveiliging en verificatie van codetoegang af en zorgt ervoor dat alleen veilige en geautoriseerde code wordt uitgevoerd.
- Beheerde uitvoering. Het virtuele uitvoeringssysteem (VES) beheert de uitvoering van programma's en levert diensten zoals garbage collection, exception handling en resource management. Deze beheerde omgeving vermindert het risico op geheugenlekken en verbetert de applicatiestabiliteit.
- Prestatie optimalisatie. CLI bevat functies die de prestaties optimaliseren, zoals just-in-time (JIT)-compilatie. Dit vertaalt tussentaalcode naar native machinecode op runtime, waardoor de uitvoeringssnelheid en efficiëntie worden verbeterd.
- Ontwikkeling flexibiliteit. Door meerdere programmeertalen te ondersteunen, biedt CLI ontwikkelaars de flexmogelijkheid om de beste tools en talen voor hun projecten te kiezen. Dit bevordert innovatie en stelt teams in staat bestaande expertise en middelen effectief in te zetten.