пятница, мая 10, 2013

Delphi. Ненависть.

Код (вызов представляющий собой каскад двух inlined методов):

xv.Initialize(bin.Instance);


Turbo Delphi 2006 Explorer генерирует:



XmlRpcDeserializerTest.pas.2634: xv.Initialize(bin.instance);
00526489 8D9524FFFEFF lea edx,[ebp-$000100dc]
0052648F 8D45E8 lea eax,[ebp-$18]
00526492 E88DA8FAFF call XmlRpcBinary.GetInstance
00526497 8B8524FFFEFF mov eax,[ebp-$000100dc]
0052649D 8945B0 mov [ebp-$50],eax
005264A0 A154784C00 mov eax,[$004c7854]
005264A5 50 push eax
005264A6 8D8558FFFFFF lea eax,[ebp-$000000a8]
005264AC B107 mov cl,$07
005264AE 8B55B0 mov edx,[ebp-$50]
005264B1 E89E37FAFF call XmlRpcValue.SetValueIntf


Delphi XE2 - XE4 генерирует:



XmlRpcDeserializerTest.pas.2634: xv.Initialize(bin.instance);
006C9E77 8D955CFFFEFF lea edx,[ebp-$000100a4]
006C9E7D 8D85C4FFFEFF lea eax,[ebp-$0001003c]
006C9E83 E8683DF6FF call XmlRpcBinary.GetInstance
006C9E88 8B9D5CFFFEFF mov ebx,[ebp-$000100a4]
006C9E8E 8D85E4FFFEFF lea eax,[ebp-$0001001c]
006C9E94 E8973FD4FF call @IntfClear
006C9E99 33C0 xor eax,eax
006C9E9B 55 push ebp
006C9E9C 684D9F6C00 push $006c9f4d
006C9EA1 64FF30 push dword ptr fs:[eax]
006C9EA4 648920 mov fs:[eax],esp
006C9EA7 8D85E4FFFEFF lea eax,[ebp-$0001001c]
006C9EAD E87E3FD4FF call @IntfClear
006C9EB2 33C0 xor eax,eax
006C9EB4 55 push ebp
006C9EB5 682D9F6C00 push $006c9f2d
006C9EBA 64FF30 push dword ptr fs:[eax]
006C9EBD 648920 mov fs:[eax],esp
006C9EC0 8D85E4FFFEFF lea eax,[ebp-$0001001c]
006C9EC6 8BD3 mov edx,ebx
006C9EC8 E87B3FD4FF call @IntfCopy
006C9ECD 33C0 xor eax,eax
006C9ECF 55 push ebp
006C9ED0 680D9F6C00 push $006c9f0d
006C9ED5 64FF30 push dword ptr fs:[eax]
006C9ED8 648920 mov fs:[eax],esp
006C9EDB A10C3B6200 mov eax,[$00623b0c]
006C9EE0 50 push eax
006C9EE1 8D85A0FFFEFF lea eax,[ebp-$00010060]
006C9EE7 B107 mov cl,$07
006C9EE9 8B95E4FFFEFF mov edx,[ebp-$0001001c]
006C9EEF E898C7F5FF call XmlRpcValue.SetValueIntf


Это п#$%&ц. Зарепортить не могу т.к. воспроизвести на другом коде не получается. Но подобное есть еще в паре мест, и тоже с разворачиванием inlined методов.

четверг, мая 02, 2013

Delphi XE4. Чем дальше, тем страшнее.

Кажется, у Embarcadero уже вошло в привычку выпускать сырые бета-версии и называть их релизами. Чтож, они испекли еще один. Судя по всему, делался он в дикой спешке – иначе объяснить настолько отвратительное качество просто нечем.

 

Firemonkey. Одно лечим, другое калечим.

В обезьяне произошли некоторые приятные изменения – анимация стала работать заметно лучше – и дело тут не в увеличенном вдвое фреймрейте - спасибо разделяемому RTTI-кэшу. Однако, для отсчетов временных интервалов по прежнему используется тип с малой точностью, поэтому на системах с большим аптаймом снова будут рывки.

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

Формы FMX разучились сворачиваться в панель задач – клик по кнопке в панели ни к чему не приводит. Сворачивать можно только кнопкой в заголовке окна, но при этом форма сворачивается не в панель задачь, а в левый нижний угол над панелью.

В дизайнере не меняется шрифт у TText и TLabel. То есть изменение размера действует, а вот изменение названия нет.

Поправили TPath, теперь он справляется с довольно сложными контурами. Однако, TPath.WrapMode = pwFit работает некорректно. Сглаживание контуров под XP так и не сделали (она хоть и старушка, но все же третья по популярности ОС). Кстати, со сглаживанием вообще странность. В редакторе свойства TPath.Data контур оказывается сглаженным:

data_editor_normal

но стоит изменить размер окна, как сглаживание исчезает:

data_editor_resized

Поломали TreeView. Если у дерева вызвать метод TreeView.ExpandAll список узлов превращается в кашу (слева пример собранный в XE3, справа в XE4):

expanded_treeviews

Плюс еще множество мелких косяков, вроде визуальных артефактов, которые просто лень документировать. По общим ощущениям FMX становится все более неюзабельной. Небольшие улучшения ни коим образом не влияют на картину вцелом.