Как использовать код на С в 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 файлов в текущем каталоге, отсутствие кеширования преобразованного варианта и выполнение лишних стадий разбора (большие задержки при каждом запуске).

По материалам opennet.ru

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *