Головна |
Мова предикатного програмування P (Predicate programming language) є універсальним і може використовуватися для розробки широкого класу програм. Щонайменше, цей клас включає програми, що розробляються зазвичай на мові ФОРТРАН, для задач обчислювальної математики. З метою специфікації і реалізації програм для реактивних систем мову P розширено засобами для опису процесів, передачі повідомлень і породження процесів, що працюють паралельно з процесом-батьком. У меншій мірі мова P придатний для задач системного програмування, де зазвичай використовуються об'єктно-орієнтовані засоби, яких немає в ядрі мови P.
За сформованою класифікації мову P слід віднести до класу мов функціонального програмування. Мова P поєднує функціональний і операційний (предикатний) стилі записи алгоритмів і володіє значно більшою виразністю в порівнянні з чисто функціональними мовами. У цьому сенсі мова P ближче до мов логічного програмування. Однак на відміну від логічних мов процес обчислення програми на мові P реалізується логічним висновком, а явним виконанням, характерним для імперативних і функціональних мов.
Функціональний мова зручніше імперативного для розробки алгоритму. Однак отримання ефективної програми для функціональних мов проблематично навіть із застосуванням витонченої оптимізації в процесі трансляції. Тому після налагодження програми на функціональній мові для досягнення необхідної ефективності її доводиться переписувати на імперативний мовою. Приемущество технології предикатного програмування в тому, що вона є наскрізною: до предикатной програмі застосовується набір трансформацій з отриманням ефективної програми на імперативний розширенні мови P (див. Розд. 6.11), після чого програма може конвертуватися на будь-який з імперативних мов: C, C ++, ФОРТРАН і ін. Базовими трансформаціями є:
- Склеювання змінних, що реалізує заміну кількох змінних однієї;
- Заміна хвостовій рекурсії циклом;
- Підстановка визначення предиката на місце його виклику;
- Кодування структурних об'єктів низькорівневими структурами з використанням масивів і покажчиків.
За допомогою даних трансформацій можна отримати програму граничної ефективності, проте важко це зробити автоматично.
Мова предикатного програмування P вперше представлений в роботі [1]. Повний опис мови P дається в препринті [2]. Наступні модифікації і розширення мови ініційовані використанням мови для опису різних алгоритмів [3-5]. Введено кошти специфікації визначень предикатів у вигляді передумов і постусловіем. Є досвід використання мови P в якості мови публікації алгоритмів. Мова P розширено для специфікації і реалізації реактивних систем, які визначаються у вигляді сукупності взаємодіючих процесів [5]. Введено кошти зображення процесів, оператори прийому і посилки повідомлень, засоби динамічного породження процесів.
Всі попередні версії мови P по стилю були ближче до мов Паскаль і Модула-2. Остання версія мови P, представлена ??в даному описі, по синтаксису, набору операторів і операцій і інших особливостей істотно наближена до стилю мов типу C. Як наслідок, мова P стане більш комфортним для програмують на мовах C, C ++, Java, C #. Зміни синтаксису мови P стали причиною проведення серії серйозних модифікацій у всьому мовою. Певний вплив на нову версію мови P надав мову спеціфікаіцій PVS [7]. Введено алгебраїчні типи. Послідовності замінені списками.
Синтаксис описується на розширеному мовою Бекусовскіе нормальних форм (БНФ) з наступними особливостями:
- Термінальні символи виділені жирним шрифтом;
- [Фрагмент] - означає можливе відсутність в синтаксичному правилі укладеного в квадратні дужки фрагмента; фрагмент визначає послідовність термінальних і нетермінальних символів;
- (Фрагмент) * - визначає повторення фрагмента нуль або більше разів; круглі дужки можуть бути опущені, якщо фрагмент складається з одного символу;
- (Фрагмент) + - визначає повторення фрагмента один або більше разів;
- Запис виду [: CLASS:] позначає символ зазначеного класу; використовуються наступні класи символів:
alpha - буквений символ, що належить латинської або російській алфавітом; дозволяються великі і малі літери;
digit - цифра (0, 1, 2, 3, 4, 5, 6, 7, 8 або 9);
alnum - символ, що належить alpha або digit;
blank - пропуск чи табуляція;
xdigit - шістнадцяткова цифра (digit - заголовна або рядкова буква від A до F);
print - символ, для якого визначено накреслення (т. е. символ з alnum, blank або будь-якої іншої символ, який можна відобразити).
Система типів даних | Логічна і операційна семантика мови CCP | Семантика виклику предиката | оператор суперпозиції | умовний оператор | конструктор предиката | конструктор масиву | програма | Рекурсивні означення предикатів | однозначність предикатів |