Rozdφly mezi Speed-Pascalem (SP/2), Borland Pascalem (BP7) a Delphi.
- ÄßdnΘ segmenty
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.
- ÄßdnΘ p°ekryvnΘ moduly
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φ.
- Nekompatibilitia Assembleru
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.
- ÄßdnΘ in-line funkce
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φ:
- Optimalizujte pat°iΦn² algoritmus.
- Pou₧φvejte mΘn∞ API funkce a odkazy na DLL, kterΘ mohou vßÜ k≤d zpomalovat
- 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Φ.
- Äßdnß p°eruÜenφ
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.
Co je to ANSI String?
- ANSI String (a dalÜφ mo₧nosti Delphi 2.0) nejsou podporovßny
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.
Co jsou to kruhovΘ odkazy?
- KruhovΘ odkazy v jednotkßch nejsou povoleny
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.
Co jsou soubory OBJ?
- Soubory OBJ se negeneruji
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:
Bude SP/2 v budoucnu vytvß°et moduly OBJ?
- 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.
- R∙znΘ p°ekladaΦe vytvß°ejφ r∙znΘ formßty modulu OBJ, proto nemohou b²t pln∞ a efektivn∞ vyu₧φvßny.
- 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.
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.
Co je to absolute memory access?
- P°φmß adresace pam∞¥ovΘho prostoru nenφ povolena
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. :-)
- Procedury a funkce pozm∞n∞nΘ v SP/2
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.
- Procedury a funkce neiplementovanΘ v SP/2
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 moduluNeoznaΦenΘ procedury a funkce jsou v BP7 a SP/2 implementovßny rozdφln∞. Tyto funkce budou obsa₧eny v p°φÜtφ verzi.