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 total
O 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 total
Neste 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 git
Para fazer o download do projeto, execute o comando
git clone http://malbarbo.pro.br/git/sstat
Apó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 gnat
Para 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 Lua
Estes comandos compilam o programa em Ada antes de executá-lo.
Para enviar o trabalho, execute o comando
make enviar
O 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
.