Linguagens e Ambientes de Programação (2022/2023)



Teórica 18 (10/mai/2023)

Ambientes de programação. Estudo breve de vários casos.



Ambientes de programação

Um ambiente de programação é uma coleção de ferramentas usadas no desenvolvimento de software. Um bom sistema de desenvolvimento aumenta a produtividade dos programadores e também contribui um pouco para aumentar a qualidade do software produzido.

Um ambiente minimal é tipicamente constituído por:

Um ambiente sofisticado é tipicamente constituído por:


O ambiente de desenvolvimento JDK para Java

O ambiente de desenvolvimento não-visual JDK (Java Developer's Kit) consiste num conjunto de ferramentas que ajudam a desenvolver, testar, documentar e executar programas em Java. Estas ferramentas podem ser usadas na linha de comando, mas também podem ser integradas em ambientes de desenvolvimento gráficos, como por exemplo o Eclipse. O JDK é gratuitamente disponibilizado pela empresa Sun e existem versões para Windows, MacOS, Linux, etc.

Ferramentas do JDK

    javac          Compilador
    java           Executor de programas independentes
    javadoc        Gerador de documentação
    appletviewer   Executor de applets
    jdb            Depurador
    javap          Disassembler
    javah          Gerador de header files para métodos nativos escritos em C

Como se compilam programas em Java?

Como se executam programas em Java?

Como se documentam programas em Java?


As ferramentas do OCaml

A distribuição do OCaml inclui uma vasto conjunto de ferramentas disponíveis no Windows, Linux e MacOS. Estas ferramentas podem ser usadas na linha de comando, mas também podem ser integradas em ambientes de desenvolvimento gráficos.

Repare que a lista de ferramentas abaixo inclui um profiler que serve para o programador descobrir quais as partes do programa onde se gasta mais tempo. Essas são as partes do programa que mais interessa otimizar.

Ferramentas do OCaml


Unix e Gnu/Linux

O Unix é um sistema operativo mas também um sistema de desenvolvimento e manutenção de software. Atualmente a sua versão open-source, chamada de Gnu/Linux, é muito popular e tem sido usada no desenvolvimento de software "open-source" e de software comercial.

O Unix disponibiliza uma grande quantidade de ferramentas de desenvolvimento, mas deve ser dito que essas ferramentas foram nascendo de forma caótica e que não há uma interface consistente entre elas. Algumas ferramentas são também muito complexas, embora cumpram os seus objetivos de forma admirável, na maior parte dos casos.

gnu tools

Os gnu tools são um conjunto de ferramentas que ajudam a produzir software portável, que funciona em diversas versões do Unix e noutros sistemas operativos. Estas ferramentas foram desenvolvidas e adquiriram maturidade especialmente durante os anos 1990.

make

O utilitário make é extremamente popular, pelo facto de ser eficaz e simples de usar. Vale muito a pena aprender a usar este utilitário! Aqui, fazemos apenas uma introdução.

Costuma ser usado para automatizar transformações de ficheiros no contexto de projetos pequenos ou médios. A sua principal utilização é determinar automaticamente as partes do projeto precisam de ser recompiladas e executar os comandos necessários para concretizar a recompilação. O make considera as dependências entre ficheiros e as datas das últimas modificações para saber o que é preciso fazer em cada momento.

Cada projeto contém um ficheiro geralmente chamado Makefile onde se declaram as dependências entre os ficheiros, e onde se definem regras que dizem como os diversos ficheiros devem ser gerados. Para além de regras de recompilação, podem ser definidas outras ações, tais como apagar os ficheiros auxiliares do projeto, ou produzir o arquivo da distribuição do projeto.

Eis a estrutura de cada regra:

Assume-se geralmente que o target designa um ficheiro que deve ser gerado. Mas, por vezes queremos incluir comandos implementados através de "falsos" targers, e para isso usa-se a declaração ".PHONY".

O seguinte exemplo é o ficheiro Makefile que foi usado num projeto antigo de LAP:

Eis uma pequena sessão interativa, que pressupõe a existência do ficheiro Makefile na diretoria corrente:

gdb

O Gnu Debugger trabalha com linguagens implementadas nativamente e tem um funcionalidade extensíssima. Mostramos só como usar o gdb para descobrir qual a função onde um programa está a rebentar.

O seguinte programa está errado:

O gdb permite mostrar o conteúdo da pilha de execução no momento do estoiro, o que geralmente é muito útil para descobrir as razões do erro.

cvs

O cvs (Concurrent Versions System) um sistema de apoio ao desenvolvimento de projetos de software. Tem duas funcionalidades essenciais:

O CVS, divulgado em 1986, foi o primeiro sistema de controlo de versões a suportar um repositório partilhado por vários utilizadores.

Uma ferramenta como o CVS é essencial para a viabilidade do software livre, pois este tipo de software é tipicamente desenvolvido coletivamente por um grande número de voluntários geograficamente espalhados e não pagos. Nenhum desses voluntários teria tempo nem paciência para processar manualmente as numerosas submissões de código novo ou corrigido.

Uma ferramenta do tipo do CVS também faz falta no desenvolvimento de software proprietário, mas no caso do software livre a questão é mais evidente.

Exemplos de software originalmente desenvolvido com a ajuda do CVS

Em 1999 foi lançado o Sourceforge, um repositório de código fonte CVS baseado na Web. Foi um dos primeiros sistemas Web a oferecer a possibilidade de gestão colaborativa de projetos de código aberto. Neste momento o sistema hospeda mais de 300 000 projetos, embora nem todos estejam ativos. O próprio sistema Sourceforge era inicialmente baseado em código aberto, embora tal não seja verdade atualmente.

Alternativas modernas ao CVS

O CVS tem algumas limitações aborrecidas, como por exemplo a falta de suporte para a noção de renomear uma diretoria. Atualmente há muitas alternativas ao CVS e, para iniciar projetos novos, convém evitar o CVS.

Subversion (2004) - O Subversion foi criado para resolver as insuficiências mais evidentes do CVS. Foi a primeira alternativa popular ao CVS e continua a ser muito usado.

Git (2005) - Mas, atualmente, o sistema mais usado é provavelmente o Git, por causa de diversas funcionalidades específicas e duma boa velocidade de resposta, mesmo em projetos grandes. O plugin para o Eclipse EGit constitui uma interface prática para usar o Git.

GitHub (2008) - Atualmente é o maior repositório de código fonte do mundo. Usa o Git e está acessível na Web. Tem mais de 21 milhões de projetos instalados, embora nem todos estejam ativos.

Detalhes sobre o Git - Todos os participantes dum projeto possuem a sua cópia local do projeto e de todo o código. Trabalham localmente sobre o código e periodicamente usam os comandos do Git para atualizar o estado do projeto local. Sempre que um participante considerar conveniente, dá o comando que incorpora no projeto central as alterações entretanto introduzidas no projeto local. Eis alguns exemplos de comandos:

Conhecer melhor o Git em 15 minutos!


IDEs

Um IDE, ou ambiente de desenvolvimento integrado, é um programa único dentro do qual se processa todo o desenvolvimento do software. Geralmente a interface é gráfica.

Exemplos: Eclipse, Visual Studio .Net, Anjuta, Code::Blocks.

Os IDEs mais sofisticados são estendíveis através de plugins. Isso permite que o mesmo sistema possa ser usado para trabalhar em diversas linguagens.

Para quem gosta de ferramentas simples mas que ajudam a produzir trabalho, o Geany é uma excelente alternativa. Trata-se essencialmente dum editor de texto orientado para escrita de programa e que conhece a sintaxe de dezenas de linguagens de programação. Mas a parte mais interessante é ter menus configuráveis e podermos associar comandos a esses menus (por exemplo, podemos invocar o Makefile do nosso projeto.)



Vídeos antigos

Estes vídeos poderão estar um pouco desatualizados, pois foram feitos no contexto duma edição anterior do LAP. Contudo, partes dos vídeos poderão continuar a ter alguma utilidade.