LINUX.ORG.RU

g++ долгая компиляция


0

3

С чем связана долгая компиляция c++ кода, с компилятором g++ или ключами оптимизации и т.п. Есть ли альтернатива g++ в линуксе, как есть способы увеличения скорости компиляции (покупка мощного процессора исключается)?

есть способы увеличения скорости компиляции (покупка мощного процессора исключается)?


ccache?
-jN для make? где N=кол-во_ядер+1
-pipe?

с компилятором g++ или ключами оптимизации и т.п.


скорее второе
а так можешь покурить про icc
только далеко не всё им собирается/работает

megabaks ★★★★
()

Причина кроется в самом C++

Используй прекомпилированные заголовочные файлы и распараллеливание сборки.

anonymous
()

с компилером/линкером тоже
кури gnu gold

anonymous
()

В добавок к вышесказанному, попробуй дерево сборки держать в tmpfs

jeuta ★★★★
()

Есть ли альтернатива g++ в линуксе

icc, clang, mach64, comeau...

есть способы увеличения скорости компиляции

libraries/modules, pimpl, forward declaration, незлоупотребление шаблонами

shty ★★★★★
()

clang + pch + билд в несколько «потоков»

anonymous
()

Минимизировать количество информации в заголовочных файлах, аккуратно относиться к #include-ам и стараться не включать лишнего. Иногда заголовочный файл вообще не нужно включать, например для объявления указателя на класс можно сделать так:

// #include "myclass.h"
class MyClass;
class OtherClass {
    MyClass *member;
...
}

Минимизировать количество шаблонов, не использовать всякое метапрограммирование на шаблонах, не использовать STL.

Я видел проект на плюсах, который собирался на одном процессоре за несколько секунд, там было несколько десятков тысяч строк кода. Его автор очень отрицательно относился к STL и вообще код там был весьма специфичный и велосипедов хватало, но компилировалось всё очень быстро.

В общем С++ медленный для компиляции язык, но есть возможность ускорить его компиляцию.

Legioner ★★★★★
()
Ответ на: комментарий от Harald

Т.е. опыт написания на «другом» и год работы в генту?
Действительно заслуживающие уважения пруфы, признаю вашу правоту.

trex6 ★★★★★
()
Ответ на: комментарий от Legioner

не использовать STL.

только без фанатизма

[..] проект на плюсах, который собирался на одном процессоре за несколько секунд, там было несколько десятков тысяч строк кода. Его автор очень отрицательно относился к STL и вообще код там был весьма специфичный и велосипедов хватало [..]

ага, а без велосипедов там небось было от силы пару сотен строк

shty ★★★★★
()
Ответ на: комментарий от trex6

Eclipse, написанная на Java, компилируется 25 минут. OpenOffice, написанная на C++, компилируется 5 часов. Есть разница? Проекты сопоставимы по размеру исходников.

iZEN ★★★★★
()
Ответ на: комментарий от quest

LLVM/Clang на 25-30% быстрее компилирует, чем GCC.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

написанная на Java, компилируется 25 минут

Молодца, очень адекватное сравнение, ты ещё с питоном сравни, там вообще 0 будет.

А по теме: рекомендую внимательно относиться к инклудам в заголовочниках.

Kosyak ★★★★
()

Напиши хоть, что именно долго компилируется.

note173 ★★★★★
()
Ответ на: комментарий от shty

Нет. Хотел посмотреть на проведенные исследования. Особенно было бы интересно узнать, каким образом сравнивают время компиляции на разных языках. Написать два одинаковых проекта на разных языках - интересная задача. Тем более, что g++ hello_world.cpp тут будет совсем не к месту.

trex6 ★★★★★
()
Ответ на: комментарий от iZEN

Угу. Только OOo у меня работает без проблем, а загрузки Eclipse на своей машинке я так и не дождался. 2 раза пробовал, но больше 3-х минут ждать, пока загрузится IDE... Я, видимо, слишком тороплюсь жить.

trex6 ★★★★★
()
Ответ на: комментарий от Kosyak

Молодца, очень адекватное сравнение, ты ещё с питоном сравни, там вообще 0 будет.

Что же тебе не нравится в этом сравнении? То что оно не в пользу c++?

anonymous
()
Ответ на: комментарий от Kosyak

Кодогенерация же минимум времени занимает. Java простой язык, парсится в один проход. C++ с его шаблонами гораздо сложнее для компиляции.

anonymous
()
Ответ на: комментарий от Kosyak

Чем это не объективно?

Какая, блять, разница, во что компилировать? Время, занимаемое кодогенератором - самое минимальное, блять, из всех стадий компиляции.

Вот ты и тебе подобные - вы что, реально чтоли вообще не понимаете почему C++ объективно долго компилируется? Как можно такими ебланами быть?

lovesan

anonymous
()
Ответ на: комментарий от shty

только без фанатизма

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

ага, а без велосипедов там небось было от силы пару сотен строк

Вряд ли.

Legioner ★★★★★
()
Ответ на: комментарий от trex6

3 минуты это у вас что-то не так. Холодный старт секунд 20 максимум, перезапуск секунды 3.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Legioner

ага, а без велосипедов там небось было от силы пару сотен строк

Вряд ли.

я утрирую конечно, и, тем не менее, велосипедизм ведёт к раздуванию кода в разы

shty ★★★★★
()

А проблема точно в g++? Встречал такое, что в Makefile был прописан вызов getconf, mysql_config для получения параметров сборки типа такого:

SOME_OPTION = $(getconf ...)
ANOTHER_OPTION = $(mysql_config ...)

...

.cc.o:
        $(CXX) -c ... $(SOME_OPTION) $(ANOTHER_OPTION) ...

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

SilentBob
()
Ответ на: комментарий от anonymous

Неосилятор не способен придумать что-то оригинальнее, чем валить все на инструмент? Кривые кирпичи враги подсунули?

slackwarrior ★★★★★
()
Ответ на: комментарий от SilentBob

Проблема в ДНК некоторых «программистов на С++». Встречал замечательный сорец, с мешаниной рекурсивных шаблонов, который собирается на 3-х гигах до суток (1 файл напрочь кладет систему в iowait в ожидании конца разбора), а после некоторого пересмотра включений заголовков и инстанцирования шаблонов только там, где это нужно - полтора часа (аффтарам того сорца было пофиг на циклические зависимости и т.д. - «добавьте памяти же, 2 гига мало!») .

slackwarrior ★★★★★
()
Ответ на: комментарий от trex6

Ты когда-нибудь видел, как компилировали Дельфи первой или второй версии?

Такую ракету еще найти надо постараться. Даже лиспу с его прицелом на интерактивность всего и вся будет тяжело тягаться.

dave ★★★★★
()
Ответ на: комментарий от slackwarrior

Да у тебя похоже какие-то комплексы. Расскажи-ка подробнее про «валить все на инструмент», что именно «всё», и кто валил это «всё» на инструмент.

Я думал что это общеизвестный факт, что с++ — медленно компилируемый язык, да забыл что у фанатиков баттхерт начинается от любого сомнения в идеальности их объекта поклонения.

anonymous
()
Ответ на: комментарий от anonymous

> Я думал что это общеизвестный факт
Ну до факта о том, что солнце встает на востоке, этому факту далековато.
Так что давайте пруфы уже, а какашками кидаться и обезьяны умеют.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Скажи честно, ты писал на чем-нибудь кроме c++? Я имею в виду что-то большее чем hello-world или лабы по информатике.

anonymous
()

С чем связана долгая компиляция c++ кода, с компилятором g++ или ключами оптимизации и т.п.

Для начала, что за проект? Сколько в нём файлов? Если ты компилируешь один большой файл, то начни его дробить, поможет при разработке сократить время. Избегай шаблонов и излишней оптимизации при компиляции(В своё время на одной из проводимых олимпиад по программированию столкнулись с проблемой, что очень простенький код в ~20 строк компилился порядка 10 секунд).

AlexVR ★★★★★
()
Ответ на: комментарий от trex6

Чтобы засчитать слив, нужно обладать точкой зрения, которую ты сумел защитить в споре. Точки зрения у тебя быть не может, т.к. у с другими языками ты просто не знаком.

anonymous
()
Ответ на: комментарий от anonymous

Ученому мужу было бы уместно хотя бы упомянуть язык, с которым он сравнивал С++ по скорости компиляции.

trex6 ★★★★★
()
Ответ на: комментарий от slackwarrior

Неосилятор не способен придумать что-то оригинальнее, чем валить все на инструмент? Кривые кирпичи враги подсунули?

C++ - объективно плохой язык почти со всех точек зрения. Отрецание этого факта автоматически ставит под сомнение твое знание С++ в первую очередь :3

Waterlaz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.