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

Slides:



Advertisements
Apresentações semelhantes
PRÓ-INFORMÁTICA QUALIFICAÇÃO PROFISSIONAL
Advertisements

Programação Orientada a Objetos*
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Paulo Marques Hernâni Pedroso
Vitor Santos Microsoft Corporation
Segurança na .NET Framework
Desenvolvimento ASP.net
Prof. Thiago Pereira Rique
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Linguagens de Programação Orientadas a Objetos
Artur Rauen Luciano Peixoto
Programação Básica em Java
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Rafael Pinto Frederico Corrêa
Linguagens de programação
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
7 Abstração Genérica Unidades genéricas e instanciação.
Paradigmas da Programação
Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002
Laboratório de Programação de Computadores I
Como o AspectJ tece o código
A linguagem C#.
Classes e objetos Arrays e Sobrecarga
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
Construção de Compiladores para MSIL usando Microsoft Phoenix
Aula prática – geração de código (.NET)
Flávia Andrade de Souza Rodrigo Mibielli Peixoto
Curso de Nivelamento LCG
Linguagem Técnica de Programação VI
Linguagem Técnica de Programação VI Prof.: Luiz Gustavo Jordão Soares.
Paradigmas da Programação – Semestre 2 – Aula 2 Introdução ao VS.Net Professores: Fábio de Paula Santos Eduardo Mantovani.
Atributos, Encapsulamento e Interface em Java
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Curso de ISI (Implantação de Sistemas de Informação)
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Classes, Objetos, Atributos e Métodos JAVA
XIV Jornada de Cursos .NET com C# Antônio Júnior Bruno Inojosa.
Java Bytecode Software Básico Mitsuo Takaki.
1 Introdução a C# Sharp Shooters.NET Universidade Federal de Pernambuco Centro de Informática Recife, 15/08/2002 Autor: Marden Menezes Costa.
Ambiente de Execução - Rotinas
Pilhas Profa. Nádia Félix.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Bruno Inojosa MCP .NET Framework
Linguagem de Programação C#
Programação Orientada a Objetos - Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.
A linguagem C# Paulo Marques Departamento de Eng. Informática
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack Professor:
Estrutura de Controle em JAVA
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Linguagem I Strings.
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Arquitetura de Computadores 2009 Infra-estrutura Hardware
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP.NET Framework.NET com C#. Orientação a Objeto parte II.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
1.Net Framework Aluno Luiz GUStavo Martins Matéria Sistemas de Objetos Distribuídos.
 é uma iniciativa da Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas e aplicações.  Todo e qualquer código gerado.
Módulo II Capítulo 2: Bibliotecas
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

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

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

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

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

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

Assemblies Assembly metadata Type metadata

Assemblies

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

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

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

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

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

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

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

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

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

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

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

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"

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

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

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"

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

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 }

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

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

// 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

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

.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

.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

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)

Chamada de métodos

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

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