Анонс ctyped 0.6.0 — ctypes на аннотациях типов
О новом инструменте, упрощающем работу с ctypes.
В прошлом году мне в голову пришла мысль, что неплохо было бы попробовать подружить
Тогда же я накидал прототип, подтвердивший предположение, что может получиться удобно. Однако дальше прототипа дело не двинулось.
И вот в прошлом месяце, в свободные выходные я заметил, что steampak перестала работать с последними версиями библиотеки Steam.
Обнаружив это, я решил, что неплохо было бы восстановить работоспособность библиотеки. Только вот тратить на это много времени не хотелось. Поэтому я потратил ещё больше времени, чтобы не тратить его в последующем: накидал новую библиотеку
Библиотека позволила не только быстро и удобно описывать Си-функции, но и немного повысить производительность
А теперь можно вызывать Си-функции, прямо как родные функции Питона:
Это, конечно, не всё, что умеет
Сейчас
Заметите ошибки, или захотите что-то добавить — приходите в репозиторий по указанной выше ссылке.
Приятной интеграции.
ctypes
(модуль стандартной библиотеки, позволяющий взаимодействовать с функциями из Си-библиотек) с аннотациями типов. На заметку
Поддержка аннотаций появилась ещё в начале серии 3 (PEP 3107), однако пользоваться этой машинерией стало относительно удобно, начиная с Питона 3.6.
Тогда же я накидал прототип, подтвердивший предположение, что может получиться удобно. Однако дальше прототипа дело не двинулось.
И вот в прошлом месяце, в свободные выходные я заметил, что steampak перестала работать с последними версиями библиотеки Steam.
На заметку
Обнаружив это, я решил, что неплохо было бы восстановить работоспособность библиотеки. Только вот тратить на это много времени не хотелось. Поэтому я потратил ещё больше времени, чтобы не тратить его в последующем: накидал новую библиотеку
ctyped
. Библиотека позволила не только быстро и удобно описывать Си-функции, но и немного повысить производительность
steampak
(за счёт сокращения количества функций-обёрток, а также отсутствия повторных привязок сигнатур). Посмотрим, как выглядит код для ctyped
:from ctyped.toolbox import Library
# Объявляем библиотеку.
# Для всех функций используем префикс mylib_.
lib = Library('mylib.so', prefix='mylib_')
# При помощи областей (scope) можем
# пакетно влиять на различные аспекты функций:
# выставлять префиксы, указывать битность целых и пр.
with lib.scope(int_bits=64):
# Описываем Си-функцию 'mylib_some_func', используя аннотации типов.
@lib.function(name='some_func')
def format_title(title: str, num: int) -> str:
...
# Осталось только привязать типы ctypes
# к описанным функциям (в нашем примере она одна).
lib.bind_types()
А теперь можно вызывать Си-функции, прямо как родные функции Питона:
formatted = format_title('Hello!', 2019)
Это, конечно, не всё, что умеет
ctyped
. Скажем, она предлагает возможность структурирования функций при помощи классов. Больше примеров использования можно подсмотреть в документации (англ.) и обёртке из steampak.Сейчас
ctyped
требует Python 3.6+ и тестируется только с .so библиотеками (под Linux). Есть многое, чему можно было бы её обучить: например, удобной работе со структурами. ctyped
разрабатывается открыто — https://github.com/idlesign/ctyped Заметите ошибки, или захотите что-то добавить — приходите в репозиторий по указанной выше ссылке.
Приятной интеграции.
Категории
Язык
Область
Интерпретатор
ЯП
Проект
Уровень
Аспект языка
На заметку
В разделе «События» можно узнать о надвигающихся событиях мира Python, а также поделиться своими. Если вы являетесь организатором встречи/конференции/спринта, зарегистрируйте это событие в указанном разделе, чтобы о нём узнали все желающие.