ftnlf

Work Notes 2022
Login

Планы по внедрению "легких" Фортран-массивов. Унификация и упрощение API.

О метаданных и контроле: проблему наследственных проверок предлагается решить следующим образом.

В реестр добавляются "классовые" таблицы для проверок метатаблиц входящих данных. Их ключами являются метатаблицы для соответствующих типов ("классов") массивов, элементами -- true. Например, таблицы могут соответствовать "полным" и "легким" массивам. Для проверки isA(val, class) достаточно найти class[getmetatable(val)]. Для ускорения "классовые" таблицы можно хранить по ссылке и/или по имени. Вместо "наследования" получаем проверку интерфейса.

О полных и легких массивах.

Текущие массивы являются полными. Предлагается ввести легкие массивы, содержащие в себе userdata из c_ptr на массив, выделенный средствами Фортрана (!), и его размер. Для легких массивов обязательной является операция "очистки", которая записывает NULL в c_ptr, чтобы избежать дальнейшего доступа по "повисшему" указателю.

Необходимо как минимум ввести классовые таблицы для полных и легких массивов, исходя из разной их структуры.

NB: Легкие массивы не будут гарантированно работать из-за особенностей семантики Фортран.

Единое API для работы с указателями

Нужна функция, которая бы получала индекс UD в стеке, проверяла бы метатаблицу на соответствие (см. выше -- если нужно), далее определяла бы тип хранения и в зависимости от него извлекала Фортран-указатель.

Переписать всё через неё.