Delphi 2009 - změny v kompilátoru a RTL (část 1)

vložil Radek Červinka 31. prosince 2009 02:37

Delphi 2009 přináší několik novinek kompilátoru a RTL z nichž nejzásadnější je podpora Unicode, Generika (generics), anonymní metody a pak zbytek.

Začneme od konce - dnes tedy ten zbytek.

Delphi 2009 je následníkem Delphi 2007 a proto je vhodné začít čtení se shrnutím předchozí verze Delphi 2007.

Změny v RTL a kompilátoru v Delphi 2009

Kompilátor rozeznává symbol VER200.

Rozšíření TObject

Bázová třída byla rozšířena o velmi užitečné virtuální metody ToString, Equals a GetHashCode. Nejsem si úplně jist, ale podle mne to značí, že musela být změněna tabulka virtuálních metod, tj. v některých opravdu speciálních případech to může znamenat problém (ale ten kdo to potřebuje tak ví co má změnit, 99% ostatních programátorů se to netýká).

Takto vypadají základní implementace:

    1function TObject.ToString: string;
    2begin
    3  Result := ClassName;
    4end;
    5
    6function TObject.Equals(Obj: TObject): Boolean;
    7begin
    8  Result := Obj = Self;
    9end;
   10
   11function TObject.GetHashCode: Integer;
   12begin
   13  Result := Integer(Self);
   14end;

rozšíření Deprecared

Direktiva deprecated (označující zastaralý kód) byla rozšířena o volitelný text.

    1procedure TestOld; deprecated 'pouzijte TestNew';
    2  begin
    3
    4  end;

Exit s hodnotou

Exit byl rozšířen o možnost přímo nastavení hodnoty. Tato konstrukce je velmi užitečná protože někdy bylo třeba napsat dva řádky (což je stále možno)

    1Result := 10;
    2  Exit;
    3// nyni mozno
    4  Exit (10);

Nastavení property přes referenci

Z důvodu kompatibility s COM byla přidána možnost u property použít var parametr. Pozor, může to mít vedlejší účinky při neopatrném použití - takže opatrně.

    1{$VARPROPSETTER ON} // nejdrive povolit
    2type
    3  TMyIntegerClass = class
    4  private
    5    fNumber: Integer;
    6    function GetNumber: Integer;
    7    procedure SetNumber(var Value: Integer);
    8  public
    9    property Number: Integer
   10      read GetNumber write SetNumber;
   11  end;

Změny u vláken

TThread byl rozšířen o podporu anonymních metod a unit System obsahuje record Monitor, který umožňuje globální zamykání (a jiné věci) i pro konkrétní objekt (a jelikož je globální lze na něj přistupovat ze všech vláken).

    1System.TMonitor.Enter (myList);
    2try
    3  xxxx
    4
    5finally
    6  System.TMonitor.Exit (myList)
    7end;

TStringBuilder

Byla přidána třída TStringBuilder, jako v .NET. Data se přidávají (většinou přes Appendxxxx), ale zvláštností je, že většina metod vrací referenci na sebe, tj. umožňuje to zřetězení volání

    1oBuilder.Append(234).AppendLine.Append('s pozdravem');

Readers a Writers

Přidány třídy (classes.pas)

  • TStringReader a TStringWriter (pracují v paměti)
  • TStreamReader a TStreamWriter
  • TBytesStream

Jsou následníkem TTextReader a TTextWriter a umožňují specifikovat kódování přes třídu TEncoding (a umožňují zpracovávat BOM - tj. binární značku na začátku souboru určující kódování).

    1var
    2  sw: TStreamWriter;
    3begin
    4  sw := TStreamWriter.Create('test.txt',  False, TEncoding.UTF8);
    5  try
    6    sw.WriteLine ('Delphi 2009');
    7    sw.WriteLine ('první unicode Delphi');
    8  finally
    9    sw.Free;
   10  end;
   11  
   12var
   13  sr: TStreamReader;
   14begin
   15  sr := TStreamReader.Create('test.txt', True);  // detect BOM
   16  try
   17    while not sr.EndOfStream do
   18      Memo1.Lines.Add (sr.ReadLine);
   19  finally
   20    sr.Free;
   21  end;
   22end;


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: , , ,

Recenze

Komentování ukončeno

Naše nabídka

Partial English version.

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 nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

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.

Anketa

Poslední komentáře

Comment RSS