Обсуждаем компиляторы

Тема в разделе "Машинное отделение", создана пользователем WinPooh, 29 июн 2007.

  1. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.494
    Симпатии:
    3.127
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    А давайте обсудим компиляторы - кто каким пользуется, с какими настройками... Чур, без языковых войн а-ля "Паскаль против Си" :)
  2. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.494
    Симпатии:
    3.127
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Публичная версия Греки собрана с помощью gcc/MinGW 3.4.5 под Windows, и с помощью того же gcc (но уже 4-й версии) под Линуксом и Маком. В качестве редактора использую на 90% vim и на 10% - встроенный редактор FAR-а.

    Новую версию (скорее всего, она будет в стандарте ANSI C - для большей совместимости) планирую собирать на двух компиляторах, gcc и MSVC 6.0. Пробовал Visual C++ 2005 - не понравилось. Выигрыша в производительности не заметил, а среда разработки не пришлась по вкусу.

    Интеловский компилятор давно замышляю попробовать, но как-то качать 150 метров ради триальной версии с месяцем работы - пресловутое земноводное не позволяет...
  3. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    кстати, я сравнивал результаты оптимизации vc++6.0 и vc++2005 - никакой разницы. такое ощущение, что новая версия просто расширена для поддержки .NET, ну, возможно, еще подправлены какие-то штуки, под стандарт компилятор подогнали. сам я пользуюсь gcc (нравится), VC++2005 (надо). Но оптимизация С++ у GCC никакая (очень плохо работает с оптимизацией потоков), в отличие от С. так что, если хочется получить быструю и маленькую програмку через GCC - пишу в стиле С++ используя сишные функции... когда-то использовал интеловский компилятор (7-ка) - неплохой. а кто что может сказать о mars?
  4. варяг Учаcтник

    • Участник
    Рег.:
    23.10.2006
    Сообщения:
    98
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Гонду-Раша
    Оффлайн
    Не знаю, как сейчас, но полгода назад я в инете находил кряки для Intel C++, причем для разных версий. Правда скачать ни кряки, ни триальную версию, я так и не удосужился :)
  5. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    кстати, насчет компиляторов - можно почитать о бесплатных
  6. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    Перекомпилил свой генератор ходов под винду (VC++ 6.0). Время уменьшилось до 39 секунд (против 63 секунд когда компилил BCPP 3.0 для DOS). Думаю перевести на паскаль (компилить буду Delphi 6.0), если не обломаюсь, и сравнить скоростя.
  7. Chemer Максим

    • Участник
    Рег.:
    14.09.2006
    Сообщения:
    1.674
    Симпатии:
    13
    Репутация:
    0
    Адрес:
    Запорожье
    Оффлайн
    Зочем же сразу в делфи переводить, попробуй его "старшего" брата билдер 6, ИМХО он всегда быстрее делфи, но все равно они оба медленее студийных компилеров.
  8. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    Так антиресно паскаль посмотреть, а шо толку от билдера? Или ты намекаешь что билдер лучше VС++ ?
  9. Chemer Максим

    • Участник
    Рег.:
    14.09.2006
    Сообщения:
    1.674
    Симпатии:
    13
    Репутация:
    0
    Адрес:
    Запорожье
    Оффлайн
    Ты не правильно прочитал мой пост. Я наоборот пишу, что он и делфи медленее VC++. А уж тем более интеловского.
  10. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Билдер не быстрее чем Делфи, VC сравним по быстродействию с Делфи. А вот Интеловский конечно круче. Но разница в быстродействии не так уж и велика.
  11. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    NS, а какой у тебя perft на Дельфи?
  12. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я уже даже и не помню куда исходники старой Анечки засунул, Так что насчет Perft ничего сказать не могу :)
    Но я в ней не гнался за скоростью.
  13. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    нашел у себя Intel 9.1 32bit - только что-то он не интегрировался в VS... непойму пока.
  14. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А у тебя VS какая? У меня в VS2005 интегрировался без проблм.
  15. Shark Учаcтник

    • Участник
    Рег.:
    30.06.2007
    Сообщения:
    124
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Барнаул
    Оффлайн
    Вот мои 5 копеек.

    Регулярно пишу на С/С++, в качестве хобби часто просматриваю сгенерированный ассемблерный код. Смотрю соответствует ли работа оптимизатора моим ожиданиям.

    За последние 10лет по моему мнению ситуация примерно такая.

    Intel - Всегда идет чуть впереди всех.

    Лет 10 назад Watcom был в лидерах
    Лет 5-6 назад мне очень нравился код кенерируемый Borland 4 и 5 версии
    На даный момент VS 2005 лучший следом за Интел, код - очень хороший.

    GCC всегда имел компромис с совместимостью в ущерб производительности.
    Он замыкает список лучших компиляторов.

    Мнение мое основано на анлизе сгенерированого кода.

    Ну и рекомендации по опциям MSVC:
    CallingConvention=__fastcall (/Gr)
    Optimization=Maximize Speed (/O2)
    InlineFunctionExpansion=Any Suitable (/Ob2)
    EnableIntrinsicFunctions=Yes (/Oi)
    FavorSizeOrSpeed=Favor Fast Code (/Ot)
    OmitFramePointers=Yes (/Oy)
    BufferSecurityCheck="false"
  16. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    NS vs2005 express, в 2003 вроде без проблем вставал.
  17. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    В Экспресс вроде не встает. Я его установил и тут-же снес. Он порезан просто до безобразия. Таким продуктом пользоваться нельзя :)
  18. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    NS тогда 2003 установлю :) 2005 полного у меня нет.
  19. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    в 2003 все ок встало. оптимизирует неплохо! на том же коде в тесте выйграл 1.5 сек :)
  20. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
  21. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    известное сравнение. но старенькое уже.
  22. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Может кто-нибудь знает как сделать, что в VS можно было компилировать такой код:
    Код:
      for(int i = 0; i < 64; i++)
        zobEp[i] = Key(genrand_int64());
      
      for(int i = 0; i < 16; i++)
        zobCastle[i] = genrand_int64();
    Он считает, что i объявляется повторно.
  23. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    А что мешает i отдельно объявлять?
  24. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.494
    Симпатии:
    3.127
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    По стандартам С99 и С++ как раз можно. Область действия объявления - до конца выражения for.
    См.
    C99 Standard, 6.8.5.3
    С++ Standard, 6.5.3
  25. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    Portability Hints: Microsoft Visual C++ 6.0 SP4
    Scopes of definitions in for-loops

    The scope of variable definitions in for loops should be local to the loop's body, but it is instead local to the enclosing block.

    Workaround: Enclose the offending for loops in another pair of curly braces.

    Another possible workaround (brought to my attention by Vesa Karvonen) is this:
    Note that platform-specific inline functions in included headers might depend on the old-style for scoping.
    http://www.boost.org/more/microsoft_vcpp.html

    http://support.microsoft.com/kb/167748/
  26. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
  27. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.494
    Симпатии:
    3.127
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Я в таких случаях для пущей совместимости объявляю переменную вне оператора цикла.
  28. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Так это неустранимый баг VC++?
  29. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    А что это так критично? Зачем тебе это надо? Чем плохо отдельно объявлять переменную?
  30. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Иногда приходится компилировать чужие исходники.
    Например, как побороть такое горе:

    const Bitboard FileABB = 0x0101010101010101ULL;

    VC++ не знает таких суфиксов.
  31. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.494
    Симпатии:
    3.127
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    У меня для этого определен макрос:

    Код:
    #ifdef _MSC_VER
    #define LL(x) x##L
    #else
    #define LL(x) x##LL
    #endif
  32. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Так константы уже в таком виде:
    0x0101010101010101ULL;

    И достаточно ли будет одного L?
  33. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.494
    Симпатии:
    3.127
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    А константы я пишу так:
    Код:
    const U64 x = LL(0xfefefefefefefefe);
  34. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Так все уже написано до нас. Нам только скомпилить надо.
  35. MikhailK Mikhail Kalenkov

    • Участник
    Рег.:
    12.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Moscow
    Оффлайн
    http://support.microsoft.com/kb/167748/

    RESOLUTION
    Compile with /Za, Disable Language Extensions. To select this option in Developer Studio, select Project, Settings, and then click the C/C++ Tab. Change the Category to Customize and select Disable Language Extensions.

    If you cannot use the /Za option, you can work around the problem by #defining the "for" keyword as follows:

    Что непонятно?

Поделиться этой страницей