MaxEdu.ru
» » » Использование Prolog совместно с другими ЯП
Вернуться назад

Использование Prolog совместно с другими ЯП

Понятие Dll.
Вспомним процесс программирования в DOS. Преобразование исходного текста в машинный код включал в себя 2 процесса: компиляцию и линковку. Во время линковки в код программы помещались не только объявления функций и процедур, но и их полный код.
В многозадачной среде подобный подход был бы весьма расточителен, так как огромное количество функций, отвечающих за прорисовку элементов пользовательского интерфейса, за обращение к системным ресурсам и т.п. дублировались в каждой программе. В качестве решения возникшей проблемы была предложена концепция динамической компоновки (см. рис. 1).
DLL (библиотека динамической связи) – файл, выступающий в качестве коллективной библиотеки предикатов, которые могут быть использованы одновременно в нескольких приложениях. Prolog способен генерировать DLL, включать DLL статически и загружать динамически.
Вызов в программе на VP процедур и функций на других языках.
Прежде чем вызвать процедуры и функции на других языках их нужно объявить как внешний предикат, упомянув, что он осуществляется на другом языке. При этом необходимо знать количество и порядок входных параметров:
GLOBAL PREDICATES
procedure add(integer A, integer B, integer C) – (i,i,o) language pascal
Замечание: обратите внимание, что в VP явно указывается язык процедуры
Передача входных/выходных параметров и возвращение значений.
Размер входных параметров определен однозначно и зависит только от объявленного типа. Выходной параметр – 32 битный указатель на область памяти, где хранится выходное значение.
Следует отметить, что функции на Pascal не могут возвращать значения в формате чисел с плавающей точкой, а функции C - структуры (но могут, конечно, возвращать указатели на них).
Многочисленные декларации.
Предикат VP может иметь различные комбинации входных/выходных параметров, и для каждой из них необходима отдельная процедура. Идентификаторы, используемые в Prolog должны совпадать с идентификаторами в библиотеке + суффикс _X, где X – целое число (порядковый номер процедуры, нумерация начинается с 0). Если существует только один вариант, то суффикс отсутствует. Рассмотрим пример:
GLOBAL PREDICATES
subtraction(integer, integer, integer) – (i,i,o), (i,o,i), (o,i,i), (i,i,i) language C
change(integer, integer) – (i,o) language C
GOAL
subtraction(2,2,X), write(“2-2=”,X), nl,
subtraction(2,Y,5), write(“2-5=”,Y), nl,
subtraction(Z,5,4), write(“5-4=”,X), nl,
subtraction(2,2,5), write(“2-2 равно 5”), nl,
change(5, Ch), write(Ch).
Модуль, связываемый с этой программой должен содержать процедуры:
subtraction_0 (int x, int y, int *z)
{*z=x-y;}
subtraction_1 (int x, int *y, int z)
{*y=x-z;}
subtraction_2 (int *x, int y, int z)
{*x=y-z;}
subtraction_3 (int x, int y, int z)
{if ((x-y)!=z)RUN_Fail();}
change(int a, int *b)
{*b=a;}
Примечание: если процедура написана на языке C, то параметры заносятся в стек в обратном порядке (после возврата значений указатель автоматически корректируется VP), в противном случае, параметры заносятся в стек в нормальном порядке (см. таблицу 1).
Форматы объектных файлов в Win32.
Под Win32 используется 2 формата объектных файлов: OMF (объектно-модульный формат – используется, например, BorlandC++ ) и COFF (Общий объектно-файловый формат, используется, например, VisualC++ ).
1. При использовании файла в формате OMF имя предиката должно совпадать с именем функции.
2. При использовании файла в формате COFF, к имени предиката добавляется знак подчеркивания, и после символа @ указывается количество байт, добавленных в стек (например, если предикат nameимеет 2 целых аргумента, то он должен быть объявлен как _name@8 (см. таблицу 1)).

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать полную версию
Рефераты по информатике Понятие Dll. Вспомним процесс программирования в DOS. Преобразование исходного текста в машинный код включал в себя 2 процесса: компиляцию и
Оценок: 231 (Средняя 5 из 5)

Специалисты RetsCorp работают в digital-сфере более 7 лет. За это время мы разработали более 500+ успешных проектов. Основываясь на своем опыте и знании рынка, мы с уверенностью можем сказать, что будет работать, а что — нет. Заказывая создание лендинга для бизнеса в нашей студии, вы получаете работающие решения, необходимые именно вашему бизнесу.

Сотрудничая с нами, вы будете не клиентом, а нашим партнером. Благодаря этому мы будем развивать ваш бизнес как собственный. Мы так же как и вы заинтересованы в успехе проекта, поскольку ваша успешность будет нашей рекламой.

© 2014 - 2022 MaxEdu.ru