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

Candellmans

Мастер
Сообщения
7,983
Реакции
8,505
Inlinec - новый способ использования Си-кода в Python-скриптах
4.02.20
Проектом inlinec предложен новый способ inline-интеграции кода на языке Си в скрипты на языке Python. Функции на языке Си определяются непосредственно в одном файле с кодом на языке Python, выделяясь декоратором "@inlinec". Сводный скрипт выполняется как есть интерпретатором сpython и разбирается с использованием предоставляемого в Python механизма кодеков, дающего возможность подключить парсер для преобразования скрипта перед его разбором интерпретатором (как правило, модуль codecs применяется для прозрачной перекодировки текста, но позволяет и произвольным образом трансформировать содержимое скрипта).

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

Python:
   # coding: inlinec
   from inlinec import inlinec
   @inlinec
   def test():

       #include<stdio.h>

       void test() {
           printf("Hello, world");
       }

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

OpenNet
 
Последнее редактирование модератором:
Назад
Сверху Снизу