12. UniPascal в детайли
77
Тези асемблерски подпрограми могат да се свържат с нормална подпрограма.
Ако подпрограмата е овърлейна, това не бива да се прави (тъй като съдържанието на
буфера ще бъде загубено), освен ако сте абсолютно сигурни, че подпрограмата на
UniPascal ще завърши изпълнението си, само ако буферът е изпратен. Например може
да напишете:
segment procedure some_proc;
begin
repeat
{ 
... обработка на някаква информация
}
SendChar(ch);
until OK;
exit:
SendBuff;
end { some_proc };
В конкретния случай е възможно да поставите асемблерски подпрограми в
овърлейна процедура. В общия случай това е възможно, само ако след завършване на
работата на подпрограмата на UniPascal асемблерските подпрограми не се нуждаят от
никаква междинна информация, която би трябвало да се съхрани до следващото им
активиране. При следващото си активиране асемблерските подпрограми ще бъдат
прочетени (заедно с подпрограмата на UniPascal) от диска и следователно ще бъдат в
начално състояние (все едно, че не са били активирани нито веднъж).
12.6. Модули и техните версии
При използването на модули тяхната реализационна част е или поне би трябвало
да бъде изцяло скрита от потребителите модули или програми. Ако това е така
(използващите даден модул програми или модули не предполагат конкретна
реализация и зависят само от описателната част), то е възможна коренно различна
реализация на описаните в interface частта обекти. Прекомпилация на реализационната
(implementation) част на един модул не налага прекомпилация на модулите, които го
използват (и поради това нейното изменение не създава проблеми).
Прекомпилацията на описателната (interface) част на един модул винаги изисква
прекомпилиране на всички програми и модули, които го използват. Това изискване се
налага, тъй като след като се сменя описанието на даден модул, то той вече не е същия
и тези модули, които го използват, трябва да 'научат' за новите му свойства. Например,
ако се добави нов параметър към някоя процедура или ако цялата процедура се
премахне, то използващият я модул не би могъл да продължи да я използва по същия
начин или въобще не би могъл да използва тази процедура.
Понякога новото описание на модула съвпада със старото и различията се
изразяват само в добавени нови възможности (константи, типове, променливи,
процедури или функции). В такъв случай модулите, които са го използвали в стария му
вид, могат да продължат да го използват в новия му вид (новата версия), тъй като
описанието на старата част не се е изменило и следователно тя е съвместима с него.
Пример: нека модул за работа с магнитни ленти е описан така (от реализационната част
не се интересуваме):
interface unit Tape;
procedure rewind(No: shortcard);
{
- пренавиване на лентата 
}
procedure write_TM(tNo: shortcard);
<<  <  GO  >  >>

Вернуться к началу сайта