Inlinec – новы спосаб выкарыстання Сі-кода ў Python-скрыптах.

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

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

# coding: inlinec
from inlinec import inlinec

@inlinec
def test():
#уключыць
void test() {
printf("Hello, world");
}

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

Крыніца: opennet.ru

Дадаць каментар