Náhodné výkřiky 10

vložil Radek Červinka 4. srpna 2011 00:41

Opět pár poznámek ohledně toho co mne praštilo do očí. A hlavně pár veřejných informací o FireMonkey.

FireMonkey logo

Začnu velmi prima chybou:

if 3 > 5 then;
begin
  ShowMessage('3 větší než 5!!');
end;

Když jsem podobný kód napsal poprvé, tak mi trvalo pár minut než jsem přišel na to, kde je chyba. No jen se pobavte. (Další mojí oblíbenou chybou je while not ds.Eof do … bez ds.Next).

Mnohem zajímavější ale je co napsal Andreas Hausladen o resource stringu. Upozorňuje na to, že pokud používáte resource string v často volaném kódu tak je to problém, jelikož při každém jeho použití je tento řetězec znovu načten z resources. Ačkoliv se použití vyhýbám - toto mne překvapilo. Ale na 100% mu věřím, jelikož pokud je někdo odborníkem na optimalizace, tak je to kromě Eric Grange právě Andreas Hausladen, jehož rozšíření Delphi znatelně v předchozích verzích (tj. <D2010) zrychlují a teď jsou jejich součástí.

Ale zpět k resource stringu: Andy tvrdí, že kompilační dialog pro Delphi 5 - 2007 nevhodně obsahuje resource stringy a díky tomu, že se průběh během kompilace vypisuje často, procesor tráví 10% času nahráváním resource stringu místo kompilace. Opraveno v D2009 nebo v IDEFixPack.

Mimochodem experimentální IDE Fix Pack 4.3 Beta 4 přináší fastdcc.exe, které podle jeho twitteru: dcc32.exe versus fastdcc.exe: 10.51 vs. 3.53 sekund. Hmm, je to bůh.

V konferenci na builder.cz se vyskytnu opravdu výjimečně, ale teď mne tam zaujal dotaz jak klonovat komponentu za běhu. Řešení co jsem našel je podle mne prima:

function CloneComponent(AAncestor: TComponent): TComponent;
var
  XMemoryStream: TMemoryStream;
  XTempName: string;
begin
  Result:=nil;
  if not Assigned(AAncestor) then exit;

  XMemoryStream:=TMemoryStream.Create;
  try
    XTempName:=AAncestor.Name;
    AAncestor.Name:='clone_' + XTempName;
    XMemoryStream.WriteComponent(AAncestor);
    AAncestor.Name:=XTempName;
    XMemoryStream.Position:=0;
    Result:=TComponentClass(AAncestor.ClassType).Create(AAncestor.Owner);
    if AAncestor is TControl
      then TControl(Result).Parent:=TControl(AAncestor).Parent;
    XMemoryStream.ReadComponent(Result);
  finally
    XMemoryStream.Free;
    end;
  end;
end

FireMonkey

Primární framework pro Windows je stále VCL (je rozšířeno o podporu stylů a databinding). FireMonkey je crossplatform framework.

Andreano Lanusse jakožto z EMBT může už nyní psát, takže určitě se na odkazovaný článek podívejte, je tam screenshot. Zkusím papouškovat to co je důležité a co je veřejné, než bude uvolněna NDA.

Možná jsem to minule nezdůraznil - ale jedná se o nativní vektorový framework, plně HW akcelerovaný. Jak píše v komentářích k tomu článku David I - 2D verze se zove FireMonkey HD, 3D verze je FireMonkey 3D. Pravidelní čtenáři delphi.cz mají přesnou představu odkud vítr vane.

Platformy jsou zatím Win32, Win64, Mac OSX. Na prvních dvou je používán Direct2D nebo Direct3D (případně GDI+ pokud není Direct2D dostupné), na Mac OSX OpenGL. Ostatní platformy budou následovat (tj. Linux, mobilní atd.).

Abych předešel dotazům: Není to postavené na QT, je to mnohem modernější.

Pokud Vás zajímá něco konkrétního ohledně XE2 (FireMonkey, x64 …) napište sem do komentářů, já na ně po uvolnění NDA zkusím odpovědět.

Tagy: , , ,

Novinky

Komentáře

4.8.2011 9:37:15 #

JaroB

FireMonkey zřejmě nebude zas tak žhavá novinka, zřejmě to bude mít předchůdce v DxScene díky akvizici s nějakou drsnou HW akcelerací a patrně to bude generovat kódy rovnou na HW GPU. A taky to asi nacůcne technologie PhyzX a jiné podobné třeba Flash...

JaroB

4.8.2011 9:49:03 #

Vladimír klaus

Jen drobnost k té chybě se středníkem - to se mi naštěstí nemůže stát neb už odpradávna používám tento typ zápisu:
if 3>5 then begin

end else begin

end;

Je kratší, přehlednější a "bezpečnější". Tím bezpečnější myslím to, že vždy a vše uzavírám do begin/end, abych se vyhnul tomuto...
if 3>5 then
  a:=5;
else
  a:=6;
  b:=7;

Na druhou stranu chybějící ds.Next mě už taky pěkně vyškolilo - po dlouhé době jsem viděl chybu Out of memory, kdy jsem naplnil Access databázi údaji > 2 GB :-)

ad FireMonkey:
Na jednu stranu jsem nadšený, na druhou moc ne. Představa, že vezmu staré zdrojáky a udělám z toho iPhone aplikaci nehrozí. To chápu :) Pokud budu chtít tedy udělat něco multiplatformního, tak budu muset od začátku používat jiné prostředky s řadou omezení, vše se učit znovu, budovat nové knihovny... Je to zkrátka daň za to, že to poběží všude. OK. Problém ale vidím v tom, jak vysvětlit zákazníkům, že pokud chtějí aplikace pro obě platformy, budou mít na Windows verzi "mnohem" horší, než na jaké jsou ode mě zvyklí. A bude to trvat déle, bude to drahé, plné chyb a problémů vyplývající z principu věci.

Přesto se na to všechno hodně těším, vývoj se skvělým Delphi XE začal být už trochu rutina a nuda. :-)))

A nebo bude lepší pro takové případy přeci jen sáhnout k oddělenému paralelnímu vývoji, i když stále v Delphi?

Vladimír klaus

4.8.2011 9:53:09 #

Radekc

ad JaroB: kdyby to byla tak jak jsi popsal tak by to nebyla žhavá novinka? Ale ono tak dobré nebude (ohledně toho PhysX atd.). Ale jinak na tom co jsi napsal něco bude.

Radekc

4.8.2011 9:54:12 #

JaroB

Já osobně mám s odděleným vývojem nedobré zkušenosti, neb jsem to absolvoval v Delphi 2005/2006 pro Win32 a pro .NET. Musel jsem udržovat dvě verze komponent a některé prostě na .NET nebylo možné z časových důvodů vůbec naportovat. Ale i pokud jsem striktně použil pouze to, co poskytnul Borland, tak i tak zůstaly problémy s podmínkami překladu vzlášť když v projektech bylo více jak tisíc unit.

JaroB

4.8.2011 10:02:04 #

Radekc

>A nebo bude lepší pro takové případy přeci jen sáhnout k oddělenému paralelnímu vývoji, i když stále v Delphi?

Nejlepší bude oddělit UI od implementace, a třeba jen v UI volat metody implementované v samostatných třídách - bude se to lépe testovat z hlediska DUnit a pro jinou platformu jen změníš UI - kód zůstane v podstatě stejný.

>budou mít na Windows verzi "mnohem" horší, než na jaké jsou ode mě zvyklí

Buďto bude Windows verze stále postavená na VCL a použiješ to co jsem napsal, nebo bude postavená na FireMonkey a (může) díky vektorovému přístupu (tj. libovolné měřítko a rotace, případně díky layout) vypadat stejně všude - ale taky nemusí.

Radekc

4.8.2011 10:23:26 #

Vladimír klaus

>budou mít na Windows verzi "mnohem" horší, než na jaké jsou ode mě zvyklí

Mě nešlo (jen) o vzhled, ale spíš o UX. Teď se třeba neobejdu bez gridu od DevEx, pak budu "muset" použít jen ten z Delphi, který nic neumí. To zákazníkům nevysvětlím... A nebo (jak jsem někde četl), DevEx připraví i variantu pro FireMonkey...

>paralelní vývoj

Myslel jsem to trochu jinak - tedy ne dělat stejnou věc 2x, ale jen 2 podobné věci. Jinak řečeno - smířit se s tím, že na Win to bude mít 20 funkcí na Macu 10 a třeba i trošku jinak dělaných. A třeba za rok či dva, až bude celá technologie vyspělejší, to sladit.

Vladimír klaus

4.8.2011 10:44:55 #

JaroB

Tenhle problém v bledě modrém byl i při vývoji v Delphi a tehdá v Kylixu. Skoro 95% bylo shodných, ale problém nastal buď v jinak definovaných předcích (widget x control) nebo jen v odlišnostech v posílání zpráv (o "schválně" jinak pojmenovaných identifikátorech ani nemluvě), kapitola sama o sobě byla magie s uses sekcemi. A kámen úrazu zůstal HW například při pokusu o komunakaci s obyčejnou čtečkou karet nebo ručním skenerem... No ale je to už skoro deset let...

JaroB

4.8.2011 10:49:39 #

Radekc

>Skoro 95% bylo shodných
na to zapomeň, hodně komponent je jiných

>magie s uses sekcemi

Tak to budeš koukat o to více ;-)

Radekc

4.8.2011 11:03:19 #

JaroB

Pro komplexní aplikace používám skoro dvě stovky různých komponentů (nepočítám RxLibrary a TinyDB, to je jaxi samozřejmost) a s každou další verzí mám kapku potíže to překlopit. Už dneska bojuju s tím, zda umožnit překlad ještě na DBS2005 nebo ne. Je to dilema :(

JaroB

4.8.2011 11:10:24 #

JaroB

pardon, mělo být "BDS 2005"

JaroB

4.8.2011 11:10:47 #

tomk

>>magie s uses sekcemi
> Tak to budeš koukat o to více ;-)
Ja myslel, ze podle NDA nesmite ani naznacovat ;)

tomk

4.8.2011 12:40:16 #

JaroB

>...hodně komponent je jiných
to je potom na otázku, jaká je zpětná kompatibilita (ve smyslu, je-li kód z předminulé verze Delphi ještě vůbec zkompilovatelný), mám velmi nepříjemné vzpomínky na komponenty, které byly kompatibilní pouze s tou verzí Delphi pro kterou byly vytvořeny...

JaroB

4.8.2011 12:55:53 #

Radekc

Já se bavil o FireMonkey - to je nový framework. U VCL je kompatibilita 100% (měla by být).
Chtěl jsem říct, že ne všechny komponenty, které jsou ve VCL jsou ve FireMonkey nebo mají všechny vlastnosti které mají ve VCL.

Radekc

4.8.2011 12:57:46 #

JaroB

takže to bude obdobné jako vývoj nad CLX předpokládám.

JaroB

4.8.2011 13:24:50 #

Radekc

>takže to bude obdobné jako vývoj nad CLX předpokládám.
nerozumím

Přidal jsem nový článek s odkazem na report z představení.

Radekc

4.8.2011 13:33:19 #

JaroB

No CLX jako platforma vedle VCL, je o tom zmínka ve vzpomínaném blogu

JaroB

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců