downloadDownload FAQFAQ
Site Navigation:
 
 

12. Разработка

В этом разделе рассматриваются различные средства и возможности для разработки.

12.1. Во время выполения

Некоторые новые возможности в glibc:

  • Поддержка наследования приоритетов и защиты приоритетов мьютексов. Эти две функции описаны в стандартых POSIX.

    • Мьютексы с наследование приоритета автоматически предотвращают изменение приоритера, вызванное ожиданием освобождения мьютекса. Ядро автоматически будет повышать приоритет потока, удерживающего мьютекс, пока он не разблокирует мьютекс.

    • Защита приоритета позволяет указать, что все потоки, запрашивающие мьютекс, будут работать пока мьютекс не заблокирован. Это функция не доступна для надежных мьютексов.

  • Сортировка адреса назначения, выполняемая интерфейсом getaddrinfo() для поиска имени машины теперь может быть настроена при помощи правил в файле /etc/gai.conf.

  • Значительное ускорение в обработке NIS и NIS+.

  • Завершена поддержка RFC 3542 (API улучшенных сокетов для IPv6).

  • Значительное ускорение в просмотре динамических символов.

12.2. Утилиты

Линковщик включает поддержку нового формата ELF таблицы хеш символов. Используйте параметр --hash-style линковщика для выбора формата(ов).

12.2.1. Файлы заголовков ядра

Это выпуск Fedora был собран с использованием заголовков ядра Linux, экспортируемых непосредственно из ядра, используя новую headers_install возможность ядра 2.6.18. По этой причине пакет glibc-kernheaders был удален и замене на kernel-headers, дополнительный пакет ядра kernel.

Разработчики могли заметить некоторые изменения между этими новыми заголовками ядра и теми, что были ранее. Они включают, но не ограничиваются:

  • Файл заголовков <linux/compiler.h> был удален, т.к. он не содержит элементов, используемых в пространстве пользователя.

  • Макрос _syscallX() удален. В пространстве пользователя необходимо вместо него использовать syscall() из библиотеки C.

  • Макрос PAGE_SIZE удален из некоторых архитектур, т:к: размер страницы может изменяться. Пользовательские программы должны использовать вместо этого sysconf(_SC_PAGE_SIZE) или getpagesize().

  • Файлы заголовков <asm/atomic.h> и <asm/bitops.h> были удалены. Они не предназначены для использования пользовательскими программмами, и могут дать сбой при сборке для некоторых архитектур, в то время как проявлять не-атомарное поведение на других. Компилятор C вместо этого предоставляет собственныеатомарные встроенные функции доступные пользовательским программам.

  • Содержимое, ранее защищенное при помощи #ifdef __KERNEL__, опускается при помощи утилиты unifdefl. Определение __KERNEL___ для указания частей, которые не должны быть видны программам пользователя более не эффективно.

Дополнительно, некоторые другие файлы заголовков, которые не подходят к использования программами пользователля, также были удалены. В данный момент все еще множество заголовочных файлов исправляется для удаления неподходящего содержимого..

[Замечание]Изменения заголовков ядра не специфичные для Fedora

Эти изменения были унаследованы от основного ядра и не являются специфическими для Fedora. Любой дистрибутив, использующий текущие официально экспортированные заголовки ядра тоже будет их иметь.

12.2.2. Коллекция компиляторов GCC

Данный выпуск Fedora был собран при помощи компилятора GCC 4.1, входящего в состав дистрибутива.

12.2.2.1. Предостережения
  • Разрабочики Fedora представили изменения в ELF .hash секции, хранящей символы для динасической сборки. Этот новый раздел .gnu.hash, формируемый при помощи нового параметра--hash-style=gnu компилятора gcc, предназначена для тех же задач, что и предыдущая хэш-секцияТем не менее, она дает приблизительно 50% увеличение скорости динамический сборки. Программы и библиотеки, подготовленные с новой функцией хэширования не совместимы со старой версией glibc и динамического линковщика. Для использования старого стиля хэш-таблиц для совместимости с системами на базе старой версии glibc, используйте параметр --hash-style=sysv.

  • Вам потребуется GDB 6.1 или более новый для отладки бинарных файлов, за исключением файлов, собранных с параметром компиляции -fno-var-tracking.

  • Более не допускается использовать параметр -fwritable-strings.

  • Диагностические сообщения на английском языке теперь используют Unicode символ кавычек. Если вы не можете их прочитать, установите переменную среды LC_CTYPE в значение C или замените используемый эмулятор терминала.

  • specs файл более не устанавливается на большинстве систем. Обычный пользователь не заметит разницы, а разработчикам может потребоваться изменить этот файл. Используйте параметр -dumpspecs для создания требующего модификации файла.

12.2.2.2. Генерация кода
  • В состав включен оптимизатор кода SSA, и он дает лучшую обработку констант, частичное удаление избыточности, загрузку и сохранение перемещения кода, снижение стоимости выполнения,удаление неиспользуемого места, лучшее выявление недостижимого кода и концевую рекурсию накоплением.

  • Автовекторизация поддерживается. Эта техника позволяет достичь в некоторых ситуациях большей производительности для повторяющихся циклов кода.

12.2.2.3. Расширения языка
  • Новый атрибут предупреждений заставляет компилятор выдавать предупреждение, если функция имеет тип execl(char *path, const char *arg, ...), требует NULL в качестве завершение списка и NULL отсутствует.

  • Расширения cast-as-lvalue, conditional-expression-as-lvalue и compund-expression-as-lvalue были удалены.

  • Семантика #pragma pack() теперь ближе к используемой другими компиляторами.

  • Взятие адреса переменной, определенной с модификатором register, теперь генерирует ошибку вместо предупреждения.

  • Массив с неполным типом элементов теперь формирует ошибку. Это подразумевает невозможность ссылок вперед на определения структур.

  • Базовый компилятор, без какой-либо оптимизации (-O0), показал себя на 25% быстрее на реальном коде.

  • Библиотеки тепрь могут содержать статические переменные области видимости функции в многопоточных программах. Разработчики встраиваемых решений могут использовать -fno-threadsafe-statics для выключения этой функции, в тоже время обычным пользователям не следует этого делать.

12.3. Ruby

Стандартный путь поиска библиотек Ruby, $:, был изменен в сответствии с руководством по созданию пакетов. Изменения также были внесены в некоторые области файлаConfig::CONFIG модуля rbconfig. Наиболее важные изменения содержат:

  • sitedir и связанные каталоги (sitelibdir, sitearchdir) находятся теперь внутри rubylibdir. Вместо /usr/lib/site_ruby они находятся внутри /usr/lib/ruby/site_ruby.

  • Каталоги для кода Ruby независимого от архитектуры находятся всегда /usr/lib, даже для архитектуры x86_64, хотя они должны быть внутри /usr/lib64. Это изменение оказывает влияние на записи в Config::CONFIG rubylibdir и sitelibdir.

Каталоги, которые были ранее в $: остаются там некоторе время, т.о. существующий код, такой как /usr/lib/site_ruby, не потребуется модифицировать. Тем не менее эти каталоги объявлены устаревающими и будут удалены в выпуске Fedora Core 8. Собирайте пакеты Ruby RPM в соответствии с руководством по сборке пакетов. В частности, библиотеки Ruby должны устанавливаться в sitelibdir и sitearchdir. Вам также необходимо следовать этому правилу для кода Ruby программ, которые не упаковываются в RPM.