Ferramentas do programador Interpretador Um programa que executa outros programas escritos em uma linguagem. Ao contrario do compilador, não gera codigo-objeto. O programa pode ser analisado e executado linha a linha pelo interpretador. Eh comum que, no caso de erros, a execucao do programa seja interrompida na metade. Em geral: - mais lento que um compilador quanto aa execucao do codigo - o processo de desenvolvimento do programa pode ser mais rapido por eliminar os intervalos de compilacao - hoje em dia eh comum o uso de linguagens interpretadas para unir em tempo de execucao modulos de programas compilados - Não eh comum encontrar interpretadores para linguagem C. Eh mais comum a construcao de interpretadores para linguagens mais faceis para o programador e menos eficientes na execucao. Compilador Um programa que converte outro programa de algum codigo-fonte (ou linguagem de programacao) para linguagem de maquina (codigo-objeto). Alguns compiladores convertem para linguagem assembler, que entao eh convertida para linguagem de maquina por um montador. Tarefas de um compilador - alocacao automatica de variaveis - expressoes aritmeticas arbitrarias - estruturas de controle - escopo de variavel (escopo de um identificador eh a regiao de um programa fonte em que ele representa alguma coisa especifica) - operacoes de entrada e saida - funcoes de ordem mais alta (funcoes que recebem funcoes como parametros ou que retornam funcoes como resultado como não existem em linguagem C) - codigo portavel Exemplo: converter arquivo .C em .ASM Montador Converte de linguagem assembler para linguagem de maquina. Podem gerar codigo objeto relocavel, isso eh, que não há necessidade de ser carregado sempre na mesma posicao de memoria. Isto implica que os enderecos no programa devem ser ajustados conforme a posicao da memoria em que o programa for carregado, o que eh feito automaticamente pelo Carregador do programa a partir de dados fornecidos pelo link-editor. Exemplo: converter arquivo .ASM em .OBJ Link-editor (linkage editor, link loader, linker) Um programa que combina um ou mais arquivos contendo codigo objeto de modulos de programas compilados separadamente em um único arquivo contendo codigo carregavel ou executavel - responsavel por inserir no arquivo executavel a informacao de relocacao de enderecos e referencias entre modulos Exemplo: converter arquivos .OBJ em .EXE usando arquivos .LIB Carregador Coloca um programa em memoria e faz o computador executa-lo. O carregador pode ser um componente do Sistema operacional ao inves de um programa em separado. Depurador Programa que utiliza diversas tecnicas para auxiliar na deteccao de erros em um programa. - visualizar o conteudo de variaveis - colocar pontos de parada para examinar o estado do programa, por exemplo, executar o programa linha a linha e verificar como as variaveis são alteradas. Agregador de bibliotecas Bibliotecas são conjuntos de modulos de programas (sub-rotinas, funcoes e constantes(eg. Tabelas)) guardadas em um ou mais arquivos, usualmente na forma compilada, para ligacao (link) com outros programas. Bibliotecas podem ser conhecidas como SDKs (Software development kits, que podem conter tambem programas utilitarios e exemplos) ou frameworks (estes são padroes para criacao de bibliotecas personalizadas). Modulos de bibliotecas podem ser ligados por ligacao estatica, sendo a ligacao estabelecida no arquivo executavel, ou dinamica, onde a biblioteca pode estar num arquivo separado (.DLL ou .SO) e pode ser trocada sem necessidade de novo link ou compilacao. Exemplo: unir varios arquivos .OBJ em um .LIB Observação: Os arquivos .H de cabecalho da linguagem C não são bibliotecas. Eles apenas ditam como um programa em C deve se comunicar com funcoes presentes em outros modulos de programas. Exemplo: no UNIX a biblioteca libc contem o codigo que implementa as funcoes descritas nos arquivos de cabecalho stdlib.h ctype.h stdio.h string.h signal.h time.h e stdarg.h. Por outro lado, a biblioteca libm eh descrita apenas no arquivo math.h (mas algumas constantes importantes podem ser encontradas em float.h, limits.h, stdlib.h) Editores de recursos Comum em kits de desenvolvimento para programas de sistemas operacionais com interface grafica. Permite editar entre outras coisas icones, cursores de mouse, botoes, menus, fontes (de letras) e caixas de dialogo. Profiler Funciona de forma semelhante a um debugger, mas com objetivo de medir o tempo de execucao para apontar que regioes do programa estao tomando mais tempo. Uma vez detectado um gargalo desse tipo num programa, o codigo correspondente pode ser substituido por um codigo otimizado ou por um codigo escrito em linguagem de mais baixo nivel. Controle de versões Feramenta de engenharia de software que auxilia um numero maior de programadores modificarem um programa de forma concorrente. Em caso de conflito das modificacoes, uma versao antiga pode ser prontamente obtida.