Download Nome - svnbook-pt-br

Transcript
Incorporando o Subversion
Programando com Recipientes de Memória
Quase todo desenvolvedor que usou a linguagem de programação C teve em algum ponto
suspirou fundo ao enfrentar a assustadora tarefa de gerenciar o uso de memória. Alocar memória
suficiente para o uso, manter controle dessas alocações, liberar a memória quando você não
precisa mais dela—estas tarefas podem ser bastante complexas. E certamente, falhar ao fazer
essas coisas adequadamente pode resultar em um programa que trava sozinho, ou pior ainda,
trava todo o computador.
Em linguagens de alto nível, por outro lado, deixam o trabalho de gerenciamento de memória
5
completamente distante do desenvolvedor. Linguagens como Java e Python usam um coletor
de lixo, alocando memória para os objetos quando necessário, e automaticamente liberando esta
memória quando o objeto não está mais em uso.
A APR fornece uma abordagem de meio-termo chamada gerenciamento de memória baseada em
recipientes. Isto permite ao desenvolvedor controlar o uso de memória em uma resolução mais
baixa—por pedaços (ou “recipientes”) de memória, em vez de por objeto alocado. Ao invés de usar
malloc() e similares para alocar memória suficiente para um dado objeto, você pede que a APR
aloque a memória de um recipiente de memória. Quando você estiver finalizado o uso dos objetos
criados naquele recipiente, você destrói todo o recipiente, efetivamente desalocando a memória
consumida por todos os objetos que você alocou nele. Dessa forma, em vez de manter o controle
individual de objetos que precisam ser desalocados, seu programa simplesmente considera o
tempo de vida total desses objetos, e aloca os objetos em um recipiente cujo tempo de vida (o
tempo entre a criação do recipiente e sua exclusão) coincide a necessidade do objeto.
Requisitos de URL e Caminho
Com operação remota de controle de versão como o ponto de toda a existência do Subversion, faz
sentido que alguma atenção seja dada ao suporte de internacionalização (i18n). Afinal, enquanto o
“remoto” possa significar “em todo o escritório”, poderia perfeitamente dizer “em todo o globo”. Para
facilitar isto, todas as interfaces públicas do Subversion que aceitam argumentos de caminho esperam
que esses caminhos sejam canonicalizados e codificados em UTF-8. Isto significa, por exemplo,
que qualquer novo cliente binário que realiza a interface libsvn_client precisa primeiro converter os
caminhos a partir da codificação específica da localidade para a UTF-8 antes de passar esses caminhos
para as bibliotecas do Subversion, e então reconverter qualquer dos caminhos de saída resultantes do
retorno do Subversion para a codificação da localidade antes de usar esses caminhos para propósitos
fora do Subversion. Felizmente, o Subversion oferece um conjunto de funções (veja subversion/
include/svn_utf.h) que podem ser usadas por qualquer programa para fazer esses conversões.
Além disso, as APIs do Subversion requerem que todos os parâmetros da URL sejam devidamente
codificados em URI. Assim, em vez de passar file:///home/username/My File.txt como a
URL de um arquivo nomeado My File.txt, você precisa passar file:///home/username/My
%20File.txt. Novamente, o Subversion fornece funções auxiliares que sua aplicação pode usar
—svn_path_uri_encode() e svn_path_uri_decode(), para codificação e decodificação de
URI, respectivamente.
Usando Outras Linguagens além de C e C++
Se você está interessado em usar as bibliotecas do Subversion em conjunção com alguma outra coisa
do que um programa C—digo um script Python ou Perl—o Subversion possui algum suporte para
isto por meio do Simplified Wrapper and Interface Generator (SWIG). Os vínculos do SWIG com o
Subversion estão localizados em subversion/bindings/swig. Eles estão ainda amadurecendo,
mas já são usáveis. Estes vínculos permitem você chamar as funções da API do Subversion
indiretamente, usando invólucros que traduzem os tipos de dado nativos de sua linguagem de scripting
para os tipos de dado necessários das bibliotecas C do Subversion.
5
Ou pelo menos torná-lo algo que você somente diverte-se ao fazer uma otimização extremamente rígida do programa.
186