22 Ноября 2024, 04:23

GCC

Автор turbo, 21 Ноября 2008, 19:01

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

turbo

GCC
21 Ноября 2008, 19:01 Последнее редактирование: 27 Марта 2011, 16:27 от Zhek@Ch
[size="3"]Реализация оптимизации для GCC, учитывающей связь между файлами сборки[/size]

Разработчики компании Google представили начальную реализацию нового механизма оптимизации для набора компиляторов GCC - WHOPR (WHOle Program optimizeR). Традиционная реализация GCC оперирует только единичными файлами, компиляция которых производится независимо друг от друга, после чего производится связывание готовых объектных файлов в единый исполняемый файл. Данный подход имеет преимущество в том, что процесс сборки легко может быть распараллелен в несколько потоков, одновременно могут компилироваться несколько файлов. Но метод раздельной сборки имеет проблемы в плане оптимизации использования функций, которые, в случае определения в другом файле исходных текстов, не могут быть оптимизированы в зависимости от текущих условий их вызова.

Проект WHOPR реализует альтернативную схему LTO (Link-Time Optimization) оптимизации для GCC, не требующую в отличии от LTO больших объемов оперативной памяти для сборки, и пригодную для использования в больших проектах. WHOPR использует три фазы:

 1. При компиляции каждого файла, сохраняется промежуточное представление кода (GIMPLE). Связь между файлами на этом этапе не анализируется и сборка может происходить в несколько потоков, ничем не отличаясь от традиционной модели;
 2. После завершения сборки всех файлов, запускается процесс целостного анализа программы, который строит суммарные карты вызова функций, на основе сохраненных GIMPLE-дампов. Используя построенные карты, компилятор строит план проведения будущей оптимизации, определяя в каких местах имеет смысл проводить дополнительную оптимизацию.
 3. На основании подготовленных в предыдущих шагах данных, компилятор проводит логическую трансформацию (LTRANS), применяя ранее подготовленный для каждого файла план оптимизации. Логическая трансформация может производиться для каждого файла в параллельном режиме.
http://www.opennet.r...shtml?num=19027

turbo

GCC
12 Марта 2009, 20:25 #1 Последнее редактирование: 27 Марта 2011, 16:34 от Zhek@Ch
[size="3"]В Gcc 4.4 появится поддержка автоматического распараллеливания циклов[/size]

В списке рассылки GCC опубликован план реализации автоматического распараллеливания циклов в GCC. Ранее в дерево исходных текстов GCC был интегрирован код проекта Graphite, в рамках которого была разработана технология оптимизации через обеспечение параллельного выполнения циклических операций. Разработка Graphite велась при участии компании IBM. Для обеспечения автоматического распараллеливания операций код Graphite будет комбинирован с генератором кода autopar, основанным на реализации спецификаций OpenMP, созданной в рамках проекта GOMP.

Начальная поддержка автоматического распараллеливания появится в следующем релизе - GCC 4.4. Разработка позволит значительно увеличить производительность обычных приложений на многоядерных процессорах, созданных без использования специальных библиотек распараллеливания, например, Threading Building Blocks.

http://www.opennet.r...shtml?num=20697

turbo

GCC
22 Апреля 2009, 20:44 #2 Последнее редактирование: 12 Июля 2011, 00:22 от Zhek@Ch
[size="3"]Релиз набора компиляторов GCC 4.4.0[/size]

Вышел набор компиляторов GCC 4.4.0 с измененным лицензионным соглашением на runtime - "GCC RUNTIME LIBRARY EXCEPTION", убирающим некоторые ограничения лицензии GPLv3 для Runtime компонент набора компиляторов, что позволяет генерировать в GCC любой код, независимо от лицензии под которой он будет распространяться (например, в качестве runtime теперь можно использовать код для обеспечения работы виртуальных машин, обрабатывающих байткод, в том числе Java).

Основные изменения по сравнению с веткой GCC 4.3.x:

 * Добавлен оптимизатор Graphite, основанный на полиэдральном промежуточном представлении - технологии оптимизации для обеспечения параллельного выполнения циклических операций. Оптимизация касается всех языков, поддерживаемых GCC. Разработка позволяет значительно увеличить производительность обычных приложений на многоядерных процессорах, созданных без использования специальных библиотек распараллеливания, например, Threading Building Blocks.
 * Добавлены новый аллокатор регистров (IRA - integrated register allocator) и новый планировщик расстановки инструкций.
 * Новые опции оптимизации: "-findirect-inlining", "-ftree-switch-conversion", "-ftree-builtin-call-dce" и "-fconserve-stack";
 * Новые опции предупреждения о потенциальных ошибках в коде: "-Wparentheses", "-Wsequence-points", "-Wconversion", "-Wuninitialized" и т.д.
 * Реализована поддержка версии 3 спецификации OpenMP (API для параллельных вычислений);
 * Улучшена поддержка грядущего С++ стандарта C++0x, например, в libstdc++ добавлены заголовочные файлы chrono, condition_variable, cstdatomic, forward_list, initializer_list, mutex, ratio, system_error и thread;
 * Произошли множественные изменения в поддержке языков C/C++/Fortran;
 * Улучшена поддержка уже поддерживаемых архитектур: добавлены средства оптимизации для CPU ARM Cortex-A9, Cortex-R4 и Cortex-R4F, PowerPC e300c2, e300c3, e500mc, IBM System z10 EC/BC; добавлена поддержка встроенных функций Intel AES, Intel PCLMUL, Intel AVX; улучшена поддержка архитектур MIPS, AVR, IA-32/x86-64, IA-32/IA64, PowerPC и т.д.
 * GCC стал считать ошибками некоторые программисткие "решения", которые компилировались ранее. Например, теперь не работает "#elif" без аргумента; "cstdio" больше не подразумевает включение "string.h", "ios.h", "iomanip.h", "streambuf.h" и "locale.h", а "stdint.h" не включает "string.h" и "ios.h". ; строковые функции больше не принимают "char*" в контексте "const char*" (т.е. если str1 - "const char*", то "char* str2 = strchr(str1, 'a')" работать не будет); ужесточены требования к инициализации C++ классов.

Разработчики Fedora уже ранее заявили о том, что версия 11 дистрибутива будет полностью скомпилирована GCC 4.4.0. Однако, работа предстоит немалая: при попытке пересборки новым компилятором 6228 пакетов дистрибутива было зафиксировано 559 ошибок.

http://www.opennet.r...shtml?num=21376

turbo

GCC
01 Января 2010, 22:07 #3 Последнее редактирование: 11 Ноября 2011, 17:56 от Zhek@Ch
[size="3"]Анонсировано соревнование по созданию запутанного кода на языке Си[/size]

Организаторы мероприятия "Underhanded C Contest" объявили о начале приема заявок на участие в конкурсе по созданию небольших и легко читаемых программ на языке Си, которые с виду не вызывают подозрений, но выполняют скрытые и непредсказуемые действия. Чем труднее при проведении аудита кода распознать скрытую вставку, тем выше ставится оценка участнику. В качестве задания участникам предлагается создать процедуру для распределения багажа в аэропорту, которая по волшебному стечению обстоятельств направляет багаж не по тому маршруту, если клерк при заполнении бланка оформит определенным образом текст в поле комментария.

Организаторы подчеркивают, что в отличие от известного соревнования по созданию самого запутанного и трудночитаемого кода The International Obfuscated C Code Contest , на конкурсе "Underhanded C Contest" ставится противоположная задача - код должен быть предельно ясен и читаем, но за невинным внешним видом должен быть скрыт "троянский конь". Работы на конкурс будут приниматься до 1 марта. Приз символический - сертификат на 100 долларов для покупки в интернет-магазине ThinkGeek.com.

С работами победившими на конкурсе в прошлые годы можно познакомиться на данной странице. Например, в прошлом году участникам предлагалось создать программу, которая рисует на изображении формата PPM черный прямоугольник, но с возможностью полностью восстановить закрашенную область. В 2007 году предлагалось подготовить программу для шифрования, при определенных условиях оставляющую возможность расшифровки без знания пароля. В 2006 году создавалась функция для обработки строк, на определенной операционной системе замедляющая свою работу.

http://www.opennet.r...shtml?num=24869

turbo

GCC
24 Февраля 2010, 18:02 #4 Последнее редактирование: 04 Ноября 2011, 18:26 от Zhek@Ch
[size="3"]GCC-плагин DragonEgg достиг возможности собственной пересборки[/size]

Разработчики проекта LLVM сообщили о новом достижении - GCC-плагин DragonEgg достиг состояния, позволяющего пересобрать самого себя. DragonEgg представляет собой подключаемый к набору компиляторов GCC плагин, позволяющий в максимально прозрачном режиме использовать в стандартном GCC оптимизаторы и генераторы кода, разработанные в рамках LLVM. LLVM компилирует программы в промежуточный платформонезависимый байткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации), который затем может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Одним из самых надежных тестов работоспособности компиляторов является пересборка собственной кодовой базы. DragonEgg на днях успешно перешагнул этот барьер: вначале с использованием DragonEgg были пересобраны исходные тексты GCC-4.5, LLVM и dragonegg, а затем эксперимент по был повторен с задействованием для пересборки свежескомпилированного бинарного файла. В настоящий момент до достаточно высокого уровня доведена работоспособность DragonEgg для языков Си и Си++, частично реализована поддержка Fortran и Ada, хуже обстоят дела с поддержкой Obj-C и Obj-C++, много работы предстоит проделать для поддержки Java. На текущей стадии развития DragonEgg поддерживает архитектуры x86-32 и x86-64, может работать в Linux и Darwin.

Несколько недель назад стадии возможности самопересборки достиг Clang, LLVM фронтенд для языков C, С++ и Objective-C.

Кроме CLang, из основанных на LLVM проектов, можно отметить:

 * VMKit - виртуальная машина для Java VM и .NET VM;
 * Реализация функционального языка программирования Pure;
 * LDC - компилятор для языка D;
 * Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
 * Rubinius и MacRuby - виртуальные машины для Ruby;
 * Unladen Swallow - реализация языка Python;
 * LLVM-Lua;
 * FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.

http://www.opennet.r...shtml?num=25551

Zhek@Ch

GCC
27 Марта 2011, 16:35 #5 Последнее редактирование: 02 Июня 2011, 01:18 от Zhek@Ch
[size="3"]Релиз набора компиляторов GCC 4.6.0 [/size]

После почти года разработки вышел набор компиляторов GCC 4.6.0, в котором добавлена поддержка языка программирования Go, созданного инженерами Google, а также добавлен новый уровень оптимизации "-Ofast", улучшена поддержка генерации кода для процессоров Intel Core 2 и выше.

Основные изменения:

  • Общие нюансы:
    • Добавлена поддержка стандартной библиотеки функций Bionic и возможность прямой сборки библиотек и приложений для платформы Android;
    • Интегрирована поддержка языка программирования Go (фронтэнд "gccgo"), которая не активирована по умолчанию и требует сборки с опцией "--enable-languages";
    • Опции сборки "-b архитектура_для_сборки" и "-v версия_компилятора" были убраны, потому что они не всегда работали корректно. Для этих целей предлагается использовать "machine-gcc" для кросс-компиляции или "архитектура-gcc-версия" для использования отличной от умолчания версии;
    • GCC стал более строг при использовании флагов компиляции, так если ранее можно было использовать флаги "--as-needed" и "--export-dynamic", предназначавшиеся для линковщика, теперь нужно указывать их правильно: "-Wl,--as-needed" и "-Wl,--export-dynamic";
    • Инфраструктура оптимизации C программ (-combine) была убрана в пользу более общей инфраструктуры оптимизации на стадии линковки (LTO);
    • GCC теперь включает математическую библиотеку libquadmath, распространяемую под лицензией LGPL, которая позволяет производить вычисления учетверённой точности с типом данным __float128, который пока доступен только на архитектурах x86, x86-64 и Itanium;
    • Часть портов GCC была объявлена устаревшей и будет исключена из GCC 4.7.0:
      • Argonaut ARC (arc-*)
      • National Semiconductor CRX (crx-*)
      • Motorola 68HC11 и 68HC12 (m68hc11-*-*, m6811-*-*, m68hc12-*-*, m6812-*-*)
      • Sunplus S+core (score-*)
    • Объявлены устаревшими индивидуальные порты некоторых архитектур:
      • Interix (i[34567]86-*-interix3*)
      • Generic ARM PE (arm-*-pe*, за исключением arm*-wince-pe*)
      • MCore PE (mcore-*-pe*)
      • SH SymbianOS (sh*-*-symbianelf*)
      • GNU Hurd на платформах Alpha и PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)
      • M68K uClinux (старый ABI) (m68k-*-uclinuxoldabi*)
      • a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*, vax-*-netbsd*, но не *-*-netbsdelf*)
    • Убрана поддержка архитектур, объявленных устаревшими в GCC 4.5.0;
  • Улучшения в оптимизации кода:
    • Добавлен новый уровень оптимизации "-Ofast", который основан на опциях -O3, но при этом может влиять на соответствие стандартам результирующего кода, например, он включает в себя опцию "-ffast-math";
    • Подсистема оптимизации Scalable Whole Program Optimizer (WHOPR) объявлена стабильной и используется по умолчанию при включении оптимизации уровня финальной компиляции (LTO, link time optimization). Для использования классической версии LTO, нужно использовать опцию "-flto-partition=none";
    • В LTO появилась возможность параллелизации выполнения, используя опцию компиляции "-flto=количество";
    • В LTO исправлено множество ошибок, теперь с её помощью можно собрать сам GCC и Mozilla Firefox;
    • Были улучшены возможности межпроцедурной оптимизации: была добавлена поддержка LTO и улучшены механизмы эвристики;
    • Добавлена опция компиляции "-fstack-usage", которая выводит в отдельный файл информацию об использовании стека каждой функцией;
    • Улучшено потребление памяти компилятором и время компиляции, например, для x86-64 архитектуры при использовании LTO время компиляции уменьшилось на 10%;
    • В библиотеке libstdc++ улучшена производительность при работе в режиме отладки;
  • Изменения в поддержке языков C и C++:
    • Добавлена поддержка нового типа "__int128" для архитектур, которые это позволяют;
    • С помощью флагов препроцессора "#pragma GCC diagnostic" прямо в коде можно указать типы warning'ов, которые будет выводить компилятор на этапе компиляции;
    • Добавлена опция "-fmax-errors=количество", которая заставляет компилятор прекращать работу при достижение заданного количества ошибок;
    • Для языка Си добавлена экспериментальная поддержка некоторых возможностей стандарта C1X:
      • Static assertions (ключевое слово _Static_assert);
      • Переопределение Typedef;
      • Новые макросы из float.h;
      • Анонимные структуры и объединения (union).
    • В компиляторе C++ улучшена поддержка стандарта C++0x;
  • Улучшения в поддержке процессорных архитектур:
    • Добавлена поддержка процессоров Cortex-M4 версии v7-em;
    • Добавлена поддержка LEON-серий процессоров SPARC V8;
    • Улучшена поддержка оптимизации для Intel Core 2 процессоров, используя опции "-march=core2" и "-mtune=core2";
    • Добавлена поддержка оптимизации для Intel Core i3/i5/i7 процессоров, используя опции "-march=corei7" и "-mtune=corei7";
    • Добавлена поддержка оптимизации для Intel Core i3/i5/i7 процессоров, поддерживающих векторные инструкции AVX, используя опции "-march=corei7-avx" и "-mtune=corei7-avx";
    • Добавлена поддержка оптимизации для AMD Bobcat (family 14) процессоров, поддерживающих векторные инструкции AVX, используя опции "-march=btver1" и "-mtune=btver1";
    • Для архитектуры PPC добавлена поддержка Darwin64 ABI;
    • Для x86 и x86-64 Linux приложений добавлена возможность использования не непрерывного стэка, используя опцию "-fsplit-stack". Эта опция полезна при компиляции многопоточных программ и в этом случае не придётся указывать максимальный размер стэка при создании потока;
    • Опция "-fomit-frame-pointer" теперь включена по умолчанию на уровнях оптимизации, кроме "-Os" (оптимизация для размера) для архитектур Linux-x86 и Darwin-x86;
    • x86 Darwin, FreeBSD, Solaris 2, MinGW и Cygwin теперь поддерживают тип данных "__float128";
    • Поддержка AVX-арифметики с плавающей точкой можно указать опцией "--with-fpmath=avx".

Zhek@Ch

GCC
14 Июня 2011, 00:25 #6 Последнее редактирование: 14 Июня 2011, 00:25 от Zhek@Ch
[size="3"]Компания PathScale открыла код GCC-совместимого набора компиляторов EKOPath 4[/size]

Компания PathScale анонсировала открытие исходных текстов высокопроизводительного набора компиляторов EKOPath 4, совместимого с GCC и удовлетворяющего требованиям стандарта ISO C99/C++ 2003. Кроме компиляторов С и С++, в комплект также входят: компилятор для языка Fortran 90/95/2003, совместимый с GDB отладчик PathDB, ассемблер PathAS, набор run-time-компонентов и стандартные библиотеки. Компилятор уже достаточно давно используется в промышленных системах, отвечает индустриальным требованиям к стабильности и надежности, поддерживает большое число дополнительных оптимизаций для платформ Intel 64 и AMD64, включает поддержку технологий Intel MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AMD SSE4A и AVX.

Код проекта открыт под лицензией GPLv3 и частично доступен в GitHub (полная версия будет размещена в ближайшие часы, после завершения обновления официального сайта проекта). Бинарные сборки подготовлены для Linux, FreeBSD и Solaris. Код отладчика PathDB открыт под более либеральной BSD-подобной лицензией. До открытия кода, стоимость лицензии на EKOPath 4 начиналась от 1795 долларов, после открытия кода компания PathScale намерена зарабатывать средства за счет оказания услуг технической поддержки и заключения сервисных контрактов. По мнению PathScale выгода от открытия кода будет связана прежде всего с увеличением числа пользователей и областей применения EKOPath, а также с привлечением сторонних энтузиастов и компанией к совместной работе над развитием проекта.

С точки зрения производительности, EKOPath 4 во многих ситуациях заметно опережает GCC, например, в тесте Himeno EKOPath обгоняет GCC почти в три раза, в тесте C-Ray быстрее на 40%, в тесте NASA NPB на 8%, в тесте TSCP на 80%. Подобные результаты не удивительны - пакет EKOPath 4 специально создавался для использования в промышленных системах, требующих повышенной производительности (например, EKOPath используется в NASA, военных подразделениях и лабораториях Министерства энергетики США). В EKOPath 4 обеспечена поддержка открытого стандарта OpenMP 2.5, компилятор позволяет автоматически распараллеливать выполнение программ на многоядерных процессорах.

С позиции совместимости, EKOPath 4 не испытывает проблем со сборкой ОС NetBSD и FreeBSD, а также таких крупных проектов, как инструментарий GNU, Qt и KDE. Удалось обеспечить сборку Linux-ядра, но пока это возможно только после применения небольшого патча. В настоящее время компания PathScale работает в направлении обеспечения полной совместимости с доступными научными библиотеками и размещенным в публичных репозиториях открытым ПО.

Отладчик PathDB имеет режим совместимости с GDB и поддерживает спецификацию DWARF4, определяющую формат прикрепления к приложениям отладочной информации. Последняя версия PathDB была улучшена в направлении упрощения отладки многопоточных приложений и библиотек, продолжена работа в области повышения надежности и производительности, улучшена интеграция поддержки языков C++ и Fortran, расширены средства для отладки в кластерных окружениях.


Zhek@Ch

GCC
28 Июня 2011, 07:24 #7 Последнее редактирование: 28 Июня 2011, 07:24 от Zhek@Ch
[size="3"]Корректирующие релизы наборов компиляторов GCC 4.6.1 и GCC 4.3.6[/size]

Вышел корректирующий релиз набора компиляторов GCC 4.6.1, в котором проведена работа по исправлению ошибок, регрессивных изменений и проблем с совместимостью. С момента выхода прошлой версии отмечено 157 исправлений, большинство из которых связано с устранением внесенных ранее регрессивных изменений и с улучшением поддержки спецификаций C++0x. Исходные тексты компилятора можно загрузить с сайта проекта или с его зеркал. Следующее обновление GCC 4.6.2 ожидается в конце сентября или начале октября.

Дополнение: одновременно вышел корректирующий релиз GCC 4.3.6, в котором устранено 28 ошибок. Это последнее обновление GCC 4.3, ветка объявлена закрытой.


Zhek@Ch

GCC
12 Июля 2011, 00:18 #8 Последнее редактирование: 12 Июля 2011, 00:18 от Zhek@Ch
[size="3"]Опубликован стандарт OpenMP 3.1, определяющий API для параллельного программирования [/size]
 
Анонсировано принятие финального варианта открытой спецификации OpenMP 3.1, выступающей в роли стандарта, определяющего API и способы задействования методов параллельного программирования для языков Си, Си++ и Фортран. Прошлый вариант спецификации OpenMP 3.0 был выпущен три года назад.

 Выпуск OpenMP 3.1 в основном носит корректирующих характер и устраняет всплывшие за последние годы недоработки. Тем не менее в обновленном вариант спецификации представлено несколько полезных новшеств, добавленных в угоду пожеланий представителей сообщества. Например, в спецификацию включена реализация предопределенных операторов редукции min и max, а также добавлены расширения для атомарных конструкций (блок atomic), позволяющих захватить или вывести значение совместно используемой переменной, которая обновляется внутри конструкции, без её предварительного чтения. Из других расширений отмечается возможность привязки потока к процессору и поддержка оптимизации приложений, использующих модель выполнения задач OpenMP.

 Что касается будущего стандарта OpenMP 4.0, наиболее привлекательными новшествами в нем станет поддержка ускорения за счет привлечения мощностей GPU, значительные улучшения в модели выполнения задач, добавление механизмов обработки ошибок и поддержка определенных пользователем редукций.


Zhek@Ch

GCC
14 Июля 2011, 00:33 #9 Последнее редактирование: 14 Июля 2011, 00:33 от Zhek@Ch
[size="3"]Наглядное представление шагов оптимизации в GCC [/size]

Дэвид Малколм (David Malcolm), автор Python-плагина для GCC (gcc-python-plugin), подготовил наглядную диаграмму, оформленную в стиле карты метро, с отображением выполняемых в GCC шагов оптимизации, используемых в процессе преобразования исходного кода в машинные инструкции, минуя несколько различных внутренних представлений. Карта сформирована в SVG-формате, поэтому для просмотра требуется поддерживающий данный формат браузер, например, Firefox, Opera или Chrome.


Zhek@Ch

GCC
19 Августа 2011, 08:03 #10 Последнее редактирование: 19 Августа 2011, 08:04 от Zhek@Ch
[size="3"]Спецификация C++0X принята в качестве международного стандарта C++11 [/size]

Завершилась длительная эпопея по принятию нового стандарта для языка программирования Си++. Комитет ISO по стандартизации языка C++ единогласно утвердил спецификацию C++0X в качестве международного стандарта "C++11". Стандарт C++0X планировалось выпустить еще в 2008 году, но его принятие постоянно откладывалось. Большинство представленных в стандарте возможностей уже поддерживаются в таких компиляторах, как GCC, IBM C++, Intel C++, Visual C++, C++ Builder. Поддерживающие C++11 стандартные библиотеки реализованы в рамках проекта Boost.

Новый стандарт развивался более 10 лет и пришел на смену стандартам C++98 и C++03. Отмечается, что если различия между стандартами C++98 и C++03 были столь незначительными, что их можно было не заметить, то стандарт C++11 содержит ряд кардинальных улучшений, как самого языка, так и стандартной библиотеки. По словам Бьерна Страуструпа, создателя C++, C++11 ощущается как новый язык, части которого лучше сочетаются друг с другом. В C++11 высокоуровневый стиль программирования стал более естественным, а эффективность возросла как никогда раньше. Кроме того, язык стал проще для изучения и освоения новичками.

Основные улучшения, отраженные в стандарте C++11:

  • Расширение стандартной библиотеки в таких областях, как регулярные выражения, хэши, генераторы случайных чисел, интеллектуальные указатели и т.п.
  • Поддержка лямбда-выражений и лямбда-функций, т.е. анонимных функций, объявляемых в месте использования. Например, "[](int x, int y) { return x + y; }";
  • Поддержка списков инициализации, т.е. передачи структуры или массива в виде списка значений. Например: для конструктора или функции Test можно указать шаблонный класс std::initializer_list и затем для инициализации использовать "Test testVar = {1, 2, 3, 4};" или "Test(1,2,3,4,5)";
  • Универсальная форма инициализации для всех видов объектов с помощью расширения синтаксиса списков инициализации;
  • Поддержка ключевого слова "decltype" для определения типа выражения во время компиляции, например, можно указать "decltype(someVar) otherIntegerVariable = 5;";
  • Возможность автоматического назначения типа при указании ключевого слова "auto". Тип выбирается на основании анализа типа аргумента. Например, "auto otherVariable = 5;";
  • Возможность создания шаблона функции, возвращаемый тип которого определяется автоматически на основании другой функции или выражения;
  • Аналог циклов "foreach" для перебора элементов коллекции. Например, для перебора элементов массива my_array достаточно указать "for(int &x : my_array)";
  • Реализация нового типа ссылок на временные объекты (Rvalue References), объявляемые через выражение "type &&";
  • Реализация ключевого слова "constexpr", позволяющего указать, что выражение (функция или конструктор) возвращает константу и данные выражения можно использовать как константы, например: "constexpr int GetFive() {return 5;}". В дальнейшем GetFive можно указать, например, при определении массива "int some_value[GetFive() + 7];";
  • Ослаблены требования при определении типов простых данных. Например, как тип простых данных могут рассматриваться классы, при соблюдении ряда правил;
  • Поддержка определения внешних шаблонов, позволяющих увеличить скорость компиляции;
  • Возможность создавать шаблоны с переменным количеством аргументов;
  • Расширенная поддержка символов в Unicode;
  • Возможность вызывать одни конструкторы класса из других конструкторов этого же класса, что позволяет создавать конструкторы, использующие другие конструкторы без дублирования кода;
  • Возможность использования локальных и безымянных типов в качестве аргументов шаблонов;
  • Вместо макроса NULL для обозначения нулевого указателя введено ключевое слово nullptr.

Zhek@Ch

GCC
27 Октября 2011, 17:02 #11 Последнее редактирование: 27 Октября 2011, 17:02 от Zhek@Ch
[size="3"]Корректирующий релиз набора компиляторов GCC 4.6.2 [/size]

Доступен корректирующий релиз набора компиляторов GCC 4.6.2, в котором проведена работа по исправлению ошибок, регрессивных изменений и проблем с совместимостью. С момента выхода прошлой версии отмечено 115 исправлений, большинство из которых связано с устранением внесенных ранее регрессивных изменений и с улучшением поддержки спецификаций C++0x. Исходные тексты компилятора можно загрузить с сайта проекта или с его зеркал. Следующее обновление GCC 4.6.3 ожидается в феврале.


Zhek@Ch

GCC
14 Ноября 2011, 17:49 #12 Последнее редактирование: 14 Ноября 2011, 17:49 от Zhek@Ch
[size="3"]Возобновлено соревнование по написанию самого запутанного кода на языке Си [/size]

После пятилетнего перерыва, анонсировано возрождение конкурса IOCCC (International Obfuscated C Code Contest), участникам которого предлагается написать на языке Си наиболее запутанный и трудноразбираемый код, на основании анализа которого проблематично разобраться в сути решаемой задачи. При этом код должен быть интересен и чем-то примечателен, подчеркивая важность правильного стилевого оформления или выделяя неожиданные стороны языка Си. Размер программы не должен превышать 4096 байт, программа должна собираться и выполнять какое-либо осмысленное действие.

Работы на конкурс будут приниматься до 12 января 2012 года. Каталог работ прошлых победителей можно найти на данной странице.