Delphi.cz

Český portál Delphi

XE3 - co mne zaujalo a na co si dát pozor

Jak již jistě víte, další verze Delphi a spol. je na světě. Takže v rychlosti sepíši co mne zaujalo a na co jsem si vzpomněl. Předpokládám, že předchozí článek o XE3 máte už přečtený.

krabice XE3

Ale nejdříve špatné zprávy.

Připadám si trochu hloupě, protože v průběhu vývoje jsem naznačoval, že součástí aktuální verze bude vývoj pro mobily (ARM kompilátor), což bylo určitou dobu pravda, než v důsledku časového presu došlo k vyčlenění do nového produktu Mobile studio, které bude dostupné později během XE3. Více o tom snad prozradí Pawel na semináři (který je mimochodem v Praze skoro úplně zaplněn). Takže Mea Culpa - měl jsem držet hubu. Pořád si ale myslím, že Mobile Studio bude něco vyjímečného - něco, co tady není.

Druhý špatná zpráva je, že BCC64 postavený na novém toolchainu není součástí XE3 a měl by být snad dostupný během měsíce nebo tak. Pevně tomu věřím. Takže Mea Culpa podruhé.

Třetí špatná zpráva je, že Barry Kelly opouští Embarcadero. V odkazovaném článku píše důvody, v podstatě dlouhá doba vzdálené práce a ztráta lásky v Delphi (byl velkým zastánce garbage collectoru, RTTI, a dalších věcí). Je mi to moc líto, protože třeba výhody a jak je důležité RTTI mnoho lidí dodnes nepochopilo. Za hodně změn v XE3 může právě Barry, a je mi jasné že ne všechno se hardcore Delphi programátorům bude líbit (třeba už naznačený TStringHelper nebo budoucí ARC). Takže ať se daří Barry.

Další nepříjemné věci:

  • těsně před vydáním někoho inteligentního napadlo, že by to chtělo novou ochranu před kopírováním, a tak všechny DLL v \bin se při startu ověřují. Má to dva háčky: za prvé se trochu opozdí start ale hlavně jakékoliv DLL v bin musí být podepsané jinak se Delphi prý nespustí.
  • floating VCL form designer je v XE3 schován (nějak přes registry se dá ukázat). FMX ho nepodporuje vůbec. Já osobně ho nepoužívám. Jinak "HKEY_CURRENT_USER\Software\Embarcadero\BDS\10.0\Form Design" a nastavit "Embedded Designer" na False.

Ale pojďme k pozitivnějším věcem.

Těsně před vydáním se EMBT snažilo změnit licenci profesional, ale nakonec od toho upustilo a licence je stejná jako XE2. Instalace je rychlejší a pokud uděláte web install tak na disku mají stažené soubory cca 680M (Delphi). Během instalace se nově upozorňuje na novou verzi Interbase XE3. Jsem nepoučitelný, ale zkusím si tipnout. Představte si, že máte výkonou databázi, která je schopná fungovat jako embedded (podobně jako Firebird) a máte kompilátor pro jiné platformy (iOS, Android). Součástí XE3 má být navíc testovací verze Interbase ToGo (což je ta embedded verze). No já myslím že chápu, kam EMBT míří. Uvidíme jak se k tomu postaví Firebird.

instalace XE3

Další důvod proč je zde screenshot je ten obrázek (asi) kolibříka - prostě se mi líbil.

Kodové jméno XE3 je WaterDragon.

Nové jednotky

Je jich mnoho, ale doporučuji System.Sqlite - což OSX kompatibilní wrapper pro SQLite a System.Sensors, který obsahuje implementaci pro sensory (GPS atd.).

Helpery

Ohledně toho TStringHelper: existují i další helpery (double, extended), všechny definované v SysUtils (nebo aspoň ten první). Pokud máte v uses SysUtils, můžete např. k stringu přistupovat jako v .NET. Podle mne je to moc hezké. Jinak může být aktivní jen jeden helper pro daný datový typ v rámci jednotky. Ale můžete si nadefinovat vlastí helper pro libovolný datový typ.

Syntaxe je podobná jako u helperu:

TStringHelper = record helper for string
….
end;

Např. jedna z metod (direktiva je tam jen na jednou)

{$ZEROBASEDSTRINGS ON}
function TStringHelper.IndexOf(Value: Char; StartIndex, count: Integer): Integer;
begin
  Result := System.Pos(Value, Self, StartIndex + 1) - 1;
end;

Na rozdíl od jistých diskutujících si myslím, že je to důležitý krok, ale nikdo Vás nenutí to používat.

Zajímavé symboly

Ve zdrojácích RTL a spol. lze nalézt např. tyto symboly pro podmíněnou kompilaci:

OTHERPLATFORM, POSIX, LINUX, MACOS, NEXTGEN, AUTOREFCOUNT

NEXTGEN není v dodané verzi XE3 použit a týká se to kompilátoru pro ARM. Pro něj je definován i AUTOREFCOUNT, což určuje, že kompilátor podporuje automatické uvolňování objektů - dále jen ARC (opět ARM a Delphi pro mobily).

ARC

Příkladem může být pro podporu ARC upraven TObject nebo FreeAndNil.

procedure FreeAndNil(var Obj);
{$IF not Defined(AUTOREFCOUNT)}
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
{$ELSE}
begin
  TObject(Obj) := nil;
end;
{$ENDIF}

Všimněte si druhé větve, kdy kompilátor vygeneruje kód pro odečet aktivní reference. Jinak tohle je samozřejmě pro kompatibilitu. Kompilátor automaticky zavolá snížení reference např. když lokální proměnná končí. Podobně to již dávno funguje pro řetězce. Moc jsem si s tím nehrál, protože se kompilátor oddělil do Mobile Studia.

Na co si dát pozor a exorcismus Pointeru

{$IFEND} je deprecated, nahraďte za {$ENDIF}

Pokud dědíte od db.pas tak pozor na to, že tam je hodně změn, hlavně ohledně bufferu dat.

FValueBuffer: TValueBuffer; předtím Pointer

a to se táhne všude

Obecně cílem XE3 je mobilní vývoj a jako důsledek je snaha vyhodit pointer ze všeho.

S tím souvisí i zavedení dvou tříd (nebo recordů)

v System.pas - TMarshal
v SysUtils.pas - TMarshaller

Cílem je abstrahovat Pointer. Netýký se Win32 a Win64. Raději praktickou ukázku.

Verze RenameFile v XE2:

function RenameFile(const OldName, NewName: string): Boolean;
begin
{$IFDEF MSWINDOWS}
  Result := MoveFile(PChar(OldName), PChar(NewName));
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Result := __rename(PAnsiChar(UTF8String(OldName)), PAnsiChar(UTF8String(NewName))) = 0;
{$ENDIF POSIX}
end;

Verze RenameFile v XE3:

function RenameFile(const OldName, NewName: string): Boolean;
{$IFDEF MSWINDOWS}
begin
  Result := MoveFile(PChar(OldName), PChar(NewName));
end;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
var
  M1, M2: TMarshaller;
begin
  Result := __rename(M1.AsAnsi(OldName, CP_UTF8).ToPointer, M2.AsAnsi(NewName, CP_UTF8).ToPointer) = 0;
end;
{$ENDIF POSIX}

Všimněte si, že Windows verze zůstala stejná, ale v POSIX (tj. vše od Mac, přes Linux, Android a iOS) je použit TMarshaller, což umožní odstínit přístup do paměti.

Jsou zrušeny globální proměnné CurrencyString atd. Už v XE2 jsou označeny jako deprecated a nahraďte je např. FormatSettings.CurrencyString.

FireMonkey

Knihovna je významně rozšířena. Např.

  • TAction (částečně sdíleno s VCL)
  • FireMonkey Form Inheritance (ale ne TFrame)
  • jeden jazyk pro shadery a jejich kompilátor pro OpenGL a Direct3D
  • On-screen klávesnice pro dotykové windows
  • podpora pro non-client části okna (titulek atd)
  • lepší podpora Layout managementu v FMX
  • vynikající podpora Audio, Video (přehrávání, zachytávání) - interně je na Windows používáno DirectShow, na OSX pro změnu QuickTime
  • senzory
  • atd.

Styly

Ve VCL lepší podpora (NC část okna, prý i Ribbon atd). Ve FMX taky, navíc bitmapové "pixel perfect OS styl" (nezkoušel jsem).

Metropolis

Jakoby podpora Metro rozhraní. Tři módy:

  • Blank Metro application
  • Grid View Metro application
  • Split Pane Metro application

Metro styly:

  • MetroBlack
  • MetroBlue
  • MetroDark
  • MetroGreen

Navíc možnost "one click metro conversion" což provede zhruba:

  • WindowState = wsMaximized
  • BorderStyle = none
  • a otevře Options pro výběr stylu (jak VCL, tak FMX)

Navíc podpora pro "Touch Keyboard"

program Project1;
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
  Application.Initialize;
  Application.UseMetroStyle;   // Add to use MetroStyle behavior
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Co se jinam nevešlo

JVCL, JCL pro WaterDragon jsou v SVN.

Exe soubory pro designery jsou v "c:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Redist\win32\".

Co je vlastně HTML5 Builder? Viz. odkaz, jinak server část PHP, klientská JS a HTML5 (proč sakra není místo PHP použito Delphi). Následník Rad PHP a spol. Ale vypadá to zajímavě.

Prism je dostupný jen v Rad Studiu, samostatně přes EMBT ne - jen u výrobce. Asi chlapcům z EMBT přetekla trpělivost s tím jak autoři Prism útočí na EMBT.

Pokud upgradujete před 28.9.2012 získáte prý následující software:

Myslím, že první bonus je celkem prima.

Pokračování příště.

Datum: 2012-09-04 21:12:00 Tagy: XE3

Novinky Novinky v Delphi