W Cat - Язык программирования Euphoria. Справочное руководство
- Название:Язык программирования Euphoria. Справочное руководство
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
W Cat - Язык программирования Euphoria. Справочное руководство краткое содержание
Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».
Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.
[Материал из Википедии]
Язык программирования Euphoria. Справочное руководство - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
-- int32 равно 37 + 256*1 = 293
См. также:
int_to_bytes, bits_to_int, peek, peek4s, peek4u, poke
...
от C до D
call
Синтаксис:
call(a)
Описание:
Вызывает подпрограмму на машинном языке, участок памяти с кодом которой начинается по адресу a. Подпрограмма должна запомнить содержимое всех регистров, которые она использует, а затем восстановить их в первоначальное состояние. Для обратной передачи управления интерпретатору Euphoria в этой подпрограмме должна быть предусмотрена инструкция RET (#C3).
Комментарии:
Вы можете подготовить участок памяти для подпрограммы и затем по этому адресу разместить байты машинного кода. Вы можете подготовить другие участки памяти для данных и параметров, которыми машинный код может оперировать. Адреса этих других участков могут быть размещены в машинном коде.
Пример программы:
demo\callmach.e x
См. также:
allocate, free, peek, poke, poke4, c_proc, define_c_proc
call_back
Платформа:
WIN32, Linux, FreeBS D
Синтаксис:
include dll.e
a = call_back(i)
или
a = call_back({i1, i})
Описание:
Выдаёт машинный адрес для Euphoria-подпрограммы по её идентификатору (номеру)i. Этот адрес может затем использоваться или Windows, или внешней функцией Си (из динамически подгружаемой библиотеки (.dll) Windows или общей библиотеки (.so) Linux/FreeBSD) как 32-битный "обратный" адрес для вызова вашей Euphoria-подпрограммы. Под Windows вы можете также задать i1, доопределив тем самым формат (соглашение о форме) вызова Си для вашей подпрограммы. Если i1 записано как '+', будет применён формат cdecl. По умолчанию применяется формат stdcall. На платформах Linux и FreeBSD следует использовать только первую форму (без i1), так как там, в отличие от Windows, действует лишь стандартный формат, stdcall.
Комментарии:
Вы можете установить столько "обратных" подпрограмм, сколько вам нужно, но все они должны быть Euphoria-функциями (или типами) с числом аргументов от 0 до 9. Если ваша подпрограмма не расчитана на выдачу какого-то результата (являлась бы фактически процедурой), просто (скажем так) задайте return 0, а вызывающая функция Си может игнорировать результат.
Когда ваша подпрограмма вызвана, все аргументы будут 32-битными числами без знака (положительными), поэтому вы должны объявить каждый аргумент в вашей подпрограмме как atom, независимо от вашего желания устроить более жесткий контроль. Ваша подпрограмма должна выдавать 32-битную целочисленную величину.
Вы можете также использовать адрес обратного вызова, чтобы задать подпрограмму Euphoria в качестве обработчика исключения в функции signal() под Linux/FreeBSD, когда, например, вам необходимо принять сигнал SIGTERM и произвести аккуратное завершение вашей программы. Да, действительно, иногда некоторые серверы Web выдают сигнал SIGTERM тому процессу CGI, который захватил слишком много машинного времени, и ваша программа должна быть готовой к такому повороту событий.
Подпрограмма обратного вызова, использующая соглашение cdecl и выдающая результат с плавающей точкой, может не работать с exw. Это происходит из-за особенностей компилятора Watcom C (с ним строится exw), который в формате cdecl нестандартным образом обходится с результатами, имеющими тип с плавающей точкой.
Пример программы:
demo\win32\window.exw, demo\linux\qsort.ex u
См. также:
routine_id, platform_r.htm
c_func
Платформа:
WIN32, Linux, FreeBS D
Синтаксис:
x = c_func(i, s)
Описание:
Вызывает Си-функцию, или функцию машинного кода, или транслированную/ компилированную функцию Euphoria, имеющую идентификатор (номер) функции i. Аргумент i должен быть разрешённым номером, выданным функцией define_c_func(). Аргумент s является рядом длины n, содержащим значения аргументов занумерованной функции, где n - число аргументов, требуемых функцией номер i. В переменной x будет содержаться результат, выданный Си-функцией.
Комментарии:
Если Си-функция не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.
Если в качестве аргумента вы подаёте величину, которая содержит дробную часть, в то время как Си-функция ожидает целочисленный тип Си, аргумент будет округлен в сторону нуля, т.е. 5.9 будет подано как 5, а -5.9 будет подано как -5.
Функция Си может входить в состав библиотеки .dll или .so, созданной транслятором с Euphoria на Си. В этом случае выдаваемая ею величина могла бы быть типа атом или ряд Euphoria. Но функции Си и функции машинного кода могут выдавать только целочисленные величины или, в более общем случае, атомы (числа с плавающей точкой по стандарту IEEE).
Пример:
atom user32, hwnd, ps, hdc
integer BeginPaint
-- открыть user32.dll - она содержит Си-функцию BeginPaint
user32 = open_dll("user32.dll")
-- Си-функция BeginPaint принимает аргументы типа C int и
-- типа C pointer, и выдаёт величину типа C int в качестве результата:
BeginPaint = define_c_func(user32, "BeginPaint",
{C_INT, C_POINTER}, C_INT)
-- вызвать BeginPaint, подавая hwnd и ps в качестве аргументов,
-- присвоить результат hdc:
hdc = c_func(BeginPaint, {hwnd, ps})
См. также:
c_proc, define_c_func, open_dll, platform_r.htm
c_proc
Платформа:
WIN32, Linux, FreeBS D
Синтаксис:
c_proc(i, s)
Описание:
Вызывает Си-функцию или процедуру машинного кода, используя идентификатор (номер)процедуры i. Аргумент i должен быть разрешенным идентификатором процедуры, выданным функцией define_c_proc(). Аргумент s является рядом длины n, содержащим величины аргументов вызываемой Си-функции (процедуры), где n - число аргументов, требуемых Си-функцией (процедурой).
Комментарии:
Если Си-функция не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.
Если в качестве аргумента вы подаёте величину, которая содержит дробную часть, в то время как Си-функция ожидает целочисленный тип Си, аргумент будет округлен в сторону нуля, т.е. 5.9 будет подано как 5, а -5.9 будет подано как -5.
Функция Си может входить в состав библиотеки .dll или .so, созданной транслятором с Euphoria на Си.
Пример:
atom user32, hwnd, rect
integer GetClientRect
-- открыть user32.dll - здесь содержится Си-функция GetClientRect
user32 = open_dll("user32.dll")
-- GetClientRect - это Си-функция типа VOID, у которой два аргумента - типа C int
-- и типа C pointer:
GetClientRect = define_c_proc(user32, "GetClientRect",
{C_INT, C_POINTER})
-- подать hwnd и rect в качестве аргументов
c_proc(GetClientRect, {hwnd, rect})
См. также:
c_func, call, define_c_proc, open_dll, platform_r.htm
call_func
Синтаксис:
x = call_func(i, s)
Описание:
Вызывает определенную программистом Euphoria-функцию с идентификатором (номером)подпрограммы i. Аргумент i должен быть разрешенным идентификатором (номером), выданным routine_id(). Аргумент s является рядом длины n, содержащим аргументы занумерованной функции, где n - число аргументов, требуемых функцией номер i. Переменная x будет содержать результат, выданный функцией номер i.
Читать дальшеИнтервал:
Закладка: