Inlinec - isang bagong paraan upang magamit ang C code sa mga script ng Python

proyekto inlinec Ang isang bagong paraan para sa inline na pagsasama ng C code sa mga script ng Python ay iminungkahi. Direktang tinukoy ang mga function ng C sa parehong Python code file, na naka-highlight ng "@inlinec" na dekorador. Ang script ng buod ay isinagawa tulad ng ginagawa ng interpreter ng Python at na-parse gamit ang mekanismong ibinigay sa Python mga codec, na ginagawang posible na ikonekta ang isang parser upang ibahin ang anyo ng script bago ito i-parse ng interpreter (bilang panuntunan, ang codecs module ay ginagamit para sa transparent na transcoding ng teksto, ngunit pinapayagan ka rin nitong ibahin ang anyo ng mga nilalaman ng script).

Ang parser ay konektado bilang isang module (β€œmula sa inlinec import inlinec”), na nagsasagawa ng paunang pagproseso at on-the-fly na isinasalin ang mga kahulugan ng mga function ng C na naka-highlight gamit ang @inlinec annotation sa mga ctypes binding at pinapalitan ang katawan ng C function ng isang tawag sa mga pagkakatali na ito. Pagkatapos ng naturang pagbabago, natatanggap ng Python interpreter ang tamang na-convert na source text ng script, kung saan ang C function ay tinatawag gamit ang ctypes. Ang isang katulad na pamamaraan ay ginagamit din sa proyekto Pyxl4, na nagbibigay-daan sa iyong paghaluin ang HTML at Python code sa isang file.

# coding: inlinec
mula sa inlinec import inlinec

@inlinec
def test():
# isama
void test() {
printf("Kumusta, mundo");
}

Ang pag-unlad ay ipinakita sa ngayon bilang isang pang-eksperimentong prototype, na naglalaman ng mga pagkukulang tulad ng kakulangan ng suporta para sa pagpasa ng mga pointer (maliban sa mga string) sa function, ang pangangailangan na tumakbo
"gcc -E" para sa code preprocessing, pag-save ng mga intermediate *.so, *.o at *.c na mga file sa kasalukuyang direktoryo, hindi pag-cache sa na-convert na bersyon at pagsasagawa ng mga hindi kinakailangang yugto ng pag-parse (mahabang pagkaantala sa tuwing tatakbo ito).

Pinagmulan: opennet.ru

Magdagdag ng komento