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

Вниз

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

 
Romkin ©   (2006-07-19 13:21) [40]

Nic ©   (19.07.06 13:19) [38] По некоторым данным, это функция, принимающая на вход массив функций и возвращающая char. Но не уверен :)


 
Verg ©   (2006-07-19 13:45) [41]

char (*(*x2 ())[]) ()

Это функция не принимающая параметров, возвращающая массив функций, каждая из которых не принимает параметров, а возвращает char.
Угадал ?:))


 
Romkin ©   (2006-07-19 13:49) [42]

Verg ©   (19.07.06 13:45) [41] Э. Тогда уж массив фукнций :)))


 
Verg ©   (2006-07-19 14:02) [43]


> Romkin ©   (19.07.06 13:49) [42]


Нет, именно ф-ция (одна).
Только там обманчик есть. Так как массив в сях функциям возвращать запрещено, то формально она возвращает указатель на массив. Что суть есть одно и то же. Можно было бы [] убрать и не морочить голову.


 
DevilDevil ©   (2006-07-19 14:10) [44]

Если выбирать при одинаковой [допустим] скорости C++ или Pascal, что вы выбирете? Несмотря на кучу недостатков С++, некоторых достоинств Паскаля, я бы выбрал С++. Ну есть там удобные фичи. Иными словами, мы [ну я и некоторые другие] выбираем Delphi больше из-за скорости компиляции. Так я к чему... Давайте подождём ещё пару десятков лет, когда скорость компьютеров будет стремиться к бесконечности, когда разница компиляции будет незаметна :). Всё равно не использовать мощный язык только из-за скорости компиляции - не есть прогресс!

P.S. Но я за объединение языков. Терпеть не могу #include политику, лучше uses. Отсутствие with раздражает. BuildWithRunTime... - УРОДСТВО


 
Nic ©   (2006-07-19 14:26) [45]

Просто области применения Delphi и MSVC++ разная, хотя кое-где и пересекаются.


 
Bless ©   (2006-07-19 15:02) [46]

мой вариант:

x2 - функция, возвращаются указатель на указатель на массив указателей на функции, возвращающие char

или иначе

x2 - функция, возвращаются массив указателей на массив указателей на функции, возвращающие char

или еще чуток расплывшись мыслею по древу

x2 - функция, возвращаются двумерный массив указателей на функции, возвращающие char

Я C++ почти не знаю, пусть сишники поправят :)


 
Verg ©   (2006-07-19 15:33) [47]


> Bless ©   (19.07.06 15:02) [46]


Было бы

char (*(*x2 ())[например,10]) ()

, мог бы быть двумерный


 
Romkin ©   (2006-07-19 15:47) [48]

Уточнил. Это действительно объявление функции x2 без параметров, которая возвращает указатель на массив указателей на функции без параметров, каждая из которых возвращает char :)))
ЫЫЫ!


 
Bless ©   (2006-07-19 16:22) [49]


> Verg ©   (19.07.06 15:33) [47]
>
> Было бы
> char (*(*x2 ())[например,10]) ()
> , мог бы быть двумерный


Дык,указатель на массив тоже можно рассматривать как двумерный массив (при желании), что я и сделал.
Так что последняя трактовка из [46] - правильная, что подтверждается в [48].

Хотя справедливости ради надо отметить, что эта правильная третья трактовка получилась из неправильной второй (я ошибся, расшифровывая эту мантру, в результате чего получилась неправильная первая трактовка, а потом еще раз ошибся, преобразовывая вторую трактовку в третью, что привело к правильному результату) :)


 
Verg ©   (2006-07-19 16:38) [50]


> Дык,указатель на массив тоже можно рассматривать как двумерный
> массив (при желании),


Тебе можно. Да хоть как 100-мерный.
Но, компилятору для этого одного желания мало. Чтобы он смог рассматирвать тот массив как двумерный, ему нужно ту [циферку] все же сообщить :)


 
pasha_golub ©   (2006-07-19 16:57) [51]


> icWasya ©   (19.07.06 11:05) [28]
>
> про специфику http://www.pcmag.ru/archive/9705s/05s979.asp

ОГРОМНОЕ СПАСИБО ЗА СТАТЬЮ! Я оттуда почерпнул идею. И ведь, на самом-то деле, идея проста до безобразия. :0)


 
аноним 3000   (2006-07-19 17:05) [52]


> Интересно было бы послушать про препроцессор в Delphi...

Стоп! компилятору на вход поступает строка в том виде в котором вы ее написали?
со всеми отступами, избыточными пробелами, комментариями,  макросами условной компиляции?

Если это так, то да, в делфи нет препроцессора..


> Правда? D7 на Celeron 600 моментально компилирует весьма
> солидные проекты. Буквально 1-2-3 секунды, даже кофе не
> успеешь заварить :) VC7.1 компилирует даже небольшой проект
> ощутимо.


честно говоря, я за комп с процессором с частотой меньшей чем 2ГГц давно не садился 8-)
но не спорю, делфи работает быстрей..
но тем не менее в 2005-ой мелкомягким удалось значительно ускорить компиляцию..

по поводу
> char (*(*x2 ())[]) ()
имхо, ерунду написали.. это может быть только массивом указателей на функции, но это не так..

Воообще так никто не пишет. Не, конечно, проекты пишутся разными людьми, но если человек хочет чтоб его программа работала, он не будет так писать.
Я думаю, и на паскале можно не меньшую дурь написать..

а если хотите тяжелого кода на С++, посмотрите исходники Loki или Boost.
я думаю, удивления будет гораздо больше:)


 
Bless ©   (2006-07-19 17:39) [53]


> имхо, ерунду написали.. это может быть только массивом указателей
> на функции, но это не так..

Гм...
MinGW скушал следующее определение
char (*(*x2 ())[]) (){};

Так что это все-таки функция.


 
Rouse_ ©   (2006-07-19 18:07) [54]

Ну #define еще никто не отменял - так что так прямо сказать функция это или нет без полного листинга нельзя :)


 
Romkin ©   (2006-07-19 18:17) [55]

Rouse_ ©   (19.07.06 18:07) [54] Да он издевается над нами! (с)


 
Verg ©   (2006-07-19 18:24) [56]


> аноним 3000   (19.07.06 17:05) [52]


> имхо, ерунду написали.. это может быть только массивом указателей
> на функции, но это не так..


а как?

"Истина где-то рядом"? (С) :))))


> Воообще так никто не пишет. Не, конечно, проекты пишутся
> разными людьми, но если человек хочет чтоб его программа
> работала, он не будет так писать.
> Я думаю, и на паскале можно не меньшую дурь написать..


Попробуй.
Думаешь Н.Вирт от нече делать Pascal разрабатывал?


> а если хотите тяжелого кода на С++, посмотрите исходники
> Loki или Boost.
> я думаю, удивления будет гораздо больше:)


УЖЕ страшшно удивительно :))


 
Verg ©   (2006-07-19 18:32) [57]


> Гм...
> MinGW скушал следующее определение
> char (*(*x2 ())[]) (){};


А где же варнинг? Типа "функция обязана возвращать результат".


 
Lamer@fools.ua ©   (2006-07-19 18:46) [58]

>Типа "функция обязана возвращать результат".

Командир роты — обязян ©
:o)


 
spotter   (2006-07-19 18:51) [59]

Должно быть так:

typedef char (*(*x2 ())[]) ();


 
MeF Dei Corvi ©   (2006-07-19 19:03) [60]


> Попробуй.

Дурь написать можно везде ;)
Например:

if (a(.i] > Byte(^a)) or (a[i.) < a[i + 1]) then
(
 if (str1 = #10#13) and (str1 > str2) then
   str1 := ^(^П^Р^Е^В^Е^Д#32"МИР"^!^)
);

:)


 
MeF Dei Corvi ©   (2006-07-19 19:06) [61]

Кстати, компилятор C# работает довольно быстро ;)


 
cyborg ©   (2006-07-19 19:12) [62]

> [60] MeF Dei Corvi ©   (19.07.06 19:03)

Это не скомпилируется, даже если убрать опечатки.


 
MeF Dei Corvi ©   (2006-07-19 19:14) [63]


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

На D7 вот это:
program Project1;

var a: Array[1..100] of Integer;
   str1: String;
   str2: String;
   i: Byte;

begin
 if (a(.i] > Byte(^a)) or (a[i.) < a[i + 1]) then
(
if (str1 = #10#13) and (str1 > str2) then
  str1 := ^(^П^Р^Е^В^Е^Д#32"МИР"^!^)
);
end.

успешно компилиться и даже выполняется ;)


 
Verg ©   (2006-07-19 19:17) [64]


> MeF Dei Corvi ©   (19.07.06 19:06) [61]
> Кстати, компилятор C# работает довольно быстро ;)


Компилятор PHP еще быстрее.


 
cyborg ©   (2006-07-19 19:18) [65]

Ничего себе, на шестёрке тоже компилируется :)


 
cyborg ©   (2006-07-19 19:21) [66]

Что зы бред, почему оно компилируется?


 
Verg ©   (2006-07-19 19:23) [67]


> MeF Dei Corvi ©   (19.07.06 19:14) [63]


Знатный прикол.


 
cyborg ©   (2006-07-19 19:25) [68]

Я догадался, что (. равноценна [, но вот это str1 := ^(^П^Р^Е^В^Е^Д#32"МИР"^!^) первый раз вижу.


 
аноним 3000   (2006-07-19 19:44) [69]

пардон, ща проверил в студии

> char (*(*x2 ())[]) ()

это кушается...
скорее всего это определение указателя на функцию без параметров, которая возвращает указатель (=массив) на указатель на функцию типа char (*f) ();

я пытался разбить на typedefы
совершенно точно это эквивалентно

typedef char (*F1)();
F1 (*х2())[];


вот


 
Piter ©   (2006-07-19 19:45) [70]

Verg ©   (19.07.06 19:17) [64]
Компилятор PHP еще быстрее


а разве PHP - это компилятор? :)


 
Verg ©   (2006-07-19 19:51) [71]


> аноним 3000   (19.07.06 19:44) [69]


Для начала очень неплохо.


 
homm ©   (2006-07-19 21:50) [72]

> ОГРОМНОЕ СПАСИБО ЗА СТАТЬЮ! Я оттуда почерпнул идею. И ведь,
> на самом-то деле, идея проста до безобразия. :0)

Хмм.. Еще один интузиаст взялся за написание компилятора? :)


 
Verg ©   (2006-07-19 21:56) [73]


> homm ©   (19.07.06 21:50) [72]


Слава Богу, этого никогда не переведется... наверно, ХОТЕЛОЬСБЫ ;)


 
Bless ©   (2006-07-20 09:29) [74]


> Verg ©   (19.07.06 18:32) [57]
> > Гм...
> > MinGW скушал следующее определение
> > char (*(*x2 ())[]) (){};
> А где же варнинг? Типа "функция обязана возвращать результат".


Я не в курсе дела, чукча пока только читатель c++, а не писатель:)
Варнинга не было. Но где-то в нете мне на глаза попадалось что-то по этом поводу. Кажись в какой-то статье со стонами по поводу низкого качества исходников, пришедших из Linux. Вроде как по умолчанию в gcc выключен вывод всех предупреждений. В смысле, выводятся не все, а только некоторые. Чтоб это отключить надо явно указать какой-то параметр компилятору в командной строке.
Может, поэтому?


 
Verg ©   (2006-07-20 09:34) [75]

-Wall


 
Bless ©   (2006-07-20 09:55) [76]


> Verg ©   (20.07.06 09:34) [75]
> -Wall
>


main.cpp:2: warning: control reaches end of non-void function


 
Verg ©   (2006-07-20 10:00) [77]


> Bless ©   (20.07.06 09:55) [76]
>
> > Verg ©   (20.07.06 09:34) [75]
> > -Wall
> >
>
>
> main.cpp:2: warning: control reaches end of non-void function


Да, это так gcc ругается.



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

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

Наверх




Память: 0.6 MB
Время: 0.051 c
3-1149603740
VALUA
2006-06-06 18:22
2006.08.13
QuickRep1 - Изменить программно ориентацию страницы


3-1149758205
Тфьу
2006-06-08 13:16
2006.08.13
Проблеммы получения данных из параметра процедуры CLOB из DOA...


15-1149183547
tesseract
2006-06-01 21:39
2006.08.13
футболка DelphiMaster


2-1153744558
UMU
2006-07-24 16:35
2006.08.13
Значение "Edit.Text" в отчете "FastReports"


3-1149842955
ANB
2006-06-09 12:49
2006.08.13
Как сделать одним оператором (oracle) ?





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