Inlinec - ένας νέος τρόπος χρήσης του κώδικα C σε σενάρια Python

έργο inlinec Μια νέα μέθοδος για την ενσωματωμένη ενσωμάτωση του κώδικα C σε σενάρια Python έχει προταθεί. Οι συναρτήσεις C ορίζονται απευθείας στο ίδιο αρχείο κώδικα Python, που επισημαίνεται από τον διακοσμητή "@inlinec". Το σενάριο σύνοψης εκτελείται ως έχει από τον διερμηνέα Python και αναλύεται χρησιμοποιώντας τον μηχανισμό που παρέχεται στην Python κωδικοποιητές, που καθιστά δυνατή τη σύνδεση ενός αναλυτή για τη μετατροπή του σεναρίου πριν από την ανάλυση του από τον διερμηνέα (κατά κανόνα, η ενότητα κωδικοποιητών χρησιμοποιείται για διαφανή διακωδικοποίηση κειμένου, αλλά σας επιτρέπει επίσης να μετασχηματίσετε αυθαίρετα τα περιεχόμενα του σεναρίου).

Ο αναλυτής συνδέεται ως λειτουργική μονάδα ("from inlinec import inlinec"), η οποία εκτελεί την αρχική επεξεργασία και μεταφράζει on-the-fly τους ορισμούς των συναρτήσεων C που επισημαίνονται χρησιμοποιώντας σχολιασμούς @inlinec σε δεσμεύσεις ctypes και αντικαθιστά το σώμα της συνάρτησης C με ένα κάλεσμα σε αυτές τις δεσμεύσεις. Μετά από έναν τέτοιο μετασχηματισμό, ο διερμηνέας Python λαμβάνει το σωστό μετατρεπόμενο κείμενο πηγής του σεναρίου, στο οποίο οι συναρτήσεις C καλούνται χρησιμοποιώντας ctypes. Μια παρόμοια μέθοδος χρησιμοποιείται επίσης στο έργο Pyxl4, το οποίο σας επιτρέπει να αναμίξετε κώδικα HTML και Python σε ένα αρχείο.

# κωδικοποίηση: inlinec
από inlinec εισαγωγή inlinec

@inlinec
Def test():
#περιλαμβάνω
void test() {
printf("Γεια, κόσμος");
}

Η ανάπτυξη παρουσιάζεται μέχρι στιγμής ως πειραματικό πρωτότυπο, το οποίο περιέχει αδυναμίες όπως η έλλειψη υποστήριξης για τη μετάβαση δεικτών (εκτός συμβολοσειρών) στη συνάρτηση, την ανάγκη εκτέλεσης
"gcc -E" για προεπεξεργασία κώδικα, αποθήκευση ενδιάμεσων αρχείων *.so, *.o και *.c στον τρέχοντα κατάλογο, μη προσωρινή αποθήκευση της μετατρεπόμενης έκδοσης και εκτέλεση περιττών σταδίων ανάλυσης (μεγάλες καθυστερήσεις κάθε φορά που εκτελείται).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο