Spring til indhold

Common Intermediate Language

Fra Wikipedia, den frie encyklopædi

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 runtimeWindows, 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:

  1. Kildekoden konverteres til Common Intermediate Language, der kan betragtes som CIL's ækvivalente til assemblersprog for en CPU.
  2. CIL bliver dernæst samlet til en form for bytekode og en .NET-assembly oprettes.
  3. 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.
  4. 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.