Форум: "Потрепаться";
Текущий архив: 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.47 MB
Время: 0.006 c