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

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

Construção de Compiladores para MSIL usando Microsoft Phoenix

Apresentações semelhantes


Apresentação em tema: "Construção de Compiladores para MSIL usando Microsoft Phoenix"— Transcrição da apresentação:

1 Construção de Compiladores para MSIL usando Microsoft Phoenix
Edgar José César de Figueiredo Neto - Construção de Compiladores para MSIL usando Microsoft Phoenix

2 O projeto Proposta Analisar a utilização do Phoenix para construção de compiladores para MSIL integrando as linguagens LE1, LE2 e LF1 para .NET

3 O projeto Objetivos Analisar a viabilidade de se construir compiladores para MSIL usando o Microsoft Phoenix Contribuir com a comunidade do Microsoft Phoenix, disponibilizando o resultado do projeto como exemplo prático. Viabilizar a integração com a plataforma .NET de modo que haja interoperabilidade entre as linguagens dessa disciplina com linguagens como C#, VB.NET, etc. Comparar os resultados do uso Phoenix com os obtidos por projetos anteriores que já construíram compiladores destas linguagens para MSIL, porém construídos em Haskell.

4 Apresentação parcial Hoje: Próxima apresentação
Breve apresentação do Microsoft Phoenix Comparação com o projeto de Compilador Linguagem de Expressões 1 Dificuldades encontradas Próxima apresentação Compilador Linguagem de Expressões 2 Compilador Linguagem Funcional 1 Considerações finais

5 Apresentação do Phoenix
Phoenix é o codinome para a futura tecnologia da Microsoft para construção de compiladores Atualmente está em fase de pesquisa e desenvolvimento pela Microsoft Research Uma nova versão é lançada a cada 6 meses

6 Como Funciona o Phoenix
Compilers - Tools - Plugins Executables x86 x64 ARM IA64 MDIL Inputs C++ Native MSIL Mixed mode Phoenix IR Use Control Flow Graph within FuncUnit. Walk over all metadata (easily) Walk over all debug info (easily) Extract instruction operands for inspection Use SSA Use alias info Clone existing FuncUnit. Clone instruction ranges Use Call Graph. Run Simulator/Lattice Discover Loops Use Dataflow package Code Analysis and Transformation Profiles, Patterns, Obfuscation, etc..

7 Phoenix IR Representação fortemente tipada Vários níveis de abstração
HIR (High-level IR) – totalmente independente MIR (Mid-level IR) – dependente do ambiente de execução LIR (Low-lever IR) – totalmente dependente EIR (Encoded IR) – código binário Representa todo o fluxo de dados e instruções do código

8 Phoenix IR Entidades Representadas: Tipos Funções Símbolos Instruções
Operandos ...

9 Phoenix IR void main(int argc, char** argv) { char * message; if (argc > 1) message = "Hello, World\n"; else message = "Goodbye, World\n"; printf(message); }

10 Phoenix IR $L1: (references=0) #4
{*StaticTag}, {*NotAliasedTag} = START _main(T) #4 _main: (references=1) #4 _argc, _argv = ENTERFUNCTION #4 t = COMPARE(GT) _argc, #7 CONDITIONALBRANCH(True) t273, $L7, $L #7 $L7: (references=1) #7 _message = ASSIGN &$SG #8 GOTO $L #9 $L6: (references=1) #9 _message = ASSIGN &$SG #10 GOTO $L #10 $L8: (references=2) #10 {*CallTag} = CALL* &_printf, _message, {*CallTag}, $L5(EH) #12 RETURN 0, $L3(T) #13 $L5: (references=1) #13 UNWIND #13 $L3: (references=1) #13 EXITFUNCTION #13 $L2: (references=0) #13 END {*StaticTag} #13

11 Phoenix IR Uma vez que é gerada a IR o Phoenix
Gerencia tabelas de tipos e nomes Gerencia alocação de memória “stack” e “heap” Gerencia ambiente de compilação Pode criar o output para qualquer das plataformas suportadas Ou pelo menos era isso que deveria fazer 

12 LE1 e Phoenix A BNF permaneceu a mesma
A estrutura das classes permaneceu a mesma Foram adotados alguns padrões de nomenclatura da plataforma .NET O método avaliar() das classes resulta em um Operador do Phoenix (Phx.IR.Operand)

13 Comparação Em a equipe de Furtado, Danzi e Monteiro implementou 3 compiladores em Haskell para LE2, LF1 e LF2 A abordagem utilizada por eles consistia em gerar um arquivo de texto (“.il”) que depois seria compilado para uma DLL ou um executável

14 Comparação Compiladores Haskell (2004.1) Compilador Phoenix ilasm.exe
le2c.exe JIT compiler Compilador Phoenix A maioria dos compiladores MSIL construídos com o Phoenix encontrados usa a abordagem acima, apesar de ser possível construir um assembly diretamente, como fica provado com este projeto. le1c.exe

15 Demonstração Demonstração do compilador de LE1
Construção da gramática com ANTLR Representação da Linguagem em .NET Geração de Phoenix IR Fluxo de instruções do Phoenix

16 Dificuldades encontradas
Phoenix é uma tecnologia em desenvolvimento, portanto muitos aspectos ainda não foram implementados Para algumas funcionalidades, é preciso “injetar” LIR (referências a registradores do Framework .NET) no meio do seu código A comunidade de usuários do Phoenix é muito limitada o que dificulta o acesso a suporte e resolução de dúvidas Apenas uma pessoa responde as perguntas do fórum oficial (o arquiteto chefe do projeto )

17 Dificuldades encontradas
Dos poucos compiladores para .NET já construídos com o Phoenix, não foi encontrado nenhum que utilizasse a abordagem desse projeto. Fluxo completo desde a gramática até a geração de um assembly .NET

18 Dúvidas?

19 Agradecimentos Guilherme Amaral Avelino (gaa@cin.ufpe.br)
Andy Ayers (Arquiteto chefe do Phoenix)

20 Construção de Compiladores para MSIL usando Microsoft Phoenix
Edgar José César de Figueiredo Neto - Construção de Compiladores para MSIL usando Microsoft Phoenix


Carregar ppt "Construção de Compiladores para MSIL usando Microsoft Phoenix"

Apresentações semelhantes


Anúncios Google