Common Intermediate Language
Common Intermediate Language (CIL), tidligere Microsoft Intermediate Language (MSIL) er det laveste niveau af menneskelig-læsbar programkode defineret i specifikationen af Common Language Infrastructure (CLI) og anvendes af .NET Framework og Mono. Programmeringssprog der er målrettet et CLS-kompatibelt kørselsmiljø kompileres til CIL, der samles til objektkode i et bytekode-lignende format. CIL er et objektorienteret assemblersprog og er fuldstændig stakbaseret. Dets bytekode fortolkes til maskinkode eller afvikles af en virtuel maskine.
CIL anvendes til oversættelse af programmeringssprogene C#, Visual C++, VB.NET og J# til et maskinkodelignende sprog, for anvendelse i et NET Framework.
Generel information
Under kompileringen af .NET-programmeringssprog, bliver kildekoden oversat til CIL-kode i stedet for platforms- eller processeror-specifik objektkode. CIL er et CPU- og platforms-uafhængigt instruktionssæt der kan udføres i ethvert miljø der understøtter Common Language Infrastructure, såsom .NET runtime på Windows, eller det platformsuafhængige Mono runtime. I teorien overflødiggør det nødvendigheden af forskellige udgivelser af eksekverbare filer til forskellige platforme og CPU-typer. CIL verificeres for sikkerhedsfejl under kørslen, hvilket giver øget stabilitet og pålidelighed sammenlignet med eksekverbare filer oversat direkte til maskinkode.
Afviklingsprocessen ser således ud:
- Kildekoden konverteres til Common Intermediate Language, der kan betragtes som CIL's ækvivalente til assemblersprog for en CPU.
- CIL bliver dernæst samlet til en form for bytekode og en .NET-assembly oprettes.
- Under kørslen af en .NET-assembly bliver dens kode sendt gennem .NET-runtimes JIT-kompiler hvor den oversættes til maskinkode. Det er også muligt at prekompilere koden, hvilket overflødiggør dette trin på bekostning af portabiliteten af den eksekverbare fil.
- Maskinkoden bliver afviklet af computerens processor.
Instruktioner
CIL bytekode har instruktioner for følgende grupper af opgaver:
- Hent og gem
- Aritmetik
- Typekonvertering
- Oprettelse og manipulation af objekter
- Styring af operander i stakken
- Kontroloverførsel (branching)
- Metodekald og returnering
- Signalering af undtagelser (exceptions)
- Overvågningsbaseret synkronisering
Kompositorisk model
Common Intermediate Language er objektorienteret og stakbaseret. Det betyder at data lægges i stakken (push), i stedet for at blive udtrukket fra et register som i de fleste CPU-arkitekturer.
I x86 kunne det se således ud:
add eax, edx
Den tilsvarende kode i IL kan gengives sådan:
ldloc.0 ldloc.1 add stloc.0 // a = a + b eller a += b;
Her er der to lokale variabler der lægges i stakken. Når add-instruktionen bliver trukket ud af stakken hentes (poppes) de to operander og resultatet skubbes (pushes). Den tilbageværende værdi bliver trukket af stakken og lagret i den første lokale variabel.
Spire Denne it-artikel er en spire som bør udbygges. Du er velkommen til at hjælpe Wikipedia ved at udvide den. |