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 Edgar José César de Figueiredo Neto -

Apresentações semelhantes


Apresentação em tema: "Construção de Compiladores para MSIL usando Microsoft Phoenix Edgar José César de Figueiredo Neto -"— Transcrição da apresentação:

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

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 2

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

4 Apresentação parcial Hoje: –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 4

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 5

6 Como Funciona o Phoenix Executables x86 x64 ARM IA64 MDIL … Inputs C++ Native MSIL Mixed mode Compilers - Tools - Plugins Code Analysis and Transformation Profiles, Patterns, Obfuscation, etc.. Phoenix IR

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

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

9 Phoenix IR 9 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 10 $L1: (references=0) #4 {*StaticTag}, {*NotAliasedTag} = START _main(T) #4 _main: (references=1) #4 _argc, _argv = ENTERFUNCTION #4 t273 = COMPARE(GT) _argc, 1 #7 CONDITIONALBRANCH(True) t273, $L7, $L6 #7 $L7: (references=1) #7 _message = ASSIGN &$SG3745 #8 GOTO $L8 #9 $L6: (references=1) #9 _message = ASSIGN &$SG3747 #10 GOTO $L8 #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 11

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) 12

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 13

14 Comparação Compiladores Haskell (2004.1) 14 ilasm.exe le2c.exe le1c.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.

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 15

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 ) 16

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 17

18 Dúvidas? 18

19 Agradecimentos Guilherme Amaral Avelino Andy Ayers (Arquiteto chefe do Phoenix) 19

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


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

Apresentações semelhantes


Anúncios Google