Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.55 MB
Время: 0.039 c
1-1151650514
Footballer
2006-06-30 10:55
2006.08.13
Перетаскивание строк в Listbox


6-1143618622
MegaVolt
2006-03-29 11:50
2006.08.13
Как тестировать сетевое приложение?


15-1152907772
Nic
2006-07-15 00:09
2006.08.13
Жара


6-1143450349
_Владимир_
2006-03-27 13:05
2006.08.13
Загруженность сетевого интерфейса


15-1153197800
Ega23
2006-07-18 08:43
2006.08.13
С Днём рождения! 18 июля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский