downloadDownload FAQFAQ
Site Navigation:
 
 

12. Desarrollo

Esta sección cubre las diversas herramientas del desarrollador y sus características.

12.1. Tiempo de Ejecución

Hay nuevas características en glibc:

  • Soporte para la herencia de prioridad y para los mutex de protección de prioridad. Estas son dos características descritas en los estándares de POSIX.

    • Los mutex de herencia de prioridad previenen automáticamente la inversión de prioridad causado por la espera en la disponibilidad de mutex. El kernel mejora automáticamente la prioridad del thread que tiene el mutex hasta que lo desbloquea.

    • La protección de prioridad también le permite especificar una prioridad en la que todos los threads que quieren el mutex se ejecutarán hasta que el mutex se desbloquee. Esta característica no está disponible en mutexes robustos.

  • El ordenamiento de dirección destino realizado por la interfase getaddrinfo() para la búsqueda del nombre de equipo se puede ahora personalizar con reglas en el archivo /etc/gai.conf .

  • Aceleración significativa en el procesamiento NIS y NIS+.

  • Se completó el soporte de RFC 3542 (APIs de socket avanzado para IPv6).

  • Aceleración significativa en la búsqueda de símbolos dinámicos.

12.2. Herramientas

El encadenador incluye soporte para el nuevo formato de tabla hash de símbolos de ELF. Use la opción --hash-style del encadenador para seleccionar los formatos.

12.2.1. Archivos cabeceras del kernel

Esta versión de Fedora ha sido contruída con las cabeceras del kernel de Linux exportadas directamente desde el kernel, usando la característica nueva headers_install del kernel 2.6.18. Así, el paquete glibc-kernheaders ha sido eliminado y reemplazado con kernel-headers, un subpaquete de kernel.

Los desarrolladores pueden notar cambios entre estas nuevas cabeceras del kernel, y lo que antes estaba, incluye pero no se limita a lo siguiente:

  • El archivo cabecera <linux/compiler.h> ha sido eliminado, dado que no contiene nada que se pueda usar en el espacio del usuario.

  • Las macros _syscallX() fueron eliminadas. El espacio de usuario debe usar syscall() de la biblioteca C en su lugar.

  • La macro PAGE_SIZE fue quitada en algunas arquitecturas, dado que el tamaño de página es variable. En el espacio de usuario se debe usar sysconf(_SC_PAGE_SIZE) o getpagesize() en su lugar.

  • Los archivos cabecera <asm/atomic.h> y <asm/bitops.h> han sido eliminados. No fueron diseñados para usar en el espacio de usuario, y podrían fallar al compilar en algunas arquitecturas mientras que en otras pueden dar silenciosamente un comportamiento no atómico. El compilador C provee sus funciones atómicas propias incorporadas que son más adecuadas para usar en programas del espacio del usuario.

  • El contenido que previamente estaba protegido con #ifdef __KERNEL__ fue quitado completamente con la herramienta unifdef. La definición de __KERNEL___ para poder ver las partes que no deben ser visibles en el espacio del usuario ya no funciona.

Además, algunos archivos cabeceras que no son útiles para el espacio del usuario han sido eliminados y todavía se editaron más cabeceras para eliminar contenido innecesario.

[Nota]Los cambios en las cabeceras de Kernel no son específicos a Fedora

Estos cambios fueron heredados del kernel superior y no son específicos de Fedora. Cualquier distribución que usen las cabeceras del kernel oficialmente exportados deberían ser los mismos.

12.2.2. Colección de Compiladores GCC

Esta versión de Fedora fue contruída usando GCC 4.1, el cual también se incluye en la distribución.

12.2.2.1. Precauciones
  • Los desarroladores de Fedora introdujeron cambios en la sección .hash de ELF que provee símbolos para el encadenamiento dinámico. Esta nueva sección .gnu.hash, que se produce con la nueva opción por defecto --hash-style=gnu en gcc , sirve para lo mismo que las secciones hash previas. Sin embargo, pueden encadenar a una velocidad 50% más rápido. Los binarios y bibliotecas producidos con la nueva función hash son incompatibles con las viejas versiones de glibc y el encadenador dinámico. Para usar las rutinas anteriores para compatibilidad con sistemas basados en versiones viejas de glibc, pase la opción --hash-style=sysv en lugar de la otra.

  • Se necesita GDB 6.1 o más nuevo para depurar binarios, a menos que sean compilados con la opción de compilación -fno-var-tracking .

  • Ya no se acepta la opción -fwritable-strings .

  • Los mensajes de diagnóstico en inglés usan formato Unicode. Si no puede leerlas, fije la variable de entorno LC_CTYPE a C o cambie su emulador de terminal.

  • El archivo specs ya no se instala en la mayoría de los sistemas. Los usuarios ordinarios no lo notarán, pero los desarrolladores que necesiten alterar el archivo pueden usar la opción -dumpspecs para generar el archivo y editarlo.

12.2.2.2. Generación de Código
  • El optimizador de código SSA se incluye y trae consigo una mejor propagación de constantes, eliminación de redundancia parcial, movilidad de a carga y ubicación de código, reducción de fortaleza, eliminación de almacenamiento muerto, mejor detección de código inalcanzable y recursión de cola por acumulación.

  • Hay soporte para la autovectorización. Esta técnica da una mejor performance para código de bucles repetitivos en algunas circunstancias.

12.2.2.3. Extensiones de Lenguajes
  • El nuevo atributo sentinela hace que el compilador emita una advertencia si una función tal como execl(char *path, const char *arg, ...) , que requiere un terminador de lista en NULL, le esté faltando el NULL.

  • Las extensiones cast-as-lvalue , conditional-expression-as-lvalue , y compund-expression-as-lvalue se eliminaron.

  • La semántica de #pragma pack() es ahora más parecido a las que se usan en otros compiladores.

  • Pedir la dirección de una variable declarada como register genera ahora un error en vez de una advertencia.

  • Los arreglos de tipos de elementos incompletos generan ahora un error. Esto implica que no hay referencia a definiciones de estructuras más adelante.

  • El compilador básico, sin ninguna optimización ( -O0 ), resultó 25% más rápido con código del mundo real.

  • Las bibliotecas pueden contener ahora variables estáticas en ámbito de las funciones en programas multi-threaded. Los desarrolladores de código incrustado pueden usar -fno-threadsafe-statics para desactivar esta característica, pero los usuarios comúnes no deberían hacer esto nunca.

12.3. Ruby

El camino de búsqueda estándar para las bibliotecas Ruby, $:, cambiaron de acuerdo a los lineamientos de empaquetamiento. Los cambios también se hicieron en algunas entradas en Config::CONFIG en el módulo rbconfig. Los cambios más importantes incluyen a:

  • sitedir y directorios relacionados (sitelibdir, sitearchdir) ahora están bajo rubylibdir. En vez de estar en /usr/lib/site_ruby ahora están bajo /usr/lib/ruby/site_ruby.

  • Los directorios para el código Ruby puro independiente de la arquitetura está siempre en /usr/lib, aún en la arquitectura x86_64, en la que antes solía estar en /usr/lib64. Este cambio afecta las entradas rubylibdir y sitelibdir de Config::CONFIG.

Los directorios que previamente estaba en $: permanece ahí, para que el código existente, como el /usr/lib/site_ruby, no necesite ser modificado. Aunque estos directorios han sido despreciados, y se eliminarán en la versión Fedora Core 8. Construya los paquetes RPM de Ruby de acuerdo a los lineamientos de empaquetamiento. En particular, las bibliotecas de Ruby deben solamente instalarse en sitelibdir y sitearchdir. Debe también seguir las reglas para el código Ruby que no se empaqueta como un RPM.