Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Почему компилятор Делфи так быстро работает?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.029 c
6-1139988013
maep
2006-02-15 10:20
2006.08.13
SOAP, вызов метода веб сервиса


15-1152881314
oldman
2006-07-14 16:48
2006.08.13
Задачка для начинающих...


11-1130349488
Vladimir Kladov
2005-10-26 21:58
2006.08.13
Версия 2.19


15-1152875507
default
2006-07-14 15:11
2006.08.13
Любителям задач про взвешивание монет


15-1153122943
ChainikDenis
2006-07-17 11:55
2006.08.13
Программирование под линух...