นี่คือปลั๊กอินสำหรับ GCC ซึ่งเชื่อมโยงกับ libpython และ (ฉันหวังว่า) ช่วยให้คุณเรียกใช้สคริปต์ Python โดยพลการจากภายในคอมไพเลอร์ จุดมุ่งหมายคืออนุญาตให้คุณเขียนปลั๊กอิน GCC ใน Python
ปลั๊กอินเป็นซอฟต์แวร์ฟรีที่ได้รับอนุญาตภายใต้ GPLV3 (หรือใหม่กว่า)
มันยังคงอยู่ที่ "ขั้นตอนการพิสูจน์แนวคิดเชิงทดลอง"; คาดว่าจะเกิดปัญหาและการตีกลับ (ฉันยังใหม่กับภายในของ GCC และฉันอาจมีสิ่งที่เข้าใจผิด)
เป็นไปได้แล้วที่จะใช้สิ่งนี้เพื่อเพิ่มข้อผิดพลาด/คำเตือนของคอมไพเลอร์เพิ่มเติมเช่นการตรวจสอบเฉพาะโดเมนหรือการวิเคราะห์แบบคงที่ หนึ่งในเป้าหมายของฉันสำหรับเรื่องนี้คือการ "สอน" GCC เกี่ยวกับความผิดพลาดทั่วไปที่ผู้คนทำเมื่อเขียนส่วนขยายสำหรับ cpython แต่สามารถใช้เช่นเพื่อสอน GCC เกี่ยวกับความหมายการนับการอ้างอิงของ GTK หรือเกี่ยวกับการล็อคในเคอร์เนล Linux
แนวคิดอื่น ๆ รวมถึงการสร้างภาพข้อมูลของโครงสร้างรหัส ให้อินสแตนซ์ gcc.CFG , gccutils.render_to_dot(cfg) และ gccutils.invoke_dot(cfg) จะใช้ graphviz และ EOG เพื่อพล็อตการสร้างภาพกราฟควบคุมการไหล GIMPLE มีประโยชน์
เอกสารสามารถดูได้ที่:
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev หรือ gcc-plugin-develฉันใช้:
ทำ
เพื่อสร้างปลั๊กอินและเรียกใช้การทดสอบ
คุณสามารถใช้:
สาธิต
เพื่อแสดงข้อผิดพลาดของคอมไพเลอร์ใหม่
การพัฒนาอยู่ใน X86_64 และฉันไม่รู้ว่ามันจะเข้ากันได้กับสถาปัตยกรรมอื่น ๆ
ยังไม่มีตัวติดตั้ง ในทางทฤษฎีคุณควรจะสามารถเพิ่มอาร์กิวเมนต์เหล่านี้ลงในการเรียกใช้ GCC:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py other_args
และให้มันเรียกใช้สคริปต์ของคุณเมื่อปลั๊กอินเริ่มต้นขึ้น
ปลั๊กอินจะเพิ่มเส้นทางสัมบูรณ์ไปยังไดเรกทอรีของตัวเองโดยอัตโนมัติไปยังจุดสิ้นสุดของ sys.path เพื่อให้สามารถค้นหาโมดูลสนับสนุนเช่น gccutils.py และ libcpychecker
API ที่แน่นอนยังคงอยู่ในฟลักซ์ ขณะนี้คุณสามารถเชื่อมต่อกับกิจกรรมได้โดยการลงทะเบียนการโทรกลับเช่นที่จะเรียกใช้สำหรับแต่ละฟังก์ชั่นในแหล่งที่มาที่ผ่านที่แตกต่างกัน
มันเปิดเผยประเภทต่าง ๆ ของ GCC เป็นวัตถุ Python ภายในโมดูล "GCC" คุณสามารถดู API ได้โดยใช้:
นำเข้า GCC ช่วย (GCC)
จากภายในสคริปต์
ปัจจุบันเป็นสามโครงการในหนึ่งเดียว:
gcc-python-* : ปลั๊กอินสำหรับ GCC จุดเข้า ( init_plugin ) อยู่ใน gcc-python.c
libcpychecker และ cpychecker.py : A Python Library (และสคริปต์ไดรเวอร์) เขียนขึ้นสำหรับปลั๊กอินซึ่งฉันกำลังสร้างคำเตือนคอมไพเลอร์ใหม่เพื่อช่วยให้ผู้คนค้นหาข้อบกพร่องในรหัสส่วนขยาย CPython
cpybuilder : โมดูลที่มีประโยชน์สำหรับการสร้างโปรแกรม C โปรแกรมสำหรับส่วนขยาย cpython ฉันใช้สิ่งนี้ทั้งสองเพื่อสร้างชิ้นส่วนของปลั๊กอิน GCC และใน SelfTests สำหรับสคริปต์ Cpychecker (ตอนแรกฉันพยายามใช้ Cython สำหรับอดีต แต่การห่อลำดับชั้นประเภท "ต้นไม้" จำเป็นต้องมีการควบคุมโปรแกรมมากขึ้น)
รูปแบบการเข้ารหัส: Python และ GCC แต่ละคนมีคู่มือสไตล์การเข้ารหัสของตัวเองสำหรับ C. ฉันเลือกที่จะติดตาม Python's (PEP-7) ตามที่ฉันชอบ (แม้ว่ารหัสของฉันจะเป็นเรื่องยุ่งเหยิงในสถานที่)
คุณจะพบเอกสาร API ภายในไดเรกทอรี "เอกสาร" ที่เขียนในรูปแบบการปรับโครงสร้างข้อความ (เช่นเดียวกับไฟล์นี้ในความเป็นจริง) หากคุณติดตั้งสฟิงซ์คุณสามารถสร้างเอกสารเหล่านี้ใหม่โดยใช้:
ทำ HTML
ภายในไดเรกทอรี docs Sphinx เป็นแพ็คเกจ python-sphinx บนกล่อง Fedora/Rhel
เอกสารรายละเอียดเพิ่มเติมสามารถดูได้ภายใน docs/getting-involved.rst
สนุก! David Malcolm <[email protected]>