WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Інтерпретатор muLisp - Реферат

Інтерпретатор muLisp - Реферат

Функція NUMBERP розпізнає число.
$ (INTEGERP 100) $ (INTEGERP 3.5)
T NIL
$ (NUMBERP 3.5) $ (NUMBERP 4/5)
T T
Число в подвійних лапках завжди є символом:
$ (SYMBOLP "23") $ (NUMBERP "23")
T NIL
Символи та числа є атомами. Наступнівирази повертають істину:
(ATOM 3.5), (ATOM "23"), (ATOM 'APPLE).
Конс є примітивним об'єктом, який вказує на будь-які два інші об'єкти даних. Він не є атомом. Назва конс пішла від функції конструктора CONS. Кожен конс склада- ється з CAR- та CDR- елементів. Конс часто називають точковою парою. Якщо X і Y об'єкти даних, то вираз (X . Y) є консом, CAR-елемент якого є X, а CDR-елемент - Y.
$ (SETQ A (cons X Y)) $ (CAR A) $ (CDR A) $ (CDR '(R . S))
$ A X Y S
(X . Y)
За допомогою точкового подання можна показати структуру будь-якого об'єкту. Список (x1 x2 x3) є ланцюгом консів, які зв'язані за допомогою CDR- елементів. Його CAR- елементи вказують на елементи списку. CDR- елемент останнього конса вказує на NIL. Вказаний список можна подати у вигляді (x1 . (x2 . (x3 . NIL))). Функція READ читання виразу розпізнає як точкове подання виразу, так і спискове. Функція виведення PRINT виводить об'єкти в списковому поданні.
$ (SETQ a '(q . (w . nil)) $ a $ (CONSP '(q . w)) $ (CONSP (q w))
(q w) (q w) T T
Функція (CONSP obj) розпізнає конси. Список не є примітивним об'єктом, а є ланцюгом консів. Отже, результатом застосування функції CONSP до списку буде Т.
2. Керування пам'яттю
Динамічне автоматичне керування пам'яттю надає велику кількість переваг інтерпретатору muLisp. Немає необхідності власноручно програмісту розподіляти пам'ять під задачу, яка буде виконуватися. Пам'ять, яка не буде використовуватися програмою, доступна для створення нових структур даних.
При ініціалізації muLisp обчислюється розмір доступної пам'яті, яка потім розбивається на 4 області:
- область атомів (64К), яка забезпечує пам'ять для 4 елементів-вказівників, необхідних для кожного символа та числа.
- область векторів (128К), яка забезпечує пам'ять для кожного тіла PRINT-імені символа (64К) та числового двійкового вектора кожного числа (64К).
- область вказівників (256К), яка забезпечує пам'ять під 2 елементи-вказівники, необхідні для кожного cons-а та під D-код, необхідний для визначення функції. Оскільки cons є основною структурою даних Ліспу, область вказівників є найбільшою серед інших.
- область стеку (64К), яка забезпечує пам'ять для контрольного стеку та змінного стеку. Ці два стеки розташовані на протилежних кінцях області стеків.
Таким чином для роботи інтерпретатора muLisp необхідно 512К плюс пам'ять під DOS.
3. Збір сміття
MuLisp має алгоритм збору сміття з двома переглядами (помітка та чистка). Під час першого перегляду пам'яті помічаються усі активні об'єкти даних, доступ до яких забезпечується внаслідок зчеплення за допомогою елементів-вказівників, починаючи з елементів списку значень та властивостей усіх символів системи, або зі стеку змінних, або D-коду. Символи з автоматичним посиланням, які не мають властивостей та поточних визначень функцій, не помічаються. Такі символи автоматично видаляються зі списку під час другого перегляду.
У процесі другого перегляду збору сміття усі помічені об'єкти даних ущільнюються та збираються в одному з кінців відповідної області даних. Це дозволяє зберегти залишки областей даних для створення нових об'єктів.
3.4. Перерозподіл областей даних
Після збирання сміття одній або декільком з чотирьох областей даних може бракувати вільної пам'яті для того, щоб програми мали змогу продовжити виконання, незважаючи на те, що інші області даних мають достатню кількість вільної пам'яті. Якщо виникає така ситуація, то здійснюється перерозподіл областей даних шляхом ділення областей, додання пам'яті, якої не вистачає, одній або декільком областям. Але обмеження на розміри для кожної області даних, які описувались вище, мають бути дотриманими.
Отже, muLISP може реагувати на зміни вимог програм до розміру областей даних.
Хоча збір сміття та перерозподіл областей даних відбуваються автоматично, їхня поява не проходить непомітно для користувача, оскільки вони викликають коротку паузув роботі програм.
Точна сума часу для збирання сміття й перерозподілу залежить від кількості даних в системі. Збір сміття звичайно займає менше секунди. Точно так же, менше секунди звичайно відбувається й перерозподіл областей даних. В дійсності, це не повинно турбувати користувача, але при розробці систем реального часу, що використовують muLISP, це питання необхідно розглядати.
Явище, відоме як "thrashing" виникає в тому разі, коли система змушена витрачати непередбачену кількість часу на збір сміття для дуже маленького повернення області даних. Ознакою "thrashing" є значне зростання часу виконання даної задачі. Дана проблема може бути вирішена шляхом збільшення розміру пам'яті ЕОМ (до 512К) і (або) модификації програми з метою зменшення її вимог до пам'яті.
5. Пакети переривань
Пакети переривань muLISP викликаються регулювальником переривань та регулювальником затримки помилок. Коли переривання виникає, то після повідомлення про переривання чи про помилку на екран дисплея видається підказка у вигляді опцій:
Continue, Break, Abort, Top-level, Restart, System?
Потім система очікує, допоки користувач обере одну з опцій шляхом вказання її імені (С,В,А,Т,R чи S відповідно).
Відзначимо, що опції перераховані в порядку посилення їхньої дії.
- Continue (продовжити): повертає керування програмі, що викликала переривання. Якщо причиною переривання була команда переривання, послана з клавіатури, то виконання продовжується, ніби переривання не було.
Якщо переривання відбулося в результаті затримки помилки, величина, передана при перериванні регулювальником помилок, повертається як значення помилкової функції;
- Break (зупинка): тимчасово призупиняє виконання програми й виходить на наступний нижній рівень циклу "read-eval-print" ("читання-обчислення-друк"). Це дозволяє користувачеві перевірити або (і) змінити поточне середовище muLISP перед продовженням виконання програми. Для виходу з зупинки й відновлення роботи програми наберіть ( RETURN ) після знаку долара;
- Abort (переривання): перериває виконання програми, присвоює формальним параметрам, розміщеним в стеку змінних, початкові значення й повертає керування на поточний рівень циклу "read-eval-print". Визначення функцій, значення властивостей та глобальних змінних залишаються незмінними;
- Тop-level (верхній рівень): перериває виконання програми,
Loading...

 
 

Цікаве