34
Common Language Common Language Runtime Runtime Mauro Araújo e Rafael Borges Mauro Araújo e Rafael Borges {mscla, rmb2}@cin.ufpe.br {mscla, rmb2}@cin.ufpe.br

Common Language Runtime

  • Upload
    indra

  • View
    39

  • Download
    0

Embed Size (px)

DESCRIPTION

Common Language Runtime. Mauro Araújo e Rafael Borges {mscla, rmb2}@cin.ufpe.br. Sumário. Componentes COM CLR Assemblies Assembly metadata Type metadata MSIL Modelo de Execução Chamada de Métodos Interoperabilidade. Componentes. Características Genéricos Composicionais - PowerPoint PPT Presentation

Citation preview

Page 1: Common Language Runtime

Common Language Common Language RuntimeRuntime

Mauro Araújo e Rafael BorgesMauro Araújo e Rafael Borges{mscla, rmb2}@cin.ufpe.br{mscla, rmb2}@cin.ufpe.br

Page 2: Common Language Runtime

SumárioSumário ComponentesComponentes

COMCOM CLRCLR

AssembliesAssemblies Assembly metadataAssembly metadata Type metadataType metadata MSILMSIL

Modelo de ExecuçãoModelo de Execução Chamada de MétodosChamada de Métodos

InteroperabilidadeInteroperabilidade

Page 3: Common Language Runtime

ComponentesComponentes CaracterísticasCaracterísticas

GenéricosGenéricos ComposicionaisComposicionais EncapsuladosEncapsulados

Unidades IndependentesUnidades Independentes ImplantaçãoImplantação VersionamentoVersionamento

Modelo AtualModelo Atual ContratosContratos Definições de TiposDefinições de Tipos

Page 4: Common Language Runtime

COMCOM Especificação dos ContratosEspecificação dos Contratos

Sem padrãoSem padrão IDL, TLBIDL, TLB

DependênciasDependências Sem descriçãoSem descrição DLL HellDLL Hell

ContratosContratos FísicosFísicos Sem extensibilidadeSem extensibilidade

Page 5: Common Language Runtime

CLRCLR

Evolução do COMEvolução do COM

Assemblies e ContratosAssemblies e Contratos Auto-descritíveis (via Metadados)Auto-descritíveis (via Metadados) Extensíveis (via Atributos)Extensíveis (via Atributos) Descrevem dependênciasDescrevem dependências Side-by-side executionSide-by-side execution

Virtualização dos ContratosVirtualização dos Contratos Referência por AssinaturaReferência por Assinatura Independente de plataformaIndependente de plataforma Abstrai representação físicaAbstrai representação física

Page 6: Common Language Runtime

AssembliesAssemblies

Assembly metadata

Type metadata

Page 7: Common Language Runtime

AssembliesAssemblies

Page 8: Common Language Runtime

Compiler

Class Loader

JIT

ManagedNativeCode

Security Checks

Execution

Class Library(MSIL +

Metadata)

Source Code

EXE/DLL

(MSIL + METADATA)

Call to

uncompiled method

Trustedpre-JITedcode only

Modelo de ExecuçãoModelo de Execução

C#, VB, C++, Haskell, ...

Page 9: Common Language Runtime

Execution StateExecution State

Evaluation stack

Activation record

Evaluation stack

Incomingargument

sLocal

variables

top

Page 10: Common Language Runtime

Activation RecordActivation Record Alocados na pilha de Alocados na pilha de

execuçãoexecução Coleção de variáveis Coleção de variáveis

locaislocais Coleção de Coleção de

argumentos do argumentos do métodométodo

Numeração lógicaNumeração lógica Ordem de Ordem de

declaraçãodeclaração

0

0

1

1

2

2

...

...

0

0

1

1

2

2

...

...

0

0

1

1

2

2

...

...

Page 11: Common Language Runtime

Evaluation StackEvaluation Stack Onde a computação ocorre de fatoOnde a computação ocorre de fato

Alvo das instruções da CLRAlvo das instruções da CLR

Pilha lógicaPilha lógica Elementos não possuem um tamanho Elementos não possuem um tamanho

particularparticular Tipos primitivos Tipos primitivos Tipos Referência Tipos Referência

Structs Structs ... ...

Page 12: Common Language Runtime

Evaluation StackEvaluation Stack

top top

Cópia do valor da n-ésima variável local

ldloc n

top

top

add

v2v1 v1 + v2

Page 13: Common Language Runtime

Evaluation StackEvaluation Stack

top

top

stloc n

top

top arg2arg1 return value

call int32 [mscorlib] System.Math::Max(int32, int32)

Page 14: Common Language Runtime

Evaluation StackEvaluation Stack

top top

ldelem.u2

array indexarray ref. array elem.

Page 15: Common Language Runtime

OpcodeOpcode ComentárioComentárioCampo estáticoCampo estático ldsfldldsfld Op-arg: Op-arg: Type Class::field-nameType Class::field-name

Campo de instânciaCampo de instância ldfldldfld Op-arg: Op-arg: Type Class::field-nameType Class::field-name

Variável localVariável local ldlocldloc Op-arg: Op-arg: local variable ordinallocal variable ordinal

Argumentos de Argumentos de métodométodo ldargldarg Op-arg: Op-arg: formal argument formal argument

ordinalordinalElemento de arrayElemento de array ldelem.*ldelem.* Suffix: specialized for element Suffix: specialized for element

typetype

Carregando campos e Carregando campos e variáveisvariáveis

[mscorlib]System.Math :: PI

Type Class::field-name

Page 16: Common Language Runtime

Carregando constantesCarregando constantes

OpcodeOpcode ComentárioComentárionumbersnumbers ldc.*ldc.* Op-arg: Op-arg: number, number, Suffix denotes Suffix denotes

primitive typeprimitive type

stringsstrings ldstrldstr Op-arg: Op-arg: literal stringliteral string

nullnull ldnullldnull No argument is needed or No argument is needed or allowedallowed

Page 17: Common Language Runtime

Carregando endereçosCarregando endereços

OpcodeOpcode ComentárioComentárioCampo estáticoCampo estático ldsfldaldsflda Op-arg: Op-arg: Type Class::field-nameType Class::field-name

Campo de instânciaCampo de instância ldfldaldflda Op-arg: Op-arg: Type Class::field-nameType Class::field-name

Variável localVariável local ldlocaldloca Op-arg: Op-arg: local variable ordinallocal variable ordinal

Argumentos de Argumentos de métodométodo ldargaldarga Op-arg: Op-arg: formal argument formal argument

ordinalordinalElemento de arrayElemento de array ldelemaldelema Op-arg: Op-arg: Array ellement Array ellement

typenametypename

Page 18: Common Language Runtime

Armazenando campos Armazenando campos e variáveise variáveis

OpcodeOpcode ComentárioComentárioCampo estáticoCampo estático stsfldstsfld Op-arg: Op-arg: Type Class::field-nameType Class::field-name

Campo de instânciaCampo de instância stfldstfld Op-arg: Op-arg: Type Class::field-nameType Class::field-name

Variável localVariável local stlocstloc Op-arg: Op-arg: local variable ordinallocal variable ordinal

Argumentos de Argumentos de métodométodo stargstarg Op-arg: Op-arg: formal argument formal argument

ordinalordinalElemento de arrayElemento de array stelem.*stelem.* Suffix: specialized for element Suffix: specialized for element

typetype

[mscorlib]System.Math :: PI

Type Class::field-name

Page 19: Common Language Runtime

Instruções Instruções aritméticasaritméticas

InstruçãoInstrução int3int322

int6int644

nfloanfloatt

addadd Adição sem verificaçãoAdição sem verificação

add.ovfadd.ovf Verificação de overflowVerificação de overflow "signed" "signed"

add.ovf.unadd.ovf.un Verificação de overflow Verificação de overflow "unsigned""unsigned"

InstruçãoInstrução int3int322

int6int644

nfloanfloatt

divdiv Divisão "signed"Divisão "signed"

div.undiv.un DivisãoDivisão "unsigned" "unsigned"

remrem Resto Resto "signed""signed"

rem.unrem.un Resto Resto "unsigned""unsigned"

Page 20: Common Language Runtime

Instruções de desvio e Instruções de desvio e comparaçãocomparação Gerando valores booleanosGerando valores booleanos

clt, ceq, cgtclt, ceq, cgt

top top

clt

right operandleft operand Bool result

Page 21: Common Language Runtime

Instruções de desvio e Instruções de desvio e comparaçãocomparação

OperaçãoOperação Seq. de instruçõesSeq. de instruçõeslOp = rOplOp = rOp ceqceq

lOp != rOplOp != rOp ceq ; ldc.1 ; xorceq ; ldc.1 ; xor

lOp < rOplOp < rOp cltclt

lOp <= rOplOp <= rOp cgt ; ldc.1 ; xorcgt ; ldc.1 ; xor

lOp > rOplOp > rOp cgtcgt

lOp >= rOplOp >= rOp clt ; ldc.1 ; xorclt ; ldc.1 ; xor

Page 22: Common Language Runtime

Instruções de desvio e Instruções de desvio e comparaçãocomparação Executando o desvioExecutando o desvio

brfalsebrfalse ""Branch on false, zero or nullBranch on false, zero or null""

brtruebrtrue ""Branch on nonfalse or nonBranch on nonfalse or nonnullnull""

Page 23: Common Language Runtime

OperaçãoOperação InstruçãInstruçãoo

Seq. de Seq. de instruçõesinstruções

lOp = rOplOp = rOp beqbeq beq ; brtruebeq ; brtrue

lOp != rOplOp != rOp bne.unbne.un ceq ; brfalseceq ; brfalse

lOp < rOplOp < rOp bltblt clt ; brtrueclt ; brtrue

lOp <= rOplOp <= rOp bleble cgt ; brfalsecgt ; brfalse

lOp > rOplOp > rOp bgtbgt cgt ; brtruecgt ; brtrue

lOp >= rOplOp >= rOp bgebge clt ; brfalseclt ; brfalse

Instruções de desvio e Instruções de desvio e comparaçãocomparação

Page 24: Common Language Runtime

class HelloWorld { public static void Main() { System.Console.WriteLine("Hello World"); }}

Hello WorldHello World

.assembly extern mscorlib {}

.assembly hellocs {}

.module hellocs.exe

.class private auto ansi HelloWorld extends [mscorlib]System.Object{ .method public hidebysig static void Main() il managed { .entrypoint .maxstack 1 ldstr "Hello World" call void [mscorlib]System.Console::WriteLine(string) ret } .method public hidebysig specialname rtspecialname instance void .ctor() il managed { .maxstack 1 ldarg.0 call instance void [mscorlib]System.Object:: .ctor() ret }}

Page 25: Common Language Runtime

public class Console{ public static void WriteLn(){ System.Console.WriteLine(); } public static void WriteString(char[] str){ int len = str.Length; for( int i = 0; i < len && str[i] != '\0'; i++) System.Console.Write(str[i]); }}public class ProgArgs{ public static System.String[] argList = null; public static int ArgNumber() { if (ProgArgs.argList == null) return 0; else return argList.Length; }}

Desvios, loops,...Desvios, loops,...

Page 26: Common Language Runtime

// public static int ArgNumber() {// if (ProgArgs.argList = = null)// return 0;// else// return argList.Length;// }

.locals ([0] int32) ldsfld string[] ProgArgs::argList brtrue.s lb01 ldc.i4.0 stloc.0 br.s lb02lb01: ldsfld string[] ProgArgs::argList ldlen conv.i4 stloc.0lb02: ldloc.0 ret

Desvios, loops,...Desvios, loops,...

Page 27: Common Language Runtime

// public static void WriteString(char[] str){// int len = str.Length;// for( int i = 0; i < len && str[i] != '\0'; i++)// System.Console.Write(str[i]);// }

.locals ([0] int32 len, [1] int32 i) ldarg.0 // load argument str ldlen // get array length conv.i4 stloc.0 // store in len ldc.i4.0 stloc.1 // set i to 0 br.s lb03 // jump to testlb05: ldarg.0 ldloc.1 ldelem.u2 call void [mscorlib]System.Console::Write(wchar) ldloc.1 // load i and increment ldc.i4.1 add stloc.1 // store new value of ilb03: ldloc.1 ldloc.0 bge.s lb04 // test i >= len ldarg.0 ldloc.1 ldelem.u2 brtrue.s lb05 // test str[i] != 0lb04: ret

Page 28: Common Language Runtime

class Class1 {public int a;public string b;

Class1(int n, string s){a = n;b = s;

}

public int[] CreateArrayOfInt() {int[] array = new int[this.a];return array;

}

static void Main() {Class1 c = new Class1(3,"if724");int[] array = c.CreateArrayOfInt();

}}

Criando Objetos e Criando Objetos e arraysarrays

Page 29: Common Language Runtime

.method public hidebysig instance int32[] CreateArrayOfInt() cil managed{ .maxstack 1 .locals init ([0] int32[] 'array')

ldarg.0 // thisldfld int32 Class1::anewarr [mscorlib]System.Int32stloc.0ldloc.0ret

}

Criando Objetos e Criando Objetos e arraysarrays

Page 30: Common Language Runtime

.method private hidebysig static void Main() cil managed{ .entrypoint .maxstack 3 .locals init ([0] class Class1 c, [1] int32[] 'array')

ldc.i4.3ldstr "if724"newobj instance void Class1::.ctor(int32, string)stloc.0ldloc.0callvirt instance int32[] Class1::CreateArrayOfInt()stloc.1ret

}

Criando Objetos e Criando Objetos e arraysarrays

Page 31: Common Language Runtime

Chamando métodosChamando métodos

Métodos estáticosMétodos estáticos call void [mscorlib]System.Console::WriteLine(string)call void [mscorlib]System.Console::WriteLine(string)

Métodos de instância não-virtuaisMétodos de instância não-virtuais call instance void [mydll]MyNamespace.Class:: Method(int32)call instance void [mydll]MyNamespace.Class:: Method(int32)

Métodos de instância virtuaisMétodos de instância virtuais callvirt instance string callvirt instance string

[mscorlib]System.String::Insert(int32,string)[mscorlib]System.String::Insert(int32,string)

Page 32: Common Language Runtime

Chamada de métodosChamada de métodos

Page 33: Common Language Runtime

InteroperabilidadeInteroperabilidade Linguagem intermediária comumLinguagem intermediária comum

Especificação de subconjunto mínimo Especificação de subconjunto mínimo que deve ser suportados por todas as que deve ser suportados por todas as linguagenslinguagens CLSCLS

Page 34: Common Language Runtime

ReferênciasReferências Essential .NET – Volume 1Essential .NET – Volume 1

Don Box, with Chris SellsDon Box, with Chris Sells

Compiling for the .NET Common Compiling for the .NET Common Language RuntimeLanguage Runtime John GoughJohn Gough

Inside .NET FrameworkInside .NET Framework msdn.microsoft.com/librarymsdn.microsoft.com/library