کوکینل (نرم افزار)
کوکینل (به انگلیسی Coccinelle) که به معنای کفشدوزک در زبان فرانسوی است، یک ابزار متنباز برای مطابقت و تبدیل کد منبع برنامههای نوشته شده به زبان برنامهنویسی C است.
انتشار پایدار | 1.1.0[۱]
/ ۲۵ فوریه ۲۰۲۱ |
---|---|
مخزن | |
نوشتهشده با | OCaml and Python |
نوع | Static program analysis |
مجوز | GPLv2 |
وبگاه | coccinelle |
کاربرد[ویرایش]
کوکینل ابتدا برای کمک به تکامل هسته لینوکس مورد استفاده قرار گرفت و پشتیبانی برای تغییرات در واسطهای برنامهنویسی کتابخانه (APIها) مانند تغییر نام یک تابع، افزودن آرگومان تابعی که مقدار آن به نوعی وابسته به زمینه است، و سازماندهی مجدد یک ساختار داده را فراهم میکند.
این ابزار همچنین میتواند برای یافتن الگوهای برنامهنویسی معیوب در کد (یعنی بخشهای کدی که با احتمال بالا اشتباه هستند مانند اشارهگر NULL ممکن است) بدون تبدیل آنها استفاده شود. بنابراین نقش کوکینل به ابزارهای تحلیل ایستای کد نزدیک است. نمونههایی از این کاربرد توسط ابزار Herodotos که پیگیری هشدارهای تولید شده توسط کوکینل را انجام میدهد، ارائه شدهاند.
پشتیبانی برای کوکینل توسط IRILL فراهم شده است. تأمین مالی توسعه این ابزار توسط آژانس ملی تحقیقات فرانسه (ANR)، شورای تحقیقات فناوری و علوم تولید دانمارک، و INRIA انجام شده است.
کد منبع کوکینل تحت نسخه 2 مجوز عمومی همگانی گنو (GPL) منتشر شده است.
زبان وصله معنایی[ویرایش]
کد منبعی که قرار است تطبیق داده شود یا جایگزین شود، با استفاده از سینتکس "وصله معنایی" که بر اساس سینتکس وصله است، مشخص میشود. الگوی زبان وصله معنایی (SmPL) به یک تفاوت متحد با اعلانهای شبیه به زبان C شباهت دارد.
مثال[ویرایش]
@@
expression lock, flags;
expression urb;
@@
spin_lock_irqsave(lock, flags);
<...
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_ATOMIC)
...>
spin_unlock_irqrestore(lock, flags);
@@
expression urb;
@@
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_KERNEL)
منابع[ویرایش]
- "Coccinelle: A Program Matching and Transformation Tool for Systems Code". coccinelle.gitlabpages.inria.fr. Retrieved 2021-03-09.
- Palix, Nicolas; Lawall, Julia; Muller, Gilles (2010). "Tracking code patterns over multiple software versions with Herodotos" (PDF). Proceedings of the 9th International Conference on Aspect-Oriented Software Development (PDF). ACM. pp. 169–180
- Nicolas Palix. "Nicolas Palix: Herodotos"
- Padioleau, Yoann; Lawall, Julia; Muller, Gilles (2007). "Semantic Patches, Documenting and Automating Collateral Evolutions in Linux Device Drivers" (PDF). coccinelle.gitlabpages.inria.fr. Retrieved 2020-08-29
- Valerie Henson (2009-01-20). "Semantic patching with Coccinelle". Linux Weekly News. Retrieved 2011-04-25.
- Wolfram Sang (2010-03-30). "Evolutionary development of a semantic patch using Coccinelle". Linux Weekly News. Retrieved 2011-04-25
لینک های خارجی[ویرایش]
- کد منبع در گیتهاب[۲]
- دانلود رسمی آخرین نسخه پایدار[۳]
- مقالات توصیفکننده استفاده از کوکینل[۴]
- کوکینل: گالری وصلههای معنایی[۵]
- ↑ "Coccinelle: A Program Matching and Transformation Tool for Systems Code". coccinelle.gitlabpages.inria.fr. Retrieved 2021-03-09.
- ↑ coccinelle/coccinelle, Coccinelle, 2024-06-24, retrieved 2024-06-26
- ↑ «Coccinelle: A Program Matching and Transformation Tool for Systems Code». coccinelle.gitlabpages.inria.fr. دریافتشده در ۲۰۲۴-۰۶-۲۶.
- ↑ «Coccinelle: A Program Matching and Transformation Tool for Systems Code». coccinelle.gitlabpages.inria.fr. دریافتشده در ۲۰۲۴-۰۶-۲۶.
- ↑ «Coccinellery: A gallery of semantic patches for use with Coccinelle». coccinellery.org. دریافتشده در ۲۰۲۴-۰۶-۲۶.