Rozdíly mezi Speed-Pascalem (SP/2), Borland Pascalem (BP7) a Delphi.


  1. Žádné segmenty
  2. Změna důležitá, v mnoha případech pozitivní. Programy, které využívají knihovny funkcí založených na principu segmentů, musí být přepsány a následně znovu kompilovány. Seznam neimplementovaných funkcí a procedur najdete zde.

    Co jsou to segmenty?

    Segmenty jsou jedním ze způsobů, jakým operační systém přistupuje k paměti. DOS nemůže pracovat s blokem paměti větším než 64k, což vedlo k různým trikům, jak využívat relativně větší paměťové bloky.

    Proč nejsou implementovány?

    V OS/2, Windows, a dalších 32-bitových systémech neexistují.

    Počítá se do budoucna s jejich podporou?

    Doufejme, že ne.

    Co mám tedy dělat?

    V zásadě jsou zde dvě otázky: Co mám dělat s kódem, který pracuje se segmenty, a co mám dělat, když potřebuji pracovat se segmenty. V případě, že program pracuje se segmenty, máte možnost tuto skutečnost ignorovat. Výsledný produkt pak bude stále funkční, i když ne tak rychlý a malý, jako bez segmentů. Pokud segmenty vyžadujete, lze téměř stejného efektu dosáhnout alokací celých stránek paměti. Ovšem SP/2 vám to nijak neusnadní, budete muset použít patřičné funkce příslušného API.

  3. Žádné překryvné moduly
  4. Změna obecně nepříliš veliká.

    Co jsou to překryvné moduly?

    Překryvné moduly slouží ke swapování spustitelného kódu programu a následné redukci té části RAM, kterou program pro tento kód využívá.

    Proč nejsou implementovány?

    Speed Pascal/2 je napsán pro 32-bitové operační systémy, které swapují kód a data podle nutnosti. Překryvné moduly jsou pro něj něčím zastaralým.

    Počítá se do budoucna s jejich podporou?

    Moderní operační systémy konají dobrou práci při swapování kódu a dat a stále se zlepšují. Zdá se nepravděpodobné, že by si značné procento vývojářů komplikovalo život překryvnými moduly natolik, aby se SpeedSoft touto problematikou začal zabývat.

    Co mám tedy dělat?

    Nějak se přes to přenést. Moderní přístup k problémům dříve řešených pomocí překryvných modulů je používat knihovny DLL případně systémový objektový model (SOM). Pro SP/2 nejsou DLL žádným problémem, a proto je můžete kdykoli tvořit a následně využívat. V současné době se pracuje na podpoře SOM. Pokud však striktně vyžadujete překryvné moduly, budete si muset sami vypracovat nějaký systém pro jejich užívání.

  5. Nekompatibilitia Assembleru
  6. Změna nestálá, často nevyhnutelná.

    K čemu slouží Assembler?

    Programy psané v assembleru jsou překládány přímo do strojového kódu, proto jsou rychlejší než kód psaný ve vyšším programovacím jazyce.

    Proč nejsou SP/2 a Borlandí assemblery kompatibilní?

    16-bitový kód napsaný v assembleru se do 32-bitových operačních systémů nepřekládá. Ve SpeedSoftu se více zajímají o zlepšování překladače k produkci výkonných aplikací než o starosti s překladem programů, které se zdají být nepřenositelné.

    Dojde v budoucnu k jejich kompatibilitě?

    Možná, vše záleží na poptávce na trhu.

  7. Žádné in-line funkce
  8. Někteří lidé používali Pascal již v době počátku existence Borlandu aniž by kdy psali In-line funkce. Naproti tomu vysoce výkonné nástroje (jako např. Object Professional od TurboPower) je plně využívají k dosažení maximální rychlosti kódu.

    Co jsou to in-line funkce?

    In-line funkce slouží k přímému vkládání strojového kódu do textu programu. Zároveň zvyšují rychlost programu.

    Proč nejsou implementovány?

    32-bitové verze Borlandích Pascalů (počínaje Delphi 2.0) je nepodporují, neboť jsou střetem zájmu kompatibility moderních aplikací. Navíc je nutné všechny 16-bitové in-line funkce přepsat. IBM i SpeedSoft příliš nesympatizují s používáním Assembleru a in-line funkcí, protože snižují přenositelnost takto vzniklých programů.

    Počítá se do budoucna s jejich podporou?

    Není nemožné, aby příští verze SP/2 obsahovaly in-line funkce, pokud by si značná část programátorů nadále stěžovala, že bez nich nemůže žít, přizpůsobili bychom se poptávce. Ale prozatím se nikdo neozval, že by je v předchozích verzích postrádal, takže to vypadá na nekonečný boj.

    Co mám tedy dělat?

    Vzhledem ke zpětné kompatibilitě máte jedinou možnost, a to celý program přepsat s ohledem na skutečnost, že 16-bitový assembler v SP/2 není podporován. K dosažení vyšší rychlosti programu máte několik možností:

    1. Optimalizujte patřičný algoritmus.
    2. Používejte méně API funkce a odkazy na DLL, které mohou váš kód zpomalovat
    3. Ke zrychlení vám může pomoci vestavěný Assembler

    Třetí uvedená metoda pravděpodobně urychlí váš kód nejvíce, zároveň však výrazně sníží jeho přenositelnost. V pvním a druhém případě bude výsledek efektivní a přenositelný. Ke snížení potřeby takovýchto úprav programu se SpeedSoft zavázal zdokonalit překladač.

  9. Žádná přerušení
  10. Stejně jenom rozčilovala.

    Co jsou to přerušení?

    Přerušení se používala k přímému přístupu k jádru operačního systému DOS, který vůbec neobsahoval skutečné API.

    Proč nejsou implementovány?

    Tato technologie je specifická pro platformu DOS.

    Počítá se do budoucna s jejich podporou?

    Skutečně ne, ačkoliv teoreticky volání funkce Intr není nemožné.

    Co mám tedy dělat?

    Moderní operační systémy jsou vybaveny funkcemi API, pomocí nichž dosáhnete stejného výsledku. Vedle toho můžete používat přerušení k psaní TSR programů, které však ve světě OS/2 nebo Win32 nemají budoucnost.

  11. ANSI String (a další možnosti Delphi 2.0) nejsou podporovány
  12. Co je to ANSI String?

    ANSI String je původní datový typ řetězce v Delphi. Umožňuje vytvářet velmi dlouhé řetězce vysoce kompatibilní s typem PChar.

    Proč není implementován?

    Neboť v samotném Delphi je ANSII String novinkou.

    Počítá se do budoucna s jeho podporou?

    Ano, v příští verzi Speed-Pascalu/2.

    Co mám tedy dělat?

    Smutně koukat. Ne všechny možnosti Delphi už byly přeneseny do SP/2.

  13. Kruhové odkazy v jednotkách nejsou povoleny
  14. Co jsou to kruhové odkazy?

    Kruhový odkaz vzniká, když jedna jednotka závisí na jiné, která je zároveň závislá na té první. Řečeno jinak: Jestliže jednotka A požívá jednotku B a B používá A, dostáváme kruhový odkaz. Dále pak pokud v A je odkaz na B závislé na C a C používá A. Jestliže B používá jakoukoliv jednotku závislou na A, nebo rekurzivně, jakákoliv jednotka závisí na jiné, používající A, pak je to opět kruhový odkaz. V Borland Pascalu jsou kruhové odkazy povoleny jen do té míry, když je část interface přeložitelná bez cirkularity. Proto není chybou, jestliže A používá B, ale B používá A jen v implementační části. Kompilátor toto rozpozná a pokračuje směle v překladu.

    Proč nejsou kruhové odkazy povoleny?

    Překladač SP/2 nepracuje naprosto stejným způsobem jako jeho Borlandí ekvivalent.

    Počítá se do budoucna s jeho podporou?

    Ano, v příští verzi Speed-Pascalu/2.

    Co mám tedy dělat?

    Budete muset provést restrukturizaci programu a kruhovým odkazům se vyhnout, nebo si pčkat na novou verzi SP/2.

  15. Soubory OBJ se negeneruji
  16. Co jsou soubory OBJ?

    Moduly OBJ obsahují přeložený kód ve standardní formě, tzn. lze je připojit k programu pomocí systémového sestavovacího programu - linkeru.

    Proč SP/2 negeneruje soubory OBJ?

    Borland Pascal tradičně soubory OBJ nikdy nevytvářel. Přeložená jednotka (soubor TPU) obsahuje mnohem inteligentnější formát umožňující relativně rzchlou kompilaci a linkování programů. Ačkoliv prvotní výhodou vytváření modulů OBJ je možnost jejich připojení k programu psaném v jiném jazyce (např. C), je zde stále několik faktorů činících tento proces nevýznamným:

    1. Programy psané v jiných jazycích používají jiné mechanismy volání funkcí, jiné datové typy a v neposlední řadě odkazy na jejich vlastní knihovny.
    2. Různé překladače vytvářejí různé formáty modulu OBJ, proto nemohou být plně a efektivně využívány.
    3. Systém zprostředkovává přístup k funkcím DLL knihoven standardním způsobem. SP/2 vám umožňuje vytvářet právě takové knihovny.
    Bude SP/2 v budoucnu vytvářet moduly OBJ?

    Možná. Borland, neovlivněn poptávkou, uvedl tuto funkci v Delphi 2.0, a to hlavně proto, že back-end Pascalového překladače byl nahrazen back-endem kompilátoru C++.

    Co mám tedy dělat?

    Používat knihovny DLL jak to jen jde.

  17. Přímá adresace paměťového prostoru není povolena
  18. Co je to absolute memory access?

    Přímý přístup k paměti se provádí pomocí adresy příslušné oblasti RAM. Tento způsob je velice častý a populární pod DOSem. Používá se např. ke změně reboot kódu (viz QEMM QuickBoot), apod.

    Proč není implementován?

    OS/2 ho programátorům sprostředkovává pomocí funkcí API a omezuje je tak ve volném a nekontrolovatelném pohyby v oblasti hardwaru.

    Počítá se do budoucna s jeho podporou?

    Nepočítá.

    Co mám tedy dělat?

    Odstraňte z vašeho kódu přímou adresaci paměti a styďte se. :-)

  19. Procedury a funkce pozměněné v SP/2
  20. Následující funkce používají 32-bitové parametry na rozdíl od funkcí ekvivalentních v BP7. Ty pracují s parametry 16-bitovými.

    BlockRead BlockWrite GetFAttr

    Klíčové slovo Absolute (viz výše) je možné používat i nadále, ale ne k přímé adresaci paměťového prostoru.

  21. Procedury a funkce neiplementované v SP/2
  22. Z výše zmíněných důvodů nelze některé funkce jednoduše přeložit pro 32-bitové systémy. Následuje tabulka standardních funkcí, které s SP/2 v1.5 nefungují.

    Procedury a funkce z jednotek Graph, Graph3 a Overlay zde neuvádím, neboť SP/2 nepodporuje přenos DOSových grafických programů do platformy OS/2.

    AssignCrt CmdLine* CmdShow* AssignCrt CmdLine*
    CmdShow* CSeg+ DSeg+ Eoln ErrorAddr
    Exclude Flush GetCBreak GetIntVect~ HeapAllocFlags
    HeapBlock HeapLimit HeapList HInstance* HPrevInst*
    Include InOutRes Intr~ Keep~ MEM+
    MEML+ MsDOS* OFS+ OvrEmsHandle& Port*
    PrefixSeg+ Ptr+ RealModeRegs+ SaveIntXX~ SeekEof
    SeekEoln SEG+ Seg0040+ SegA000+ SegB000+
    SegB800+ SelectorInc+ SetCBreak SetIntVec~ SPtr+
    SSeg+ StackLimit Test8086* Test8087*

    * Indikuje proceduru/fci specifickou pro určitou platformu (Win16, DOS)
    + Indikuje proceduru/fci pracující se segmentovou architekturou.
    ~ Přerušení nebo rezidentní funkce
    & Procedura nebo funkce překryvného modulu

    Neoznačené procedury a funkce jsou v BP7 a SP/2 implementovány rozdílně. Tyto funkce budou obsaženy v příští verzi.


Zpět Vpřed