Esta secção cobre várias ferramentas e funcionalidades de desenvolvimento.
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.
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.
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.
![]() | 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. |
Esta versão do Fedora foi compilada com o GCC 4.1, que vem incluído na distribuição.
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.
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.
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.
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.