Project er is een nieuwe manier voorgesteld voor inline-integratie van C-code in Python-scripts. C-functies worden gedefinieerd direct in één bestand met Python-code en worden gemarkeerd met de decorateur «@inlinec». Het samengevoegde script wordt uitgevoerd zoals het is door de interpreter spython en wordt geparsed met behulp van het mechanism dat Python biedt. , waarmee een parser kan worden aangesloten om het script te transformeren voordat het wordt geparsed door de interpreter (doorgaans wordt de codecs-module gebruikt voor transparante hercodering van tekst, maar het stelt ook in staat om de inhoud van het script op andere manieren te transformeren).
De parser wordt aangesloten als een module («from inlinec import inlinec»), die een initiële verwerking uitvoert en on-the-fly de definities van C-functies, gemarkeerd met de annotaties @inlinec, omzet in ctypes-wrappers en het lichaam van de C-functie vervangt door een aanroep van deze wrappers. Na een dergelijke transformatie ontvangt de Python-interpreter al de correct omgezette broncode van het script, waarin C-functies worden aangeroepen met behulp van . Een vergelijkbare methode wordt ook toegepast in het project , dat het mogelijk maakt om HTML en Python-code in één bestand te mengen.
# coding: inlinec
from inlinec import inlinec
@inlinec
def test():
#include<stdio.h>
void test() {
printf(«Hello, world»);
}
De ontwikkeling wordt voorlopig gepresenteerd als een experimenteel prototype, waarin tekortkomingen worden opgemerkt, zoals het ontbreken van ondersteuning voor het doorgeven van pointers aan de functie (behalve voor strings), de noodzaak om
«gcc -E» uit te voeren voor de preprocessie van de code, het opslaan van tussenliggende *.so, *.o en *.c bestanden in de huidige map, het ontbreken van caching van de omgezette variant en het uitvoeren van onnodige parse-stappen (grote vertragingen bij elke uitvoering).
Bron: opennet.ru
