Ini adalah plugin untuk GCC, yang menghubungkan libpython, dan (saya harap) memungkinkan Anda untuk memohon skrip python sewenang -wenang dari dalam kompiler. Tujuannya adalah untuk memungkinkan Anda menulis plugin GCC di Python.
Plugin ini adalah perangkat lunak gratis, dilisensikan di bawah GPLV3 (atau lebih baru).
Itu masih pada "tahap bukti-konsep eksperimental"; Harapkan crash dan traceback (saya baru mengenal GCC, dan saya mungkin salah paham).
Sudah mungkin untuk menggunakan ini untuk menambahkan kesalahan/peringatan kompiler tambahan, misalnya pemeriksaan khusus domain, atau analisis statis. Salah satu tujuan saya untuk ini adalah untuk "mengajar" GCC tentang kesalahan umum yang dilakukan orang ketika menulis ekstensi untuk CPYTHON, tetapi dapat digunakan misalnya untuk mengajar GCC tentang semantik penghitungan referensi GTK, atau tentang mengunci kernel Linux, atau tentang keselamatan sinyal di API.
Gagasan lain termasuk visualisasi struktur kode. Diberikan instance gcc.CFG , gccutils.render_to_dot(cfg) dan gccutils.invoke_dot(cfg) akan menggunakan GraphViz dan EOG untuk memplot visualisasi yang berguna dari grafik aliran kontrol, yang menunjukkan kode sumber yang diselingi dengan representasi internal GIMPLE GCC.
Dokumentasi dapat dilihat di:
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev atau gcc-plugin-devel .Saya menggunakan:
membuat
untuk membangun plugin dan menjalankan tes
Anda juga dapat menggunakan:
membuat demo
untuk menunjukkan kesalahan kompiler baru.
Pengembangan telah ada di x86_64 dan saya tidak tahu sejauh mana itu akan kompatibel dengan arsitektur lainnya.
Belum ada pemasang. Secara teori Anda harus dapat menambahkan argumen ini ke doa GCC:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py Other_args
Dan menjalankan skrip Anda saat plugin dimulai.
Plugin secara otomatis menambahkan jalur absolut ke direktori sendiri ke ujung sys.path -nya, sehingga dapat menemukan modul dukungan, seperti gccutils.py dan libcpychecker.
API yang tepat masih dalam fluks; Anda saat ini dapat terhubung ke acara dengan mendaftarkan panggilan balik misalnya untuk dipanggil untuk setiap fungsi di sumber di berbagai operan.
Ini memperlihatkan berbagai jenis GCC sebagai objek Python, dalam modul "GCC". Anda dapat melihat API dengan menjalankan:
Impor GCC Bantuan (GCC)
dari dalam skrip.
Ini saat ini tiga proyek dalam satu:
gcc-python-* : Plugin untuk GCC. Entrypoint ( init_plugin ) ada di gcc-python.c .
libcpychecker dan cpychecker.py : pustaka python (dan skrip driver), ditulis untuk plugin, di mana saya membangun peringatan kompiler baru untuk membantu orang menemukan bug dalam kode ekstensi cpython.
cpybuilder : Modul praktis untuk menghasilkan kode sumber C secara program untuk ekstensi cpython. Saya menggunakan ini untuk menghasilkan bagian -bagian dari plugin GCC, dan juga di swadaya untuk skrip cpychecker. (Awalnya saya berusaha menggunakan Cython untuk yang pertama, tetapi membungkus hierarki tipe "pohon" membutuhkan lebih banyak kontrol program)
Gaya pengkodean: Python dan GCC masing-masing memiliki panduan gaya pengkodean sendiri untuk C. Saya telah memilih untuk mengikuti Python (PEP-7), seperti yang saya sukai (meskipun kode saya memang berantakan di beberapa tempat).
Anda akan menemukan dokumentasi API dalam direktori "Docs", yang ditulis dalam format restrukturisasi (seperti file ini, pada kenyataannya). Jika Anda telah menginstal Sphinx, Anda dapat meregenerasi dokumen ini menggunakan:
buat html
Dalam direktori docs . Sphinx adalah paket python-sphinx pada kotak Fedora/Rhel.
Dokumentasi yang lebih terperinci dapat dilihat di dalam docs/getting-involved.rst .
Menikmati! David Malcolm <[email protected]>