O objetivo deste trabalho é propiciar ao aluno uma oportunidade de escrever o mesmo programa com duas linguagens de programação distintas: uma com vinculação estática de tipo e outra com vinculação dinâmica de tipo. Isto ajudará o aluno a entender as diferentes características, as vantagens e as desvantagens destes dois tipos de linguagens.
O trabalho é individual. O compartilhamento de informações entre os alunos é permitido (e aconselhado), mas o compartilhamento de código não é permitido. Trabalhos que tenham porções significativas de código iguais, ou copiados da internet, serão anulados. Veja a resolução Nº 008/2007-COU para as possíveis sansões disciplinares.
Este trabalho vale 1,0 ponto extra na nota do primeiro bimestre. Apesar deste trabalho ser opcional, recomendo a todos que o façam. Isto porque nos próximos bimestres, os trabalhos de implementação valerão 50% da nota. Fazendo este trabalho o aluno estará se ambientando com a forma e se preparando para os próximos trabalhos.
Data de entrega: até o dia 16/05/2012 às 23:00h.
Implementar um programa chamado sstat que computa estatísticas de linhas de
arquivos texto.
O programa deve receber como parâmetro na linha de comando uma lista de caminhos (arquivos ou diretórios) e escrever na saída padrão a quantidade de linhas em cada tipo de arquivo e o total das linhas, considerando todos os arquivos passados na linha de comando e todos os arquivos na árvore dos diretórios passados na linha de comando.
Por exemplo, considere a existência dos seguintes arquivos com os respectivos números de linhas
| Arquivo | Número de linhas |
|---|---|
tests/hello/hello.c |
5 |
tests/hello/hello.cpp |
7 |
tests/command-line/sum/sum.c |
10 |
Se o programa for chamado com os parâmetros tests/hello/hello.c e
tests/command-line/sum/sum.c, a saída deve ser
15 c
15 totalO que significa que os arquivos com extensão .c têm 15 linhas, e o total de
linhas dos arquivos também foi 15 (só tinha um tipo de arquivo).
Se o programa for chamado com o parâmetro tests/, a saída deve ser
15 c
7 cpp
22 totalNeste caso, todos os arquivos da árvore do diretório tests/ foram
contabilizados.
A saída deve ser ordenada pelo número de linhas do tipo de arquivo (maior número de linhas primeiro), e em caso de número de linhas iguais, pela ordem alfabética do tipo (extensão) do arquivo. Os aquivos sem extensão devem ser ignorados. Observe que os números de linhas estão alinhados a esquerda e as extensões alinhadas a direita.
Duas versões deste programa devem ser escritas. Uma na linguagem Ada 2005 e outra na linguagem Lua 5.1. O compilador usado para o Ada deve ser o gnat (4.4 ou superior) e o interpretador do Lua deve ser o oficial da linguagem.
Não é permitido a utilização de nenhuma biblioteca que não seja padrão da linguagem, exceto a biblioteca LuaFileSystem para a versão do programa em Lua (necessária para listar as entradas de um diretório).
Os programas serão testados em um sistema Linux. Apesar de ser possível o desenvolvimento em outros sistemas, os programas utilizados pelos scripts fornecidos pelo professor (veja a seção download) para teste e envio do trabalho podem ser instalados facilmente em um sistema Linux.
Para facilitar o desenvolvimento dos programas, está disponível um “projeto”
com os arquivos iniciais de código, um programa testador e um Makefile para
compilar, testar e enviar os programas.
Para fazer o download do projeto é necessário ter o git instalado. Se você
utiliza um sistema GNU/Linux baseado no Debian (Mint, Ubuntu, etc), o git
pode ser instalado com o comando
sudo apt-get install gitPara fazer o download do projeto, execute o comando
git clone http://malbarbo.pro.br/git/sstatApós a execução deste comando, um diretório chamado sstat terá sido criado.
Dentro deste diretório existem diversos arquivos, em especial os arquivos
src/sstat.adb, onde o programa principal em Ada deve ser escrito, e o arquivo
src/sstat.lua, onde o programa principal em Lua deve ser escrito. Você pode
dividir os seus programas em mais de um arquivo, mas todos os arquivos de
código devem ficar no diretório src.
Todos os programas necessários para compilar os programas em Ada, interpretar os programas em Lua, executar o testador e enviar o trabalho podem ser instalados com o comando
sudo aptitude install git python2.7 make lua5.1 liblua5.1-filesystem0 gnatPara executar os testes, entre no diretório sstat e execute um dos comandos
make tests # para testar os programas em Ada e Lua
make test-ada # para testar apenas o programa em Ada
make test-lua # para testar apenas o programa em LuaEstes comandos compilam o programa em Ada antes de executá-lo.
Para enviar o trabalho, execute o comando
make enviarO script de envio criará um arquivo compactado com os arquivos a serem entregues para correção e enviará para a página do professor.
Após enviar o trabalho, o aluno deverá entrar na página da disciplina, imprimir e assinar o termo de autoria. O termo de autoria é um documento em que o aluno afirma que ele é o autor do código do trabalho que ele enviou. E que portanto, não copiou parte significativa do programa de outra pessoa ou da internet.
O trabalho deve ser enviado até as 23:00h do dia 16/05/2012. O termo de autoria assinado deve ser entregue pessoalmente ao professor no dia 17/05/12 no horário de aula.
Este trabalho vale 1,0 ponto (extra) na nota do primeiro bimestre. O trabalho será avaliado de acordo com os critérios:
Segue alguns links sobre as linguagens de programa Ada, Lua e do programa git.