Avaliação De Performance De Interpretadores Ruby
Total Page:16
File Type:pdf, Size:1020Kb
Universidade Federal de Santa Catarina Centro Tecnológico Curso de Sistemas de Informação Wilson de Almeida Avaliação de Performance de Interpretadores Ruby Florianópolis 2010 Wilson de Almeida Avaliação de Performance de Interpretadores Ruby Monograa apresentada ao Curso de Sistemas de Informação da UFSC, como requisito para a obten- ção parcial do grau de BACHAREL em Sistemas de Informação. Orientador: Lúcia Helena Martins Pacheco Doutora em Engenharia Florianópolis 2010 Almeida, Wilson Avaliação de Performance de Interpretadores Ruby / Wilson Al- meida - 2010 xx.p 1.Performance 2. Interpretadores.. I.Título. CDU 536.21 Wilson de Almeida Avaliação de Performance de Interpretadores Ruby Monograa apresentada ao Curso de Sistemas de Informação da UFSC, como requisito para a obten- ção parcial do grau de BACHAREL em Sistemas de Informação. Aprovado em 21 de junho de 2010 BANCA EXAMINADORA Lúcia Helena Martins Pacheco Doutora em Engenharia José Eduardo De Lucca Mestre em Ciências da Computação Eduardo Bellani Bacharel em Sistemas de Informação Aos meus pais e meu irmão. Aos familiares e amigos, em especial pra mi- nha eterna amiga Liliana, que está torcendo por mim de onde ela estiver. Agradecimentos Agradeço ao meu amigo, colega de curso, parceiro de trabalhos e orientador Eduardo Bellani, pelo encorajamento, apoio e seus ricos conselhos sobre o melhor direci- onamento deste trabalho. A professora Lúcia Helena Martins Pacheco pela orientação, amizade, e pela paciência, sem a qual este trabalho não se realizaria. Ao professor José Eduardo Delucca, por seus conselhos objetivos e pontuais. Todos os meus amigos que incentivaram e compreenderam a minha ausência nesse período de corrida atrás do objetivo de concluir o curso. Obrigado Mariana, Priscilla, Rafael e Rafaela. Sumário Lista de Figuras 6 Lista de Tabelas 10 1 Objetivo Geral 11 2 Objetivos Especícos 12 3 Justicativa 13 4 Linguagens de programação 14 4.1 Paradigma . 14 4.1.1 Programação funcional . 14 4.1.2 Programação estruturada . 15 4.1.3 Programação orientada a objetos . 15 4.1.4 Programação lógica . 18 4.1.5 Programação imperativa . 18 4.2 Estrutura de Tipos . 19 4.2.1 Fortemente Tipada . 19 4.2.2 Dinamicamente Tipada . 19 4.3 Grau de abstração . 19 4.3.1 Linguagem de programação de baixo nível . 19 4.3.2 Linguagem de programação de alto nível . 19 4.4 Modelo de execução . 20 4.4.1 Linguagem de programação compiladas . 20 4.4.2 Linguagem de programação interpretadas . 20 4.4.3 Linguagens de Script . 20 5 Compiladores 24 5.1 Análise . 25 5.2 Síntese . 26 5.3 Análise Léxica . 26 5.4 Análise Sintática . 28 5.5 Análise Semântica . 29 5.6 Geração de Código Intermediário . 30 5.7 Otimização de Código . 30 5.8 Geração de Código . 30 6 Interpretadores 31 7 Ruby 35 8 Metodologia 42 8.1 Saber o que está sendo medido . 42 8.2 Medir a coisa certa . 43 8.3 Saber como as opções se combinam . 43 8.4 Sistemas pessoais contra sistemas de tempo compartilhado . 44 8.5 Medir com o hardware em todas as condições . 44 9 Ferramentas 45 9.1 RVM - Ruby Version Manager . 45 9.2 time . 47 9.3 ps ........................................ 48 9.4 JRuby . 50 4 9.5 Ruby Enterprise Edition . 50 9.6 Ruby MRI 1.8.6 . 50 9.7 Ruby MRI 1.8.7 . 51 9.8 Ruby MRI 1.9.1 . 51 10 Desenvolvimento 52 10.1 Contexto . 52 10.2 Ambiente . 53 11 Testes 55 11.1 Tarai . 56 11.2 Tak . 62 11.3 CTak . 70 11.4 Escrita em arquivos . 79 11.5 Leitura de arquivos . 86 12 Conclusão 93 5 Lista de Figuras 5.1 Um compilador - baseado no exemplo do livro Alfred V. Aho and Ullman [1986] . 26 5.2 Um interpretador - baseado no exemplo do livro Alfred V. Aho and Ullman [1986] . 26 7.1 Linguagens de programação ancestrais . 36 11.1 Algoritmo Tarai - Média do Tempo real (milisegundos) por Média da Me- mória RAM utilizada (kilobytes) . 59 11.2 Algoritmo Tarai - Média do Tempo do usuário (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 59 11.3 Algoritmo Tarai - Média do Tempo do sistema (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 60 11.4 Algoritmo Tarai - Linha do tempo do uso de memória RAM pelo JRuby em kilobytes. 60 11.5 Algoritmo Tarai - Linha do tempo do uso de memória RAM pelo Ruby Enterprise Edition em kilobytes. 61 11.6 Algoritmo Tarai - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.6 em kilobytes. 61 11.7 Algoritmo Tarai - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.7 em kilobytes. 62 11.8 Algoritmo Tarai - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.9.1 em kilobytes. 62 11.9 Algoritmo Tak - Média do Tempo real (milisegundos) por Média da Me- mória RAM utilizada (kilobytes) sem a presença do JRuby no gráco . 66 11.10Algoritmo Tak - Média do Tempo do usuário (milisegundos) por Média da Memória RAM utilizada (kilobytes) sem a presença do JRuby no gráco . 66 11.11Algoritmo Tak - Média do Tempo do sistema (milisegundos) por Média da Memória RAM utilizada (kilobytes) sem a presença do JRuby no gráco . 67 11.12Algoritmo Tak - Média do Tempo real (milisegundos) por Média da Me- mória RAM utilizada (kilobytes) . 67 11.13Algoritmo Tak - Média do Tempo do usuário (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 68 11.14Algoritmo Tak - Média do Tempo do sistema (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 68 11.15Algoritmo Tak - Linha do tempo do uso de memória RAM pelo JRuby em kilobytes . 69 11.16Algoritmo Tak - Linha do tempo do uso de memória RAM pelo Ruby Enterprise Edition em kilobytes . 69 11.17Algoritmo Tak - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.6 em kilobytes . 70 11.18Algoritmo Tak - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.7 em kilobytes . 70 11.19Algoritmo Tak - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.9.1 em kilobytes . 71 11.20Algoritmo CTak - Média do Tempo real (milisegundos) por Média da Me- mória RAM utilizada (kilobytes) sem a presença do JRuby no gráco . 75 11.21Algoritmo CTak - Média do Tempo do usuário (milisegundos) por Média da Memória RAM utilizada (kilobytes) sem a presença do JRuby no gráco 75 11.22Algoritmo CTak - Média do Tempo do sistema (milisegundos) por Média da Memória RAM utilizada (kilobytes) sem a presença do JRuby no gráco 76 11.23Algoritmo CTak - Média do Tempo real (milisegundos) por Média da Me- mória RAM utilizada (kilobytes) . 76 11.24Algoritmo CTak - Média do Tempo do usuário (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 77 7 11.25Algoritmo CTak - Média do Tempo do sistema (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 77 11.26Algoritmo CTak - Linha do tempo do uso de memória RAM pelo JRuby em kilobytes . 78 11.27Algoritmo CTak - Linha do tempo do uso de memória RAM pelo Ruby Enterprise Edition em kilobytes . 78 11.28Algoritmo CTak - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.6 em kilobytes . 79 11.29Algoritmo CTak - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.7 em kilobytes . 79 11.30Algoritmo CTak - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.9.1 em kilobytes . 80 11.31Algoritmo de escrita em arquivos - Média do Tempo real (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 83 11.32Algoritmo de escrita em arquivos - Média do Tempo do usuário (milisegun- dos) por Média da Memória RAM utilizada (kilobytes) . 83 11.33Algoritmo de escrita em arquivos - Média do Tempo do sistema (milise- gundos) por Média da Memória RAM utilizada (kilobytes) . 84 11.34Algoritmo de escrita em arquivos - Linha do tempo do uso de memória RAM pelo JRuby em kilobytes . 84 11.35Algoritmo de escrita em arquivos - Linha do tempo do uso de memória RAM pelo Ruby Enterprise Edition em kilobytes . 85 11.36Algoritmo de escrita em arquivos - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.6 em kilobytes . 85 11.37Algoritmo de escrita em arquivos - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.8.7 em kilobytes . 86 11.38Algoritmo de escrita em arquivos - Linha do tempo do uso de memória RAM pelo Ruby MRI 1.9.1 em kilobytes . 86 11.39Algoritmo de leitura de arquivos - Média do Tempo real (milisegundos) por Média da Memória RAM utilizada (kilobytes) . 89 8 11.40Algoritmo de leitura de arquivos - Média do Tempo do usuário (milisegun- dos) por Média da Memória RAM utilizada (kilobytes) . 90 11.41Algoritmo de leitura de arquivos - Média do Tempo do sistema (milisegun- dos) por Média da Memória RAM utilizada (kilobytes) . 90 11.42Algoritmo de leitura de arquivos - Linha do tempo do uso de memória RAM pelo JRuby em kilobytes . 91 11.43Algoritmo de leitura de arquivos - Linha do tempo do uso de memória RAM pelo Ruby Enterprise Edition em kilobytes . 91 11.44Algoritmo de.