
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Страницы: (245) « Первая ... 230 231 [232] 233 234 ... 244 245 ( Перейти к последнему сообщению ) |
Сообщ.
#3466
,
|
|
|
Цитата jack128 @ странно, что столь эпичный пост прошел мимо топика: http://kazav.blogspot.ru/2014/01/delphi-2.html Потому что я читаю только delphifeeds.ru. Цензура, однако. |
Сообщ.
#3467
,
|
|
|
Так кто мне объяснит что именно не так с кодогенерацией?
![]() |
![]() |
Сообщ.
#3468
,
|
|
Ну я не знаю как объяснить. Один и тот же дельфиский код на разных версиях компилятора генерит разный машинный код. Причем чем новее версия компилятора - тех хуже выходной результат.
|
Сообщ.
#3469
,
|
|
|
Цитата jack128 @ Причем чем новее версия компилятора - тех хуже выходной результат. Так вот я и не понимаю в чём он хуже... Вот в первой части - там просто заинлайнилась функция, почему это плохо? |
![]() |
Сообщ.
#3470
,
|
|
Цитата MyNameIsIgor @ Так вот я и не понимаю в чём он хуже... Вот в первой части - там просто заинлайнилась функция, почему это плохо? Не знаю, что ты имеешь в виду под первой частью, но по ссылке видно, что результирующий асмо-код в XE5 раз в 10 превышает по количеству операций результат компиляции в Delphi 2006. Или я что-то не догоняю? |
![]() |
Сообщ.
#3471
,
|
|
В 10?
![]() ![]() program inline_bug; {$APPTYPE CONSOLE} {$OPTIMIZATION ON} {$INLINE ON} {$R *.res} uses SysUtils; Type Utils = Class Type Namespace = Class Class Function CompareString(Const ALeft, ARight : String) : Integer; Static; Inline; Class Function CompareText(Const ALeft, ARight : String) : Integer; Static; Inline; Class Function SameString(Const ALeft, ARight : String; ACaseSensitive : Boolean = True) : Boolean; Static; Inline; End; End; { Utils.NameSpace } // Class Function Utils.Namespace.CompareString(const ALeft, ARight : System.String) : Integer; Begin Result := SysUtils.CompareStr(ALeft, ARight); End; // // Class Function Utils.Namespace.CompareText(Const ALeft, ARight : String) : Integer; Begin Result := SysUtils.CompareText(ALeft, ARight); End; // // Class Function Utils.Namespace.SameString(Const ALeft, ARight : String; ACaseSensitive : Boolean) : Boolean; begin If ACaseSensitive Then Result := Utils.Namespace.CompareString(ALeft, ARight) = 0 Else Result := Utils.Namespace.CompareText(ALeft, Aright) = 0; End; // Var s1, s2 : String; begin Utils.Namespace.CompareString(S1, S2); Utils.Namespace.SameString(S1, S2); s1 := ''; end. ![]() ![]() inline_bug.dpr.68: Utils.Namespace.CompareString(S1, S2); 0040915A 8B1524E24000 mov edx,[$0040e224] 00409160 A120E24000 mov eax,[$0040e220] 00409165 E8F2C7FFFF call CompareStr inline_bug.dpr.69: Utils.Namespace.SameString(S1, S2); 0040916A 8B1524E24000 mov edx,[$0040e224] 00409170 A120E24000 mov eax,[$0040e220] 00409175 E8E2C7FFFF call CompareStr 0040917A 85C0 test eax,eax 0040917C 0F94C0 setz al ![]() ![]() inline_bug.dpr.68: Utils.Namespace.CompareString(S1, S2); 0041B3F4 8D45EC lea eax,[ebp-$14] 0041B3F7 8B15BC2E4200 mov edx,[$00422ebc] 0041B3FD E85EACFEFF call @UStrLAsg 0041B402 8D45E8 lea eax,[ebp-$18] 0041B405 8B15C02E4200 mov edx,[$00422ec0] 0041B40B E850ACFEFF call @UStrLAsg 0041B410 33C0 xor eax,eax 0041B412 55 push ebp 0041B413 684AB44100 push $0041b44a 0041B418 64FF30 push dword ptr fs:[eax] 0041B41B 648920 mov fs:[eax],esp 0041B41E 8B55E8 mov edx,[ebp-$18] 0041B421 8B45EC mov eax,[ebp-$14] 0041B424 E8DB79FFFF call CompareStr 0041B429 8945CC mov [ebp-$34],eax 0041B42C 33C0 xor eax,eax 0041B42E 5A pop edx 0041B42F 59 pop ecx 0041B430 59 pop ecx 0041B431 648910 mov fs:[eax],edx 0041B434 6851B44100 push $0041b451 0041B439 8D45EC lea eax,[ebp-$14] 0041B43C E803A9FEFF call @UStrClr 0041B441 8D45E8 lea eax,[ebp-$18] 0041B444 E8FBA8FEFF call @UStrClr 0041B449 C3 ret 0041B44A E901A0FEFF jmp @HandleFinally 0041B44F EBE8 jmp $0041b439 inline_bug.dpr.69: Utils.Namespace.SameString(S1, S2); 0041B451 8D45E4 lea eax,[ebp-$1c] 0041B454 8B15BC2E4200 mov edx,[$00422ebc] 0041B45A E801ACFEFF call @UStrLAsg 0041B45F 8D45E0 lea eax,[ebp-$20] 0041B462 8B15C02E4200 mov edx,[$00422ec0] 0041B468 E8F3ABFEFF call @UStrLAsg 0041B46D 8D45DC lea eax,[ebp-$24] 0041B470 E8CFA8FEFF call @UStrClr 0041B475 8D45D8 lea eax,[ebp-$28] 0041B478 E8C7A8FEFF call @UStrClr 0041B47D 8D45D4 lea eax,[ebp-$2c] 0041B480 E8BFA8FEFF call @UStrClr 0041B485 8D45D0 lea eax,[ebp-$30] 0041B488 E8B7A8FEFF call @UStrClr 0041B48D 33C0 xor eax,eax 0041B48F 55 push ebp 0041B490 6838B54100 push $0041b538 0041B495 64FF30 push dword ptr fs:[eax] 0041B498 648920 mov fs:[eax],esp 0041B49B 8D45DC lea eax,[ebp-$24] 0041B49E 8B55E4 mov edx,[ebp-$1c] 0041B4A1 E8BAABFEFF call @UStrLAsg 0041B4A6 8D45D8 lea eax,[ebp-$28] 0041B4A9 8B55E0 mov edx,[ebp-$20] 0041B4AC E8AFABFEFF call @UStrLAsg 0041B4B1 33C0 xor eax,eax 0041B4B3 55 push ebp 0041B4B4 68EBB44100 push $0041b4eb 0041B4B9 64FF30 push dword ptr fs:[eax] 0041B4BC 648920 mov fs:[eax],esp 0041B4BF 8B55D8 mov edx,[ebp-$28] 0041B4C2 8B45DC mov eax,[ebp-$24] 0041B4C5 E83A79FFFF call CompareStr 0041B4CA 8945C4 mov [ebp-$3c],eax 0041B4CD 33C0 xor eax,eax 0041B4CF 5A pop edx 0041B4D0 59 pop ecx 0041B4D1 59 pop ecx 0041B4D2 648910 mov fs:[eax],edx 0041B4D5 68F2B44100 push $0041b4f2 0041B4DA 8D45DC lea eax,[ebp-$24] 0041B4DD E862A8FEFF call @UStrClr 0041B4E2 8D45D8 lea eax,[ebp-$28] 0041B4E5 E85AA8FEFF call @UStrClr 0041B4EA C3 ret 0041B4EB E9609FFEFF jmp @HandleFinally 0041B4F0 EBE8 jmp $0041b4da 0041B4F2 837DC400 cmp dword ptr [ebp-$3c],$00 0041B4F6 0F9445CB setz byte ptr [ebp-$35] 0041B4FA 33C0 xor eax,eax 0041B4FC 5A pop edx 0041B4FD 59 pop ecx 0041B4FE 59 pop ecx 0041B4FF 648910 mov fs:[eax],edx 0041B502 683FB54100 push $0041b53f 0041B507 8D45E4 lea eax,[ebp-$1c] 0041B50A E835A8FEFF call @UStrClr 0041B50F 8D45E0 lea eax,[ebp-$20] 0041B512 E82DA8FEFF call @UStrClr 0041B517 8D45DC lea eax,[ebp-$24] 0041B51A E825A8FEFF call @UStrClr 0041B51F 8D45D8 lea eax,[ebp-$28] 0041B522 E81DA8FEFF call @UStrClr 0041B527 8D45D4 lea eax,[ebp-$2c] 0041B52A E815A8FEFF call @UStrClr 0041B52F 8D45D0 lea eax,[ebp-$30] 0041B532 E80DA8FEFF call @UStrClr 0041B537 C3 ret 0041B538 E9139FFEFF jmp @HandleFinally 0041B53D EBC8 jmp $0041b507 Добавлено Кто там сравнивал Дельфи с Джавой? |
Сообщ.
#3472
,
|
|
|
Цитата Сева, я хочу, чтобы ты донёс до людей, что "проблема подключения" - не проблема Delphi, а проблема драйверов Windows. Тот, кто сталкивается с этим в Delphi, винит в первую очередь Delphi, также как, например, в своё время винил я. Но нужно донести до общественности, что эта проблема встречается У ВСЕХ систем разработки, а не конкретно у Delphi. Так что такая ситуация с андроидными устройствами - НОРМА. И не надо расстраиваться, просто надо понимать ситуацию, и знать, куда копать. А копать-то на самом деле особо глубоко - и не нужно. Просто "Диспетчер Устройств", просто "Драйвер". http://blogs.embarcadero.com/vsevolodleonov/2014/02/07/zoo/ Рыдал. А разве Дельфи не виновата в том, что на ней нельзя вести разработку там, где проблем с дровами нету (под Маком и Линуксом)? |
Сообщ.
#3473
,
|
|
|
Qraizer, а ничего что строки после 2009 версии стали юникодными! Просто таим идет куча проверок, мало ли введена ansi или utf8 строка, все это конвертируется, плюс добавлены try finally|exception что-бы программа не упала, если строка кривая. Глупое сравнение короче. На С++ покажи лаконичный асм код, где идет конвертация ansi->utf8->unicode и сравнение.
Правильней ИМХО будет сравнивать код с числами и циклами. |
Сообщ.
#3474
,
|
|
|
Цитата Dik0n @ На С++ покажи лаконичный асм код, где идет конвертация ansi->utf8->unicode и сравнение. А где в приведеном выше коде есть конвертация ansi->utf8->unicode ? Добавлено Цитата Dik0n @ Глупое сравнение короче Чем глупое? Тут сравнивают выхлопной асм код одного и того же кода на разных версиях делфи. Тут нет сравнения асм кода генеренного в делфи с асм кодом генерированным в С/С++. Так что отнюдь ![]() |
![]() |
Сообщ.
#3475
,
|
|
Dik0n, тут элементарное отсутствие встраивания, как следствие создание кучи копий исходных строк, передающихся по значению, отсюда неявные finally, которые зачищают костыли ссылочной её мать семантики строк, которые якобы значения.
|
Сообщ.
#3476
,
|
|
|
Ну с юникодными строками они возможно намудрили, так как долго добавить не могли, и добавили как есть, без оптимизации, лишь бы отстали. Но это не компилятор хуже стал код выдавать, а просто проверок тонну добавили в системные модули, и это как бы касается именно строк. Говорю код с числами, указателями, должен быть примерно одинаков.
Ну, как бы спор начинать я не хотел, все равно, сейчас никто не считает тики процессора и сколько потребляется оперативки, как говорится - <удалено>, <удалено> и в продакшн ![]() |
Сообщ.
#3477
,
|
|
|
Цитата Dik0n @ Ну и как бы спор начинать я не хотел, все равно, сейчас никто не считает тики процессора и сколько потребляется оперативки, как говорится - <удалено>, <удалено> и в продакшн Считают. И лично у меня порой складывается впечатление, что с 2000ных ничего не изменилось. Что в 2003 у меня был комп тупило все из за нехватки проца и оперативы, что сейчас у меня уже другой комп и все аналогично. ПО пишут безалаберно, никто не задумывается о тиках проца и о количестве рамы, и на выходе получается говноподелие, которое жрет памяти и проца столько, что это просто научно необъяснимо. |
Сообщ.
#3478
,
|
|
|
Ну для обычных программ я не считаю. А вот для игр, которые кстате пишут на С++, успевай только компы менять. Вроде и графика не сильно улучшается, а что не новая игра, так чуть ли не каждый раз за новой видеокартой приходится бежать, когда как для консолей теже игры идут нормально, хотя железо там, грубо говоря 8 летней давности (ну это я про старое поколение).
|
Сообщ.
#3479
,
|
|
|
Цитата Dik0n @ А вот для игр, которые кстате пишут на С++, успевай только компы менять Так не на одном С++ пишут. Да и причем тут игры? Туда всетаки железу еще рости и рости. И тупят они там не от того что плохо написаны(хотя и такие попадаются), а от того что сложные модели + очень много информации приходится обрабатывать и хранить. Я тебе говорю за обычные программы. Какая нибудь перделка для смены обоев рабочего стола, может и не будет тупить, а более менее приличная - уже начинает жрать памяти как депутат бабло из бюджета. Но делфи это наверное не касается, на ней уж поди и не пишут ничего серьезного. |
Сообщ.
#3480
,
|
|
|
Меня больше прикалывает - писал программист программы на Delphi. Ктото сказал, все не актуально изжил он себя, пойдем на .NET. Прогер накопил опять кучу кода, изучил кучу библиотек и опять, можен на Java свалим ? В итоге изучил кучу яп, а кроме как писать код для баз данных, на куче языков, нифига и не познал
![]() |