Glossary

Материал из pyhrol.ru
(перенаправлено с «Терминология»)
Перейти к: навигация, поиск

Общепринятые термины, наделенные особым сокральным смыслом в рамках проекта Pyhrol собраны в единый список на этой странице. В идеале трактовку всех остальных терминов следует искать в Сети, либо полагаться на собственные знания.

Содержание


Зондирование

Способ вычисления сигнатуры в режиме исполнения (не в режиме компиляции).

Допустим, некий интерпретатор аккумулирует всю информацию об аргументах и возвращаемых значениях в классе Signature и его задача заключается в вызове всем известной функции open. Зондирующий псевдокод будет выглядеть примерно так:

void pyopen(Signature &s)
{
//1. объявление параметров (аргументов и возвращаемых значений)
char *pathname;
int flags;
int retval;
 
//2. регистрация параметров
s.add_argument(&pathname);
s.add_argument(&flags);
s.add_retval(&retval);
if (s.probe())
{
return;
}
else()
{
s.parse();
}
 
//3. выполнение
retval = open(pathname, flags);
}

Функция pyopen вызывается единожды при инициализации интерпретатора со значением s.probe() = true, а потому код ниже комментария 3 не выполняется. Объект s ответственен за то, чтобы сохранить информацию о параметрах вызываемой функции и передать ее, например, в справку. Как только интерпретатор получает команду, он снова вызывает pyopen со значением s.probe() = false и тогда метод Signature::parse проверяет соответствие количества и типов аргументов команды реальным аргументам pathname и flags и инициализирует их. По выходу из функции получить значение по адресу retval уже не удастся, поэтому можно предположить выполнение некого метода Signature::copy_results непосредственно перед выходом.

В проекте Pyhrol область кода под комментарием 2 максимально автоматизирована макросами, которые собирают типы, имена, значения по умолчанию всех параметров а также позволяют перегружать вызываемые функции. Особое внимание уделено обработке ошибок и защите от неверного использования.

Attention.png Очевидная опасность такого подхода заключается в том, что в области над комментарием 2 может располагаться код, влияющий на ход программы и тогда нежелательных побочных эффектов избежать не удастся. Поэтому зондирование по умолчанию отключено и включается переменной окружения __PY_HACK_SIGNATURES при условии правильной реализации (!) питонизирующих функций и методов

Кортеж

Буквальный перевод с английского термина tuple. В python-е 2.7.6 этот термин вводится отсюда, в 3.3 дано более четкое определение

Поле

Переменная, связанная с классом или объектом, то же, что data member. Или член класса, не являющийся методом. Термин в большей степени относится C++. В Python-е подобные переменные принято называть атрибутами

Питонизация

Функции и методы, которые можно вызвать, а также открытые члены классов, которые можно получить или изменить непосредственно из python-а являются питонизированными. Ессно, на них накладываются определенные ограничения и для их работы используется некий промежуточный код. Процесс написания оного и есть питонизация. Методы и функции, являющиеся конечной целью написания питонизирующего кода являются питонизируемыми.

Например, фраза "для питонизируемой функции open пишется питонизирующая функция pyopen" означает, что open некая C-функция не имеющая представления о таком языке как python, а pyopen -- ее оболочка, которая трансформирует python-аргументы в типы данных, понятные open, обрабатывает исключения, если они в ней возникают и преобразовывает возвращаемое ею значение к типу, понятному python-у

Питонизированный

Метод или функция с сигнатурой:

void function(pyhrol::Tuples &);

или любой другой сигнатурой из списка, а также класс, наследующий от одного или нескольких потомков TypeBase

Питонизируемый

Любая функция или метод, вызываемые из питонизированной функции или метода, а также класс, являющийся шаблоном для TypeBase

Питонизирующий

то же, что и Питонизированный

Пространства имён

Варианты
Просмотры
Действия
Навигация