Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Вниз

Почему у Delphi скорость компиляции выше?   Найти похожие ветки 

 
kull   (2002-07-02 23:37) [0]

Прошу прощения за глупый вопрос.
Но все таки интересно почему скорость компиляции у Delphi выше чем у C++ компиляторов.
Причем не только VC++, но и C++Builder-а.
Ведь, насколько я понимаю, Builder и Delphi имеют одинаковый "движок" как продукты одной фирмы. Почему же так сильно отличается скорость компиляции?


 
RV   (2002-07-02 23:39) [1]

на Королевстве Дельфи есть эта тема, поищи
там и про другие компиляторы есть


 
iZEN   (2002-07-02 23:48) [2]

Delphi -- однопроходной компилятор без макросов и шаблонов.

В C++ есть препроцессор, который обрабатывает макросы и шаблоны, строя код во время компиляции, получается вроде такого пути: "интерпретация->генерация_нового_кода_по_макросам_и_шаблонам->компиляция".

Java-компилятор тоже однопроходной, ситуация для него аналогична Delphi-компилятору, поэтому сборка похожего проекта, допустим в JBuilder-е, занимает почти столько же времени, что и в Delphi. :)

Вот.


 
kull   (2002-07-02 23:54) [3]

Вот я предполагал что дело в макросах и шаблонах. А может еще и потому, что Object Pascal более строгий язык чем C++?


 
[NIKEL]   (2002-07-03 00:06) [4]

В С++ предусмотрено использование заголовочных (включаемых) файлов , а в Object Pascal - нет. Они также могут быть вложенными. Простая программа из 35 строк может в итоге содержать десятки и сотни тысяч строк из-за вложенности - на это тоже тратиться много времени

В С++ используются МАКРОСЫ, а в Object Pascal - нет, - препроцессор должен разобрать макрос и вставить его там где надо

В С++ применяются ШАБЛОНЫ, а в Object Pascal - нет, а шаблон достаточно сложная для разбора структура

Семантика С++ должна удовлетворять стандарту ANSI. Причем "грамматика" С++ много сложнее "грамматики" Delphi, которая основана на Pascal

С++ позволяет использовать более гибкие приемы программирования, чем Object Pascal, но такая гибкость достигаеться за счет увеличения времени компиляции


 
Виктор Щербаков   (2002-07-03 09:44) [5]

kull © (02.07.02 23:54)
Они оба строгие, иначе компилятор нельзя будет написать.
А вот грамматика в С++ действительно посложнее.
К примеру в паскале
procedure SomeProc;
после первой лексемы компилятор понимает, что это объявление процедуры.
В си
int *Somefunc()
После первой лексемы ни хрена не понятно, что же это за объявление. После второй и третьей тоже. И только после скобки измученный компилятор понимает что программист хотел объявить функцию, а не переменную.

Схема конечно упрощенная, но общее представление позволяет получить.


 
kull   (2002-07-03 10:39) [6]


> Они оба строгие, иначе компилятор нельзя будет написать.

Может я не прав, но в C++ можно такое преобразование (например типов) завернуть, на которое Pascal скажет incompatible types...


 
limon   (2002-07-03 10:47) [7]

> kull
для наглядности ответа, установи параметр в IDE - отображать процесс компиляции. так вот этот прогрессбар, кроме всего прочего, показывает количество обработанных строк.
на програмулину из 10 строк в делфе - около 30-40. в билдере - >100000


 
Виктор Щербаков   (2002-07-03 10:48) [8]

kull © (03.07.02 10:39)
Ну и что. Всё равно в С++, правила преобразований типов выполняемых по умолчанию - описаны, и они строгие. Это всё есть у Страуструпа. Различие лишь в том, что в Паскале эти правила другие.

Ты наверно имел ввиду строгость по отношению к программисту, а не строгость самого языка.


 
kull   (2002-07-03 11:37) [9]


> Виктор Щербаков © (03.07.02 10:48)

Ну да, я это и имел в виду.

Но ведь чем строже тем меньше степеней свободы, следовательно меньше количество обрабатываемых ситуаций. И наоборот
(как у C++).

Я в этом смысле говорил о строгости.


 
Shaman_Naydak   (2002-07-03 13:40) [10]

Корни всего этого, робятки, уходят в осознание простого факта, что Delphi - язык модульный, а C/C++ нет..
Потому и получается, см limon © (03.07.02 10:47)
А то, что синтаксис сложнее, да и сам язык позамороченнее - тьфу и растереть для нынешних процов...
вот 2-х проходная обработка, конечно, дает о себе знать
(хотя ничто не мешает все равно реализовать компиляцию за один проход :) )
Но все равно, роли это не играет.. играет только то, что для компиляции надо обработать 40 строк или 40 тысяч :(


> kull © (03.07.02 10:39)
>
> Может я не прав, но в C++ можно такое преобразование (например
> типов) завернуть, на которое Pascal скажет incompatible
> types...

Не прав, однако, ой не прав. И тот и другой язык следит за типами (Я говорю о С++ и Дельфи), но обоих можно дурить как хочешь, если оно тебе конечно надо

Первый раз все таки не удержался и ввязался в откровенно флеймовые разговоры о С и Паскале!!! ЗЗЫ :)
Больше не буду


 
kull   (2002-07-03 14:00) [11]


> но обоих можно дурить как хочешь, если оно тебе конечно
> надо

Дурить то кого хочешь можно, но С++ обдурить легче чем Pascal.




> Корни всего этого, робятки, уходят в осознание простого
> факта, что Delphi - язык модульный, а C/C++ нет..
> Потому и получается, см limon © (03.07.02 10:47)

,

> для наглядности ответа, установи параметр в IDE - отображать
> процесс компиляции. так вот этот прогрессбар, кроме всего
> прочего, показывает количество обработанных строк.
> на програмулину из 10 строк в делфе - около 30-40. в билдере
> - >100000


Ну и что?
Галочка Show compiler progress у меня всегда включена.

В Delphi такое же количество строк (например 100000) обрабатывается быстрее.
Ну... И причем тут модульность?



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.027 c
3-95184
Prog_mail
2002-07-05 10:34
2002.07.29
Помогите! Как сохранить изменения в Query?


1-95350
Still Swamp
2002-07-17 21:03
2002.07.29
MSExcel


3-95207
Octav
2002-07-05 16:39
2002.07.29
Blob + XML


14-95490
ION T
2002-07-01 02:03
2002.07.29
Регулярные выражения


1-95432
Гас
2002-07-16 10:01
2002.07.29
Работа с DLL. Метод Assign не хочет выполняться.. :(





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский