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 Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, отсутствиС ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π»ΠΈΡˆΠ½ΠΈΡ… стадий Ρ€Π°Π·Π±ΠΎΡ€Π° (большиС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru