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ý.
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:
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.
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.
Je jich mnoho, ale doporučuji System.Sqlite - což OSX kompatibilní wrapper pro SQLite a System.Sensors, který obsahuje implementaci pro sensory (GPS atd.).
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.
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).
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.
{$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.
Knihovna je významně rozšířena. Např.
Ve VCL lepší podpora (NC část okna, prý i Ribbon atd). Ve FMX taky, navíc bitmapové "pixel perfect OS styl" (nezkoušel jsem).
Jakoby podpora Metro rozhraní. Tři módy:
Metro styly:
Navíc možnost "one click metro conversion" což provede zhruba:
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.
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