19.09.2020

Inlinec — новый способ использования Си-кода в Python-скриптах


Проектом inlinec предложен новый способ inline-интеграции кода на языке Си в скрипты на языке Python. Функции на языке Си определяются непосредственно в одном файле с кодом на языке Python, выделяясь декоратором «@inlinec». Сводный скрипт выполняется как есть интерпретатором сpython и разбирается с использованием предоставляемого в Python механизма кодеков, дающего возможность подключить парсер для преобразования скрипта перед его разбором интерпретатором (как правило, модуль codecs применяется для прозрачной перекодировки текста, но позволяет и произвольным образом трансформировать содержимое скрипта).

Парсер подключается в виде модуля («from inlinec import inlinec»), который выполняет первичную обработку и на лету переводит определения Си-функций, выделенных при помощи аннотаций @inlinec, в ctypes-обвязки и заменяет тело Си-функции на вызов этих обвязок. После подобного преобразования интерпретатор Python получает уже корректный преобразованный исходный текст скрипта, Си-функции в котором вызываются при помощи ctypes. Похожий метод также применяется в проекте Pyxl4, который позволяет перемешивать в одном файле HTML и Python-код.

     # coding: inlinec     from inlinec import inlinec       @inlinec     def test():         #include‹stdio.h›         void test() {             printf("Hello, world");         }    

Разработка пока преподносится как экспериментальный прототип, в котором отмечаются такие недоработки, как отсутствие поддержки передачи в функцию указателей (кроме строк), необходимость запуска «gcc -E» для препроцессинга кода, сохранение промежуточных *.so, *.o и *.c файлов в текущем каталоге, отсутствие кеширования преобразованного варианта и выполнение лишних стадий разбора (большие задержки при каждом запуске).

Источник: https://www.opennet.ru/opennews/art.shtml?num=52306

Добавить комментарий