Zajímavé komponenty - část 3

vložil Radek Červinka 9. listopadu 2009 23:13

Další díl seznamu komponent a užitečností pro Delphi. Dnes o PasDoc, FastReport a FastCode.

PasDoc

Každý správný program má mít dokumentaci a nejlepší dokumentací je zdrojový kód. Proto také většina dokumentačních nástrojů používá nějakým způsobem jako zdroj pro dokumentaci zdrojový kód.

Existuje velké množství programů pro různé jazyky a většina se dá použít i pro Object Pascal. Ale nejlepší pro náš jazyk asi je PasDoc.

Možné výstupy jsou HTML, HtmlHelp, LaTeX, RTF via latex2rtf nebo jednoduché XML.

Fast Report

Pokud potřebujete reportovací nástroj můžete zkusit FastReport. Očesaná verze 2.3 je k dispozici k volnému použití pod názvem FREEREPORT. A věřte, že FastReport dělá svému jménu čest. Pro Delphi 2009+ jsou nutná co nejvyšší verze 4.

Fast Report

FastCode

No a na konec něco hardcore. Sice ne každému už záleží na to tom jak rychle jeho program běží (a to nemluvím o programátorech ve skriptovacích jazycích kde se není čemu divit).

Už několikrát jsem tvrdil, že Delphi má kromě kompilátoru i rozumně vyváženou běhovou knihovnu (RTL) mezi velikostí a rychlostí. Některým lidem to ale nestačí a tak vznikl projekt FastCode (o FastMM už se mluvilo)].

Cílem prvního je snaha ještě více optimalizovat některé často používané funkce a to formou soutěže o nejrychlejší implementaci.

Nutno poznamenat, že pokud máte Delphi 2006 (částečně 2005) a vyšší tak vás toto nemusí zajímat, jelikož autoři Delphi převzali některé funkce a FastMM do Delphi, takže jak samotné Delphi, takže programy jím vytvořené obojí obsahují.

I když mám za sebou jisté zkušenosti ohledně optimalizace na rychlost v assembleru (a to již od ZX Spectra kdy se např. pro rychlé kopírovaní používalo i zásobníku) některé postupy mne překvapily. Některé rutiny (např. move) na začátku programu detekují typ procesoru (jen poprvé) a podle typu procesoru vyberou konkrétní optimalizovanou variantu.

Zajímavostí je jak rutiny nahrazují standardní proceduru svojí variantou a jelikož se to někdy může hodit, tak sem princip bezostyšně vložím.

procedure PatchMove; {Patch System.Move to Divert Calls to New Move Procedure}
const
  JumpFarId = $E9;
var
  Protect, OldProtect : DWORD;
begin
  VirtualProtect(@System.Move, 256, PAGE_EXECUTE_READWRITE, @OldProtect);
  if PByte(@System.Move)^ <> JumpFarId then {Check if Already Patched}
    begin
      PByte(@System.Move)^ := JumpFarId;
      PInteger(Integer(@System.Move)+1)^ :=
        Integer(@Move) - Integer(@System.Move)-5; {Change Destination}
    end;
  VirtualProtect(@System.Move, 256, OldProtect, @Protect);
  FlushInstructionCache(GetCurrentProcess, @System.Move, 256);
end; {PatchMove}

VirtualProtect umožní zápis do chráněné oblasti procesu, kde na adresu staré procedury se vloží kód skoku a za to adresa nového kódu. FlushInstructionCache je rutina z FastCode, ale tady šlo hlavně o princip.

To jsem trochu odskočil - každopádně pokud máte starší Delphi a potřebujete trochu více výkonu neváhejte.

Tagy: , ,

Delphi | Komponenty

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ů