int21h
První dojmy z Freepascalu v2.0.4
28. srpna 2006 vyšel dlouho očekávaný
Freepascal v2.0.4 Ještě jsem se s ním neseznámil natolik důkladně, abych na něj mohl napsat podrobnou recenzi, ale první dojmy už jsem si z něho odnesl.
Těšil jsem se, že v této verzi budou vyřešeny vleklé problémy dvojkové řady freepascalu pod systémem DOS. Doufal jsem, že tato verze bude moci nahradit kvalitní FP 1.0.10
Bohužel, nestalo se.
Ve skutečnosti je FP 2.0.4 ještě horší, než jsem myslel. Je to opravdu rána. Účastnil jsem se totiž testování vývojových verzí a psal svoje připomínky tvůrcům Freepascalu. Proto jsem tak překvapen smutnou realitou výsledného produktu.
Nový
Freepascal 2.0.4 pro DOS a zřejmě do jisté míry i pro ostatní platformy, je plný chyb. Nejvíce to odneslo
IDE, tedy vývojové prostředí. Od minulé verze, tedy od
FP 2.0.2 se konečně zobrazuje kurzor myši. Fajn, práce v editoru bez myši byla velice frustrující. Jenže myš se zobrazuje jenom v rozlišení 80x25. Pokud máte nastaven jiný režim, tak se nezobrazí. Naštěstí si ji můžete zapnout pomocí malého triku:
Zmáčkněte
Alt-F5 (tedy zobrazte si
user screen) a zase se vra>te. Alespoň že tak. Dále nepotěší, že si v nastavení nemůžete vybrat vlastní barvy a vlastní zvýrazňování syntaxe. Nevím jak vy, ale já mám svoje oblíbené barevné schéma, na které jsem zvyklý, a pracovat s jinými barvami je pro mě nepohodlné. Vývojáři tvrdí, že je to kvůli tomu, že výběrník barev z předchozích verzí využíval uzavřené zdrojáky, které nemohly být šířeny licencí GNU. Nové GNU
Free vision ještě nemá některé funkce a výběrník barev je jedna z nich. Naštěstí se ale dá obejít i tohle:
Jestli máte současně nainstalovaný FP 1.0.10, tak si otevřete soubor
FP.INI z podasresáře
BIN a zkopírujte jeho sekci
[Colors] do souboru FP.INI z verze 2.0.4
Tímto jsme odstranili nedostatky IDE a můžeme začít pracovat. Předpokládám, že znáte některou z předchozích verzí FP nebo alespoň TP. Verze 2.0.4 žádné nové funkce nepřináší, ale naopak některé ubírá. O nemožnosti nastavit si barvy už byla řeč, ale co je mnohem horší je to, že DOSová verze nemá debugger!
Toto by mělo zaznít ještě jednou. Tedy:
DOSová verze nemá debugger!
A to je zlé. To je velmi zlé, protože bez debuggeru se programuje extrémně těžko. Přitom debugger ve verzi 1.0.10 je fantastický. Je mnohem lepší než v TP7 (ačkoli, pravda, pomalejší). A verze 2.0.4 ho najednou postrádá. Překvapení to nicméně není. V testovacích verzích nefungoval a vždycky shodil program, takže ho vývojáři prostě odstranili. A jsem spíše pesimista a bojím se, že se ho nedočkáme ani v budoucích verzích. Tento nedostatek má jenom DOSová verze. Verze pro windows ho má. Zřejmě ale taky není stoprocentní, protože mi při krokování ukázkového programu pro Free vision shodil IDE.
Zatímco v tomto případě tvůrce poněkud omlouvá obtížnost vývoje debuggeru, za druhým velkým nedostatkem je jen a pouze šlendrián. Možná je trochu nefér spílat tvůrcům za program, který tvoří zdarma a ve volném čase, ale přece jen, FP si vydobyl dobré jméno a měl by mít svůj standard. A co tedy jde:
Pokud odskočíte do DOSu (
položka Command shell v menu File) tak IDE poškodí proměnné prostředí jako
path,
comspec,
blaster a další. Nejvíce vadí nefunkční proměnná
path. Stejný problém vyvstane pokud vyvoláte externí program z nabídky
Tools. Například já mám pod klávesovou zkratkou "Shift-F7" Volkov commander. A kvůli jinému nefukčnímu řetězci, řetězci
comspec, z nemůžu spouštět další programy. Dobrý co? Ne, opravdu ne!
Blbé je, že zdrojáky IDE nejsou k dispozici, a tudíž to nemůžu opravit.
To, že se špatně zobrazuje nápověda (místo některých znaků se zobrazují HTML entity) jenom podtrhuje celkovou mizérii IDE z Freepascalu 2.0.4
Na závěr ještě dodejme, že se IDE chová při překladu větších projektů značně nestabilně.
Tím končím kritiku IDE.
Samozřejmě ho můžete nahradit jiným editorem. Tím, že nefunguje debugger, o nic nepřijdete. Podívejme se teď na překladač samotný.
Výčet změn jednotlivých verzí je působivý. Dvojková řada Freepascalu postupně zavádí další a další rozšíření jazyka
object pascal a tím zlepšuje kompatibilitu s Delphi. Dočkali jsme se tak defaultních parametrů, RTTI, properties a mnoha dalších moderních prvků. Od předchozí verze 2.0.2 je vylepšena správa paměti, lepší práce s řetězci, generuje kvalitnější kód a opravuje množství chyb.
Jenže brzy jsem zjistil, že nefunguje unit
Graph. Hned při inicializaci se program ukončí s běhovou chybou č.216.
Vzápěti jsem zjistil, že nefungují (nebo fungují špatně) i jiné mé programy, které jednotku Graph nepoužívají. Po nějakém bádání jsem zjistil strašlivou věc:
FP 2.0.4 generuje chybný kód v inicializační části unitů.
Tedy v této části:
unit MujUnit;
interface
...
implementation
...
begin
end.
Tohle je tragédie. Nevím jak vy, ale já někdy mívám inicializační části jednotek poměrně rozsáhlé a tohle je průšvih. Chybu můžete vyvolat např. tímto kódem.
uses crt,
unit1;
begin
writeln(l);
readln;
end.
unit unit1;
interface
var l:longint;
implementation
uses unit2;
begin
InitMouse;
l:=14;
end.
Unit unit2;
Interface
Procedure InitMouse;
Implementation
Procedure InitMouse;assembler;
asm
xor eax,eax
int 33h
end;
Begin
InitMouse;
End.
Jak už jsem psal výše, tato chyba zřejmě postihuje i některé standardní jednotky. Kromě jednotky
Graph ještě
MsMouse a snad i některé další. MsMouse je o to zákeřnější, že se při inicializaci nezhroutí, ale zaviní chybnou funkci programu podobně jako v ukázce výše.
S oběma jednotkami jsem dělal hokusy-pokusy a možná jsem je patchnul. Jednotka Graph se mi už nehroutí a funguje korektně a MsMouse snad přestane dělat neplechu:
Stáhněte si
Graph a
MsMouse
Obsah archívu zkopírujte do podadresáře
UNITS
Druhý problém s překladačem je mírně změněná syntax assemblerových bloků. Uvnitř
asm ... end se už nemůžete odvolávat jménem na názvy položek záznamů. Není už tedy možné zapsat např.
mov eax,rozmer.sirka
Místo toho se musí zapsat:
mov esi,rozmer; mov eax,[esi+n]
(
n je offset položky
sirka
v záznamu)
Co říct závěrem? Freepascal 2.0.4 je zklamání. IDE je ještě více zabugované než ve FP 2.0.2 a problém s chybnou inicializací je průšvih. Přes všechny nesnáze se mi po nevelkých úpravách zdrojáků nicméně povedlo přeložit
Jupíra 2 včetně editoru a dokonce funguje i zvuk.
Dodatek z 5.září:
Faktická nepoužitelnost FP 2.0.4 mě inspirovala důkladně vyzkoušet předchozí oficiální verzi
FP 2.0.4
Když vyšla, tak jsem jí nevěnoval příliš pozornosti, protože mě odradila absence myši v IDE a to, že jsem v ní nedokázal přeložit Jupíra. Jenže po oněch úpravách, které jsem provedl kvůli 2.0.4 se Jupír přeložil úplně krásně a stejně tak i další moje zdrojáky.
S úlevou jsem zjistil, že Freepascal 2.0.4
nemá onu strašlivou chybu s inicializačním kódem jednotek. Nechci nic zakřiknout, ale zdá se, že i unit Graph i MsMouse fungují naprosto bez problémů, stejně tak jako ostatní unity. Všechny prvky syntaxe verze 2.0.4 podporuje 2.0.2 také. Seznam změn tvrdí, že mezi verzemi 2.0.2 a 2.0.4 bylo uděláno přes 1000 změn kódu, ale velká většina se zřejmě týká podpory windowsích procesů (tzv. vláken), FCL a Free vision. Nás DOSařů se tedy týkají jenom údajné optimalizace kódu a generování tzv. PIC kódu.
Co to přesně PIC kód je, jsem nepochopil. Asi se tím ale myslí, že kód i data programu mohou být umístěny na libovolném místě v paměti, takže při adresaci nikde nejsou použity absolutní adresy, ale vždy jen offset od nějakého registru.
I verze 2.0.2 se týká nemožnost přímého přístupu k položkám záznamu v assemblerových blocích. Holt asi bude třeba přepisovat...
Co se týká
IDE, tak už není všechno tak růžové. Debugger sice jakoby k dispozici je, ale nefunguje. Barvy to samé. Nápověda se rovněž zobrazuje blbě.
Nicméně druhý velký nedostatek, poškozené proměnné prostředí, tu
není. Naštěstí tu řádně funguje odskok do DOSu i volání externích utilit. To jsme rádi! Jediný bug, o kterém vím, že je v IDE 2.0.2 a není v IDE 2.0.4 je
vyhledávání pozpátku. Jistě ale se mnou budete souhlasit, že na tom programování nestojí a nepadá :-)
S IDE 2.0.2 jsem si dneska trochu hrál a zkoumal jak obejít jeho nedostatky:
nastavení barev:
Použijte nachlup stejný postup, jaký jsem popisoval pro 2.0.4
nápověda:
Použijte nápovědu z Freepascalu 1.0.10
Sice se v ní nepopisují nová rozšíření jazyka, ale poslouží dobře. Originální nápovědu z 2.0.2 či 2.0.4 si můžete uschovat a nahrát si ji jenom když potřebujete osvětlit nějaký rys, o kterém se nepíše v 1.0.10
myš:
Největší oříšek. Je až pozoruhodné, jak je nepříjemná práce v moderním IDE bez myši. Po zapnutí IDE není myš vidět. Bez ohledu na použitý videorežim. Stejně jako v 2.0.4 pomůže stisknout
Alt-F5 a poté libovolnou klávesu pro návrat. I tohle je ale poněkud otravné, tak jsem bádal dál.
Řešení jsem našel v předplnění bufferu klávesnice. Jde o to, že do klávesnicového bufferu uměle vložíte scan kódy kláves. Až potom nějaký program bude číst klávesnici, tak mu tyto nasimulované klávesy vypadnou jako první. Tuhle techniku jsem použil i v Editoru Jupíra, takže jsem měl už hotový prográmek
Xkeybf, který načte soubor specifikovaný na příkazové řádce a jeho obsahem naplní buffer klávesnice. Bohužel vám nemůžu dát jeho zdroják, protože se mi nějak ztratil...
Takže. Řekněme, že máte adresář
C:BAT
ve kterém máte uloženy svoje BAT soubory a který je zahrnut do proměnné prostředí
path
Vytvořte v něm soubor
FP2.BAT
@echo off
xkeybf c:\atfpstart.sss
c: pfpc202\ingo32v2fp %1 %2 %3
Cestu k
FP.EXE si upravte podle sebe.
Soubory
xkeybf.exe a
fpstart.sss najdete v tomto
archívu.
Pokud vás zajímá, jak jsem vytvořil soubor FPSTART.SSS tak se mrkněte na tenhle jednoduchý zdroják:
var s:string;
f:text;
begin
Assign(f,'c:\atfpstart.sss');
rewrite(f);
s:=#0+'DUX';
write(f,s);
Close(f);
end.
Poznáte, jaké klávesy tu simuluju?
Je to
Alt-D (menu debug),
U (položka user screen),
X (libovolná klávesa :-)
S těmito obezličkami se použitelnost IDE Freepascalu 2.0.2 rozhodně zvýší, a tudíž má význam začít se FP 2.0.2 hlouběji zabývat...
Stejný problém s myší bude týkat všech vašich aplikací napsaných pomocí Free vision. Naštěstí od FV jsou k dispozici zdrojáky, takže se s tím dá něco dělat :-)