A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Common Language Runtime Mauro Araújo e Rafael Borges {mscla,

Apresentações semelhantes


Apresentação em tema: "Common Language Runtime Mauro Araújo e Rafael Borges {mscla,"— Transcrição da apresentação:

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

2 Sumário Componentes Componentes COM COM CLR CLR Assemblies Assemblies Assembly metadata Assembly metadata Type metadata Type metadata MSIL MSIL Modelo de Execução Modelo de Execução Chamada de Métodos Chamada de Métodos Interoperabilidade Interoperabilidade

3 Componentes Características Características Genéricos Genéricos Composicionais Composicionais Encapsulados Encapsulados Unidades Independentes Unidades Independentes Implantação Implantação Versionamento Versionamento Modelo Atual Modelo Atual Contratos Contratos Definições de Tipos Definições de Tipos

4 COM Especificação dos Contratos Especificação dos Contratos Sem padrão Sem padrão IDL, TLB IDL, TLB Dependências Dependências Sem descrição Sem descrição DLL Hell DLL Hell Contratos Contratos Físicos Físicos Sem extensibilidade Sem extensibilidade

5 CLR Evolução do COM Evolução do COM Assemblies e Contratos Assemblies e Contratos Auto-descritíveis (via Metadados) Auto-descritíveis (via Metadados) Extensíveis (via Atributos) Extensíveis (via Atributos) Descrevem dependências Descrevem dependências Side-by-side execution Side-by-side execution Virtualização dos Contratos Virtualização dos Contratos Referência por Assinatura Referência por Assinatura Independente de plataforma Independente de plataforma Abstrai representação física Abstrai representação física

6 Assemblies Assembly metadata Type metadata

7 Assemblies

8 Compiler Class Loader JIT Managed Native Code Security Checks Execution Class Library (MSIL + Metadata) Source Code EXE/DLL (MSIL + METADATA) Call to uncompiled method Trusted pre-JITed code only Modelo de Execução C#, VB, C++, Haskell,...

9 Execution State Evaluation stack Activation record Evaluation stack Incoming arguments Local variables top

10 Activation Record Alocados na pilha de execução Alocados na pilha de execução Coleção de variáveis locais Coleção de variáveis locais Coleção de argumentos do método Coleção de argumentos do método Numeração lógica Numeração lógica Ordem de declaração Ordem de declaração 0 0 1 1 2 2... 0 0 1 1 2 2 0 0 1 1 2 2

11 Evaluation Stack Onde a computação ocorre de fato Onde a computação ocorre de fato Alvo das instruções da CLR Alvo das instruções da CLR Pilha lógica Pilha lógica Elementos não possuem um tamanho particular Elementos não possuem um tamanho particular Tipos primitivos Tipos Referência Structs... Tipos primitivos Tipos Referência Structs...

12 Evaluation Stack top Cópia do valor da n-ésima variável local ldloc n top add v2 v1 v1 + v2

13 Evaluation Stack top stloc n top arg2 arg1 return value call int32 [mscorlib] System.Math::Max(int32, int32)

14 Evaluation Stack top ldelem.u2 array index array ref. array elem.

15 OpcodeComentário Campo estático ldsfld Op-arg: Type Class::field-name Campo de instância ldfld Op-arg: Type Class::field-name Variável local ldloc Op-arg: local variable ordinal Argumentos de método ldarg Op-arg: formal argument ordinal Elemento de array ldelem.* Suffix: specialized for element type Carregando campos e variáveis [mscorlib]System.Math :: PI Type Class::field-name

16 Carregando constantes OpcodeComentário numbersldc.* Op-arg: number, Suffix denotes primitive type stringsldstr Op-arg: literal string nullldnull No argument is needed or allowed

17 Carregando endereços OpcodeComentário Campo estático ldsflda Op-arg: Type Class::field-name Campo de instância ldflda Op-arg: Type Class::field-name Variável local ldloca Op-arg: local variable ordinal Argumentos de método ldarga Op-arg: formal argument ordinal Elemento de array ldelema Op-arg: Array ellement typename

18 Armazenando campos e variáveis OpcodeComentário Campo estático stsfld Op-arg: Type Class::field-name Campo de instância stfld Op-arg: Type Class::field-name Variável local stloc Op-arg: local variable ordinal Argumentos de método starg Op-arg: formal argument ordinal Elemento de array stelem.* Suffix: specialized for element type [mscorlib]System.Math :: PI Type Class::field-name

19 Instruções aritméticas Instruçãoint32int64nfloat add Adição sem verificação add.ovf Verificação de overflow "signed" add.ovf.un Verificação de overflow "unsigned" Instruçãoint32int64nfloatdiv Divisão "signed" div.un Divisão "unsigned" rem Resto "signed" rem.un Resto "unsigned"

20 Instruções de desvio e comparação Gerando valores booleanos Gerando valores booleanos clt, ceq, cgt clt, ceq, cgt top clt right operand left operand Bool result

21 Instruções de desvio e comparação Operação Seq. de instruções lOp = rOp ceq lOp != rOp ceq ; ldc.1 ; xor lOp < rOp clt lOp <= rOp cgt ; ldc.1 ; xor lOp > rOp cgt lOp >= rOp clt ; ldc.1 ; xor

22 Instruções de desvio e comparação Executando o desvio Executando o desvio brfalse brfalse "Branch on false, zero or null" "Branch on false, zero or null" brtrue brtrue "Branch on nonfalse or nonnull" "Branch on nonfalse or nonnull"

23 OperaçãoInstrução Seq. de instruções lOp = rOp beq beq ; brtrue lOp != rOp bne.un ceq ; brfalse lOp < rOp blt clt ; brtrue lOp <= rOp ble cgt ; brfalse lOp > rOp bgt cgt ; brtrue lOp >= rOp bge clt ; brfalse Instruções de desvio e comparação

24 class HelloWorld { public static void Main() { System.Console.WriteLine("Hello World"); } Hello 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 }

25 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,...

26 // 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 lb02 lb01: ldsfld string[] ProgArgs::argList ldlen conv.i4 stloc.0 lb02: ldloc.0 ret Desvios, loops,...

27 // 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 test lb05: 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 i lb03: ldloc.1 ldloc.0 bge.s lb04// test i >= len ldarg.0 ldloc.1 ldelem.u2 brtrue.s lb05// test str[i] != 0 lb04: ret

28 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 arrays

29 .method public hidebysig instance int32[] CreateArrayOfInt() cil managed {.maxstack 1.locals init ([0] int32[] 'array') ldarg.0// this ldfld int32 Class1::a newarr [mscorlib]System.Int32 stloc.0 ldloc.0 ret } Criando Objetos e arrays

30 .method private hidebysig static void Main() cil managed {.entrypoint.maxstack 3.locals init ([0] class Class1 c, [1] int32[] 'array') ldc.i4.3 ldstr "if724" newobj instance void Class1::.ctor(int32, string) stloc.0 ldloc.0 callvirt instance int32[] Class1::CreateArrayOfInt() stloc.1 ret } Criando Objetos e arrays

31 Chamando métodos Métodos estáticos Métodos estáticos call void [mscorlib]System.Console::WriteLine(string) call void [mscorlib]System.Console::WriteLine(string) Métodos de instância não-virtuais Mé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 virtuais Métodos de instância virtuais callvirt instance string [mscorlib]System.String::Insert(int32,string) callvirt instance string [mscorlib]System.String::Insert(int32,string)

32 Chamada de métodos

33 Interoperabilidade Linguagem intermediária comum Linguagem intermediária comum Especificação de subconjunto mínimo que deve ser suportados por todas as linguagens Especificação de subconjunto mínimo que deve ser suportados por todas as linguagens CLS CLS

34 Referências Essential.NET – Volume 1 Essential.NET – Volume 1 Don Box, with Chris Sells Don Box, with Chris Sells Compiling for the.NET Common Language Runtime Compiling for the.NET Common Language Runtime John Gough John Gough Inside.NET Framework Inside.NET Framework msdn.microsoft.com/library msdn.microsoft.com/library


Carregar ppt "Common Language Runtime Mauro Araújo e Rafael Borges {mscla,"

Apresentações semelhantes


Anúncios Google