Форум: "Прочее";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизПочему компилятор Делфи так быстро работает? Найти похожие ветки
← →
DillerXX © (2006-07-15 14:28) [0]Или точнее почему в С++ компилятор/линкер/Generation of Browse Information ТАК медленно работает? У Майкрософт был не один год, не понимаю почему не могли оптимизировать Студию до скорости хотя бы приближенной к Делфи... меня прям добивают ожидание по 10 секунд :( А в делфи F4 нажал и радуешься (дебажишь).. Вот
← →
tesseract © (2006-07-15 14:33) [1]Компилятор delphi - однопроходный,
С++ - многопроходный, вдобавко он не поддерживает "прекомпелированные" заголовочные файлы.
← →
DrPass © (2006-07-15 15:33) [2]
> он не поддерживает "прекомпелированные" заголовочные файлы
Поддерживает. Но, конечно, это не ускоряет его настолько, чтобы можно было сравнить с однопроходными компиляторами
← →
Bill_Gates (2006-07-15 15:39) [3]А у тебя лецинзеонный Delphi ?...
← →
GrayFace © (2006-07-15 16:47) [4]При чем тут лецинзеонный Delphi?
← →
MeF Dei Corvi © (2006-07-15 19:04) [5]Такая специфика языка. Ничего тут не поделать...
> меня прям добивают ожидание по 10 секунд
Это ещё мало :) Вот когда прога компилируется 5-10 минут, то это уже вообще жесть :) Зато за это время можно чай попить, в инете посидеть...
← →
BigBot (2006-07-15 19:17) [6]DillerXX © (15.07.06 14:28)
Если включена инкрементальная компиляция, то компилируется не вся программа, а лишь файлы, в которые были внесены изменения.
Вся программа будет компилироваться в случае, если вносились изменения в глобальные заголовочные файлы, в которых следует поддерживать чистоту.
← →
Desdechado © (2006-07-15 19:22) [7]> поддерживать чистоту
оставлять пустыми?
:))
← →
BigHumanoidBot © (2006-07-15 19:24) [8]Desdechado © (15.07.06 19:22) [7]
Это как в саду камней - ничего лишнего.
← →
DrPass © (2006-07-15 19:35) [9]
> MeF Dei Corvi © (15.07.06 19:04) [5]
> Это ещё мало :) Вот когда прога компилируется 5-10 минут,
> то это уже вообще жесть :)
Когда в далеком 1997 вышел ВСВ 1.0, он именно столько и компилировал пустую форму на моей машине с 8МБ ОЗУ. Про непустую форму я уже не говорю :)
← →
homm © (2006-07-15 19:37) [10]> Компилятор delphi - однопроходный,
> С++ - многопроходный,
Сколько раз такое слышал, но до сих пор не могу вникнуть в суть. Даже если предположить что компилятор С делает 5 (на пример) проходов, то не все они разбирают семантеку языка, и по идее наверное по сложности можно приравнять к 3-м дельфийским.
> поддерживает "прекомпелированные" заголовочные файлы.
Даже когда делаю ребилд проекта, и компилится можули по 70-80 тыш строк, это занимает около секунды на моем не молодом Сел563, а С простой проект компилится и линкуется около 20-30 сек. При чем большую часть времени именно линкуется. Так что вопрос наверное в том, почему сишные *.obj на столько труднее линковать, чем дельфийские *.dcu?
← →
Ketmar © (2006-07-15 20:03) [11]ответ в том, что dcu -- спецформат. а obj -- общий. %-)
← →
BigHumanoidBot © (2006-07-15 20:10) [12]Ketmar © (15.07.06 20:03) [11]
А каким образом общность формата отражается на продолжительности линковки?
Кстати, существует несколько разновидностей obj - coff (MS), omf (Borderland).
← →
разводящий (2006-07-15 20:19) [13]Часто, чтобы что-то приобрести - нужно с чем-либо расстаться. Вот и на Си - за счёт скорости компиляции екзешник работает быстрее.
← →
tesseract © (2006-07-15 20:24) [14]> Сколько раз такое слышал, но до сих пор не могу вникнуть
> в суть. Даже если предположить что компилятор С делает 5
> (на пример) проходов, то не все они разбирают семантеку
> языка, и по идее наверное по сложности можно приравнять
> к 3-м дельфийским.
Гм а gcc - дело имел ? Сколько он проходов делает неясно, но компилирует оч долго.
Просто есть ещё и оптимизация, Pascal проще для оптимизации нежили С.
Также зависит и от количества методик оптимизации.
надоел MSVC переходи на intel :-) Он для некоммерческого использования бесплатный, а код самый шустрый. Хотя MS Visual Toolkit и для коммерческого бесплатен.
> Даже когда делаю ребилд проекта, и компилится можули по
> 70-80 тыш строк, это занимает около секунды на моем не молодом
> Сел563,
Поудаляй dcu и потом rebuild - больше времени займёт.
← →
Ketmar © (2006-07-15 20:27) [15]для smart linking, например. %-)
а вообще-то причины несколько другие. ну примите это как факт. хотя, например, никто не мешает сделать быстрый си-компилятор (см. тот же tcc, например). тут "закавыка" из другого места растёт (нет, не из кривых рук программистов %-).
← →
homm © (2006-07-15 20:34) [16]> Поудаляй dcu и потом rebuild - больше времени займёт.
С какой стати? Столько же и займет.
← →
Reindeer Moss Eater © (2006-07-16 12:13) [17]Однопроходность и строгая типизация языка по моему главные причины.
← →
Ketmar © (2006-07-16 12:58) [18]ай. причина в том, что написано так. одно -- быстро, другое -- медленно. вот и всё. %-)
← →
DillerXX © (2006-07-18 14:57) [19]
> Часто, чтобы что-то приобрести - нужно с чем-либо расстаться.
> Вот и на Си - за счёт скорости компиляции екзешник работает
> быстрее.
Разве так? По-моему в скорости почти нет различий.
А на счёт многопроходности... никак не понимаю, где здесь можно сделать несколько проходов? Если уж в Делфи 1.. максимум 2 прохода - один собирает все объявленные переменные, второй интерпретирует вызовы функций...
← →
DevilDevil © (2006-07-18 15:21) [20]Мне вообще не понятно, почему до сих пор и в С++ и в Delphi не сделают 2 режима компиляции:
1) БЫСТРАЯ КОМПИЛЯЦИЯ (один проход, почти без оптимизации) [по-умолчанию]
2) МЕДЛЕННАЯ КОМПИЛЯЦИЯ (Оооочень медленно, офигенная оптимизация) [перед выпуском программы "в свет"]
НУУУУ ПОООЧЧЕЕЕМУУУУУУУУУУУ ?????????????
← →
Reindeer Moss Eater © (2006-07-18 15:43) [21]Двупроходность с оптимизацией никаким боком не связана.
Это же просто следствие наличия препроцессора.
← →
MeF Dei Corvi © (2006-07-18 16:07) [22]
> просто следствие наличия препроцессора.
и специфической семантики языка C++ :)
← →
DillerXX © (2006-07-18 16:13) [23]
> и специфической семантики языка C++ :)
Можно об этом поподробнее?
← →
Ketmar © (2006-07-18 20:29) [24]"holy, holy war! we are fighting..." (ц)
← →
Eraser © (2006-07-19 02:43) [25]> [20] DevilDevil © (18.07.06 15:21)
эт два компилятора разных делать надо... пока второй изобретать будут - на современных компах и первый за секунду откомпилит.
← →
Slym © (2006-07-19 05:11) [26]DevilDevil © (18.07.06 15:21) [20]
1) БЫСТРАЯ КОМПИЛЯЦИЯ (один проход, почти без оптимизации) [по-умолчанию]
2) МЕДЛЕННАЯ КОМПИЛЯЦИЯ (Оооочень медленно, офигенная оптимизация) [перед выпуском программы "в свет"]
А потом странные неповторяющиеся ошибки, позникающие при неучете или незнании оптимизации
← →
DillerXX © (2006-07-19 09:38) [27]Вы лучше про специфическую семантику языка расскажите, которая требует 5 проходов
← →
icWasya © (2006-07-19 11:05) [28]про специфику http://www.pcmag.ru/archive/9705s/05s979.asp
← →
аноним 3000 (2006-07-19 11:45) [29]Cтудия (VC71), кстати, не так уж долго компилит даже относительно большие проекты. Yj не 10 минут. А если не весь проект, а только 1 или 2 С++ файла, то почти мгновеннно. Естественно, опция precompiled headers включена и всюду используется.
а 2005-ая еще быстрее. уже почти сравнимо с делфи.
и все-таки Делфи собирает проекты быстрее..
почему? С++ - "многопроходный компилятор"? что это значит? я это только на этом форуме слышал..
первый проход препроцессором? дык, препроцессинг и в делфи есть..
да и не может он много времени занимать..
мне кажется есть 2 основные причины:
1. это из-за заголовочных файлов. т.е компилятор должен обработать не только содержимое срр-файла, но и всех заголовочных файлов, что туда включены. Т.е. растет объем работы. Частично решается precompiled headers. но только частично
2. С++ как язык значительно сложнее чем паскаль. Например, нужно отследить и расставить неявные вызовы деструкторов для объектов на стеке.. Кроме того, там есть такие штуки как шаблоны. И еще, нам так нравится использовать STL и Boost.
Некоторы фичи С++ (например, раздельная компиляция шаблонов) настолько сложны, что не поддерживаются большинством компиляторов.
← →
Verg © (2006-07-19 11:47) [30]
> дык, препроцессинг и в делфи есть..
Интересно было бы послушать про препроцессор в Delphi...
← →
Alien1769 © (2006-07-19 11:51) [31]У ув. аноним 3000 своеобразный Дельфи ! :)
← →
Nic © (2006-07-19 11:53) [32]
> а 2005-ая еще быстрее. уже почти сравнимо с делфи.
Правда? D7 на Celeron 600 моментально компилирует весьма солидные проекты. Буквально 1-2-3 секунды, даже кофе не успеешь заварить :) VC7.1 компилирует даже небольшой проект ощутимо.
← →
Nic © (2006-07-19 11:55) [33]
> Nic © (19.07.06 11:53) [32]
Да что уж там заварить, налить не успеешь, уже всё работает. Я уже умалчиваю про размешать.
← →
StriderMan © (2006-07-19 12:12) [34]на Делфи успеваю налить себе кофе только когда полностю компилю группу из 7 проектов общим объемом около 500К строк кода.
← →
DillerXX © (2006-07-19 12:30) [35]Делфи рулит :о)
← →
Romkin © (2006-07-19 13:08) [36]Ну что вы недоумеваете? Сравните хотя бы объем описаний языков, и все станет понятно. Ведь компилятор делает все, что написано в стандарте.
← →
Romkin © (2006-07-19 13:15) [37]А если вы уже прочитали описание С++, объясните же мне, что ЭТО за объявление?!
char (*(*x2 ())[]) ()
И сколько правил применяет компилятор при трансляции его вызовов?
← →
Nic © (2006-07-19 13:19) [38]
> char (*(*x2 ())[]) ()
Ужас. Какие-то палочки/закорючки; машинные коды и то понятнее. Китайские иероглифы отдыхают :)
← →
Nic © (2006-07-19 13:20) [39]
> char (*(*x2 ())[]) ()
А ещё, напоминает набор смайлов :)
← →
Romkin © (2006-07-19 13:21) [40]Nic © (19.07.06 13:19) [38] По некоторым данным, это функция, принимающая на вход массив функций и возвращающая char. Но не уверен :)
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.053 c