Site Navigation:
 
 

12. Desenvolvimento

Esta secção cobre várias ferramentas e funcionalidades de desenvolvimento.

12.1. Ambiente de Execução

Estas são as funcionalidades novas da glibc:

  • O suporte para a herança de prioridades e para os mutexes com protecção de prioridades. Estas são duas funcionalidades descritas nas normas POSIX.

    • Os mutexes com herança de prioridades evitam uma inversão de prioridades, causada pela espera pela disponibilidade dos mutexes. O 'kernel' aumenta automaticamente a prioridade da tarefa que mantém o mutex, até que esta o desbloqueie.

    • A protecção de prioridades permite indicar uma prioridade, com que todas as tarefas que adquirirem o mutex irão correr até que o mutex seja desbloqueado. Esta funcionalidade não está disponível nos mutexes robustos.

  • A ordenação de endereços de destino, efectuada pela interface getaddrinfo(), na pesquisa de nomes de máquinas, poderá agora ser configurada através de regras no ficheiro /etc/gai.conf.

  • Aumentos de velocidade significativos no processamento de NIS e NIS+.

  • Suporte completo para o RFC 3542 (APIs de 'sockets' avançadas para IPv6).

  • Aumentos de velocidade significativos na pesquisa de símbolos dinâmicos.

12.2. Ferramentas

O editor de ligações inclui o suporte para o formato da nova tarefa de dispersão dos símbolos ELF. Use a opção --hash-style, do editor de ligações, para seleccionar os formatos.

12.2.1. Ficheiros de inclusão do 'kernel'

Esta versão do Fedora foi compilada com os ficheiros de inclusão do Linux exportados directamente a partir do 'kernel', usando a nova funcionalidade headers_install do 'kernel' 2.6.18. Deste modo, o pacote glibc-kernheaders foi removido e substituído pelo kernel-headers, um sub-pacote do kernel.

Os programadores poderão notar algumas diferenças entre estes novos ficheiros de inclusão e o que existia antes, incluindo não só mas também:

  • O ficheiro de inclusão <linux/compiler.h> foi removido, por não conter nada de útil para os utilizadores.

  • As macros _syscallX() foram removidas. O espaço do utilizador deverá usar agora a syscall() da biblioteca de C em alternativa.

  • A macro PAGE_SIZE foi removida de algumas arquitecturas, dado que o tamanho da página é variável. O espaço do utilizador deverá usar o sysconf(_SC_PAGE_SIZE) ou o getpagesize() em alternativa.

  • Os ficheiros de inclusão <asm/atomic.h> e <asm/bitops.h> foram removidos. Estes não foram desenhados para serem usados no espaço do utilizador, pelo que falhariam na compilação em algumas arquitecturas, enquanto forneciam um comportamento não-atómico noutras. O compilador de C oferece as suas próprias funções atómicas incorporadas, adequadas para usar nos programas dos utilizadores.

  • O conteúdo que estava anteriormente protegido pelo #ifdef __KERNEL__ foi repartido por completo com a ferramenta unifdef. A definição do __KERNEL___, para poder ver partes que não deveriam esdtar visíveis para o utilizador, já não faz mais efeito.

Para além disso, outros ficheiros de inclusão, inadequados para programas dos utilizadores, foram removidos e foram editados outros ficheiros para remover o conteúdo indesejado.

[Nota]As mudanças dos ficheiros de inclusão do 'kernel' não são específicas do Fedora

Estas alterações são herdadas do 'kernel' oficial e não são específicas do Fedora. Qualquer distribuição que use os ficheiros de inclusão exportados oficialmente terá o mesmo comportamento.

12.2.2. Colecção de Compiladores GCC

Esta versão do Fedora foi compilada com o GCC 4.1, que vem incluído na distribuição.

12.2.2.1. Contrapartidas
  • Os programadores do Fedora introduziram alterações na secção .hash do ELF, que fornece os símbolos das ligações dinâmicas às bibliotecas. Esta nova secção .gnu.hash, que é produzida com a opção predefinida nova --hash-style=gnu do gcc, serve o mesmo objectivo das secções de dispersão anterior. Contudo, oferece um aumento aproximado de 50% na velocidade de ligação às bibliotecas dinâmicas. Os executáveis e bibliotecas produzidos com a nova função de dispersão são incompatíveis com as versões mais antigas da glibc e do editor de ligações. Para usar as rotinas de dispersão antigas, por razões de compatibilidade com os sistemas mais antigos de glibc-based systems, passe em alternativa a opção --hash-style=sysv.

  • É necessário o GDB 6.1 ou posterior para depurar os executáveis, a menos que tenham sido compilados com a opção -fno-var-tracking.

  • A opção -fwritable-strings já não é mais aceite.

  • As mensagens de diagnóstico em Inglês usam agora aspas em Unicode; se não as conseguir ler, mude a sua variável de ambiente LC_CTYPE para C ou mude o emulador de terminal.

  • O ficheiro specs já não é mais instalado na maioria dos sistemas. Os utilizadores normais não irão notar, mas os programadores que necessitem de alterar o ficheiro poderão usar a opção -dumpspecs para gerar o ficheiro para edição.

12.2.2.2. Geração de Código
  • O optimizador de código SSA vem agora incluído e traz melhor propagação de constantes, a eliminação parcial de redundâncias, o movimento de código de leitura e gravação, a redução de força, a eliminação de armazenamento morto, uma melhor detecção de código inacessível e recursividade na cauda por acumulação.

  • É suportada a auto-vectorização. Esta técnica consegue uma melhor performance, no código de ciclos repetitivos, em algumas circunstâncias.

12.2.2.3. Extensões à Linguagem
  • Foi adicionado um atributo 'sentinela', para que o compilador possa agora dar um aviso se uma função como a execl(char *local, const char *arg, ...), que necessita de uma lista terminada em NULL, não tiver este NULL.

  • As extensões cast-as-lvalue, conditional-expression-as-lvalue e compund-expression-as-lvalue foram removidas.

  • A semântica do #pragma pack() foi aproximada à usada nos outros compiladores.

  • A obtenção do endereço de uma variável declarada com o modificador 'register' gera agora um erro em vez de um aviso.

  • As listas de tipos de elementos incompletos geram agora um erro. Isto implica a falta de referências prévias às definições das estruturas.

  • O compilado básico, sem qualquer optimização (-O0), foi medido como oferecendo 25% mais de velocidade em código do mundo-real.

  • As bibliotecas poderão agora conter funções estáticas ao nível das funções, nos programas multi-tarefa. A opção -fno-threadsafe-statics poderá ser usada pelos programadores de sistemas embebidos para desactivar esta função, só que os utilizadores normais nunca deverão fazer isso.

12.3. Ruby

Os locais de pesquisa-padrão das bibliotecas de Ruby, o $:, foi alterado de acordo com as linhas-mestras de pacotes. Foram feitas também alterações no Config::CONFIG, no módulo rbconfig. As alterações mais importantes incluem:

  • a sitedir e as pastas relacionadas (sitelibdir, sitearchdir) estão agora sob a rubylibdir. Em vez da /usr/lib/site_ruby, estão agora sob a /usr/lib/ruby/site_ruby.

  • As pastas do código de Ruby puro e independente da arquitectura ficam agora sempre sob a /usr/lib, mesmo na arquitectura x86_64, embora fosse normal estarem sob a /usr/lib64. Esta alteração afecta os itens do Config::CONFIG rubylibdir e sitelibdir.

As pastas que existiam antes na $: mantêm-se aí de momento, para que o código existente, como o /usr/lib/site_ruby, não precise de ser modificado. Contudo, serão descontinuadas no futuro e serão removidas na altura do lançamento do Fedora Core 8. Crie os pacotes RPM do Ruby de acordo com as linhas-mestras de criação de pacotes. Em particular, as bibliotecas do Ruby deverão apenas ser instaladas na sitelibdir e na sitearchdir. Deverá também seguir esta regra para o código de Ruby que não seja distribuído como um RPM.