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